Ajuda programa em que a posição em que o servo deva girar é memorizada

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

Exibições: 1564

Responder esta

Respostas a este tópico

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço