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?