Ir ao conteúdo
  • Cadastre-se

Pequeno problema em código do Arduino.


Posts recomendados

Galera, estou fazendo um projeto de maquete de um portão automatico.

Para isso, estou usando o Arduino UNO, e o micro L293D, que funciona como uma ponte H para o motor da maquete do portão.

Estou simulando o programa no Proteus ISIS.

Funciona da seguinte maneira.

Ao apertar a 'chave', o portão que está inicialmente aberto, estará pressionando o fim de curso 'iniciodecurso', que estará aberto, e fechará.

chegando ao final, o portão baterá no fim de curso 'fimdecurso' e ira parar o motor.

ao apertar 'chave' novamente, o portão volta no sentido oposto. Quando chegar no 'iniciodecurso', irá parar.

O problema todo, acredito eu, está nessa variavel 'iniciodecurso', pois se eu tirar ela, o programa funciona para abrir, parar no 'fimdecurso' e fechar.

Só não está parando novamente quando deveria..

aqui vai o código:

int fimdecurso = 9;
int iniciodecurso = 10;
int chave = 8;
int vchave = 0;
int mot3 = 12;
int mot4 = 13;
int vfimdecurso = 1;
int viniciodecurso = 0;

void setup(){
Serial.begin(9600);
pinMode(fimdecurso, INPUT);
pinMode(iniciodecurso, INPUT);
pinMode(chave, INPUT);
pinMode(mot3, OUTPUT);
pinMode(mot4, OUTPUT);
digitalWrite(mot3, LOW);
digitalWrite(mot4, LOW);
digitalRead(vfimdecurso);
digitalRead(viniciodecurso);
}

void loop(){

vchave = digitalRead(chave);
viniciodecurso = digitalRead(iniciodecurso);
while (viniciodecurso == 0){
if (vchave == 1){ // Ao apertar botão, motor gira pra um lado. Inicio de curso volta a seu estado normal de 1.
digitalWrite(mot3, HIGH);
digitalWrite(mot4, LOW);
}
}
vfimdecurso = digitalRead(fimdecurso);

if (vfimdecurso == 0){ // Ao chegar no fim do trajeto, portão bate no fim de curso e para
digitalWrite(mot3, LOW);
digitalWrite(mot4, LOW);
}
while (vfimdecurso == 0){ // Ao apertar novamente o botão, motor gira pra outro lado
vchave = digitalRead(chave);
if (vchave == 1){
digitalWrite(mot3, LOW);
digitalWrite(mot4, HIGH);
}
}
iniciodecurso = 1;
viniciodecurso = digitalRead(iniciodecurso);

if (viniciodecurso == 0){ // Ao chegar no inicio do trajeto, portão bate no inicio (fim) de curso e para
digitalWrite(mot3, LOW);
digitalWrite(mot4, LOW);
}
while (viniciodecurso == 0){
vchave = digitalRead(chave);

if(vchave == 1){
return;
}
}

}

alguma ajuda aí, pfvr?

Link para o comentário
Compartilhar em outros sites

Qual exatamente é o problema? Assim, de relance, eu só mudaria o seguinte: colocaria a primeira leitura de "chave" para dentro do while, assim como você fez embaixo, no "while (vfimdecurso == 0)". Se não for assim, a não ser que a chave esteja acionada no início da execução, ela receberá 0 e o programa ficará preso no "while (viniciodecurso == 0)" para sempre, já que se não ocorre outra leitura de chave, o "if (vchave == 1)" nunca será verdade. Espero que ajude :P

Link para o comentário
Compartilhar em outros sites

Qual exatamente é o problema? Assim, de relance, eu só mudaria o seguinte: colocaria a primeira leitura de "chave" para dentro do while, assim como você fez embaixo, no "while (vfimdecurso == 0)". Se não for assim, a não ser que a chave esteja acionada no início da execução, ela receberá 0 e o programa ficará preso no "while (viniciodecurso == 0)" para sempre, já que se não ocorre outra leitura de chave, o "if (vchave == 1)" nunca será verdade. Espero que ajude :P

é, fiz aqui e nao resolveu na hora de compilar..

parece que o programa apenas nao reconhece o "iniciodecurso" e o "viniciodecurso" como entradas, não sei o porque.

aí sempre que eu coloco "viniciodecurso como condição para algo, nunca entra nessa condição.

então, o unico modo q está funcionando, de modo que o motor não para quando volta, é o código assim:

int fimdecurso = 9;
int iniciodecurso = 10;
int chave = 8;
int vchave = 0;
int mot3 = 12;
int mot4 = 13;
int vfimdecurso = 1;
int viniciodecurso = 1;

void setup(){
Serial.begin(9600);
pinMode(fimdecurso, INPUT);
pinMode(iniciodecurso, INPUT);
pinMode(chave, INPUT);
pinMode(mot3, OUTPUT);
pinMode(mot4, OUTPUT);
digitalWrite(mot3, LOW);
digitalWrite(mot4, LOW);
}

void loop(){

vchave = digitalRead(chave);

if (vchave == 1){
digitalWrite(mot3, HIGH);
digitalWrite(mot4, LOW);
}
vfimdecurso = digitalRead(fimdecurso);

if (vfimdecurso == 0){
digitalWrite(mot3, LOW);
digitalWrite(mot4, LOW);
}
while (vfimdecurso == 0){
vchave = digitalRead(chave);
if (vchave == 1){
digitalWrite(mot3, LOW);
digitalWrite(mot4, HIGH);
}
}
viniciodecurso = digitalRead(iniciodecurso);

if (viniciodecurso == 0){
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
return;
}

o problema, é que ele deveria parar, quando chegasse na chave fim de curso "iniciodecurso".

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!