#define BotSobe 2 // Botao para subir #define BotDesce 3 // Botao para descer #define BotCom 4 // Botao executa comando #define ChSobe 6 // Chave fim de curso subida #define ChDesce 7 // Chave fim de curso descida #define Saida1 8 // Saidas para reles #define Saida2 9 #define Saida3 10 char subiu = 0; // Define posicao em baixo //------------------------------------- void setup() { Serial.begin(115200); // Inicialise Serial pinMode(BotSobe, INPUT_PULLUP); // Define port como entrada PullUp ou saidas pinMode(BotDesce, INPUT_PULLUP); pinMode(BotCom, INPUT_PULLUP); pinMode(ChSobe, INPUT_PULLUP); pinMode(ChDesce, INPUT_PULLUP); pinMode(Saida1, OUTPUT); pinMode(Saida2, OUTPUT); pinMode(Saida3, OUTPUT); digitalWrite(Saida1, 1); // Ligue Saidas digitalWrite(Saida2, 1); digitalWrite(Saida3, 1); } //------------------------------------ void sobe(void) { digitalWrite(Saida3, 0); // desliga saidas 1 2 e 3 digitalWrite(Saida1, 0); digitalWrite(Saida2, 0); while (!digitalRead(ChSobe)); // Enquanto não encontra o fim de curso subida digitalWrite(Saida1, 1); // Liga saidas 1 2 e 3 digitalWrite(Saida2, 1); digitalWrite(Saida3, 1); } //------------------------------------ void desce(void) { digitalWrite(Saida3, 0); // desliga saidas 2 e 3 digitalWrite(Saida2, 0); while (!digitalRead(ChDesce)); // Enquanto não encontra o fim de curso descida digitalWrite(Saida2, 1); // Liga saidas 2 e 3 digitalWrite(Saida3, 1); } //------------------------------------ void loop() { while (!digitalRead(BotSobe)) // Se botao sobe apertado { delay(5); while (!digitalRead(BotSobe)) // Se botao sobe continua apertado { delay(5); if (digitalRead(BotSobe)) // Se botao sobe foi liberado { sobe(); // Chama rotina sobe } } } while (!digitalRead(BotDesce)) // Se botao desce apertado { delay(5); while (!digitalRead(BotDesce)) // Se botao desce continua apertado { delay(5); if (digitalRead(BotDesce)) // Se botao desce foi liberado { desce(); // Chama rotina desce } } } while (!digitalRead(BotCom)) // Se botao BotCom apertado { delay(5); while (!digitalRead(BotCom)) // Se botao BotCom continua apertado { delay(5); if (digitalRead(BotCom)) // Se botao BotCom foi liberado { if (subiu) // Se está em baixo (subiu = 0) { sobe(); // Chama rotina sobe } else // Se está em cima (subiu = 1) { desce(); // Chama rotina desce } subiu ^= 1; // invewrte informacao de subiu } } } delay(100); // deleay de 0,1 seg }