Ajuda programa em que a posição em que o servo deva girar é memorizada
O que eu estou buscando é uma solução para o seguinte.
Preciso controlar via controle remoto RF apenas um trecho em que o servo ou motor de passo atue,
Por exemplo: Ele inicia o giro, ai em um determinada posição, eu o paro e aperto um botão e memorize aquele trecho digamos IN e ai eu o coloco para rodar, e o paro novamente, e ai eu clic num botão e memorizo aquela posição como OFF, e ele só vai girar do ponto IN e OFF repetidamente, mas quando eu desligo o sistema, ele memoriza via usar a EEPROM do microcontrolador. e volta a funcionar de onde parou e se eu quiser, eu apago essas posições e ele volta a rodar tudo, os 180 graus, ou ser for Motor de Passo, seria o mesmo.
Estava vendo um código e me chamou a atenção esse trecho do codigo: //salva a ultima posição lida
posicaoAnterior = mySwitch.getReceivedValue();
Poderiam me ajudar? mas eu preciso de uma ideia de como fazer esse código. poderiam me dar uma ideia de codigo? sou iniciante mesmo. por favor, desculpa o incomodo.
um abraço
Tags:
const int botaoDireita = 2; // identifica o pino do botao a direita
const int botaoEsquerda = 3; // identifica o pino do botao a esquerda
const int servo = 4; // identifica o pino do servomotor
Servo servoMotor; // declara um objeto tipo Servo
int angulo = 90; // controla a posicao do eixo
void setup() {
pinMode(botaoDireita, INPUT);
digitalWrite(botaoDireita, HIGH);
pinMode(botaoEsquerda, INPUT);
digitalWrite(botaoEsquerda, HIGH);
servoMotor.attach(servo); // conecta o motor ao pino de controle
servoMotor.write(angulo); // gira o servo ate o ponto do meio
}
void loop() {
if(digitalRead(botaoDireita) == LOW) { // botao direita pressionado
if(angulo = 180) {
angulo = angulo + 1;
}
} else {
if(digitalRead(botaoEsquerda) == LOW) { // botao esquerda pressionado
if(angulo = 0) {
angulo = angulo - 1;
}
}
}
servoMotor.write(angulo);
delay(5);
}
so muda os valores que voce quer
Cara, obrigado, mas eu não sei se vai funcionar, apesar de eu ser analfabeto em programação. ( andei estudando e depois parei e agora estou voltando ) pensei que teria que usar algo para memorizar a posição e guardar na memoria eeprom, tipo memoriza a posição on e off.
Desculpa a minha ignorância se eu falei besteira.
é que os valores vão ser mudados a qualquer momento, via controle remoto, o o eixo do motor chega a uma determinada posição, ai eu aperto uma tecla que memoriza essa posição, ai eu aperto outra tecla, para que o motor vá para a outra posição, ali, eu aperto a tecla de novo, para memorizar essa segunda posição. e ai ele passa a girar do inicio, a posição 1 memorizada ate a posição 2 memorizado.
Ele só vai girar nesse limite, ate que eu delete essa memoria e ele volta a girar o seu ciclo normal, total, por exemplo os 180 graus.
obrigado e um abraço
Para memorizar, de fato vc precisa usar a eeprom, basta complementar isso no programa do vinicius.
Os comandos de eeprom podem ser vistos em:
http://arduino.cc/en/Reference/EEPROM
Modificando o programa do vinicius (o que modifiquei está em bold):
#include <EEPROM.h>
const int botaoDireita = 2; // identifica o pino do botao a direita
const int botaoEsquerda = 3; // identifica o pino do botao a esquerda
const int servo = 4; // identifica o pino do servomotor
const in posicao = 0; // define em que endereço da eeprom vai gravar
Servo servoMotor; // declara um objeto tipo Servo
int angulo = 90; // controla a posicao do eixo
void setup() {
pinMode(botaoDireita, INPUT);
digitalWrite(botaoDireita, HIGH);
pinMode(botaoEsquerda, INPUT);
digitalWrite(botaoEsquerda, HIGH);
angulo=EEPROM.read(posicao);
servoMotor.attach(servo); // conecta o motor ao pino de controle
servoMotor.write(angulo); // gira o servo ate o ponto do meio
}
void loop() {
if(digitalRead(botaoDireita) == LOW) { // botao direita pressionado
if(angulo != 180) {
angulo = angulo + 1;
EEPROM.write(posicao, angulo);
}
} else {
if(digitalRead(botaoEsquerda) == LOW) { // botao esquerda pressionado
if(angulo != 0) {
angulo = angulo - 1;
EEPROM.write(posicao, angulo);
}
}
}
servoMotor.write(angulo);
delay(5);
}
bold é negrito?
Esse programa ja é o finalizado Eduardo? o Vinicius modificado e adaptado por ti?
Obrigado por atender ao meu apelo. vou tentar entender o codigo.
Um abraço
Isso, negrito.
Relendo sua necessidade... Não.
Ele memoriza a posição de parada.
Sua solicitação seria que tivesse um botão diferente para memorizar os limites.
Podem ser 2 botoes, um para o limite superior e outro para o limite inferior ?
Eduardo, obrigado e bom dia.
A muito tempo venho tentando apreender como acrescentar trechos de vários códigos em 1 só, pois voce pega um trecho de um tutorial e outros de outros e precisa fazer um codigo só, pesquisei e achei esse vídeo, as não esta bem explicado não. veja se puder.
como juntar varios codigos arduino em 1 só para unir varios projetos PT 1
https://www.youtube.com/watch?v=GgnoUQOXMc4
Esse código não termina ai, ai eu precisaria acrescentar um outro trecho de código que peguei na inter, que é para o uso de um sensor ultrassônico, em que tudo pararia se a pessoa não for detectada em 1 metro e meio por exemplo.
Alias, sabe se o ultrassônico funciona igual aqueles sensores de presença que desligam a ligam a luz de corredores de prédio?
Pois aquele, ( ao menos aqui do meu prédio ) mesmo eu estando no corredor, ele desliga, ai é ruim, é preciso se movimentar para ele acender novamente a luz.
Se o ultrasonico for igual, não dar certo.
Outra coisa, sabe se ele, o sensor ultrassônico funcionaria em cima de uma base giratoria? girando? por exemplo: eu faria um programa que acionasse um buzzer, caso alguen se aproximasse do raio de um circulo.
O sensor detectaria a presença de uma pessoa a menos de um metro, se esse sensor ficasse girando em circulo? ai naquele raio do circulo ele detectaria? algo? sabe me dizer? um abraço
Sim, funciona, já fiz um parecido com esse: Video
Obrigado pela dica, achei varios
OBRIGADO A TODOS, JA É UM BOM COMEÇO
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por