int Port_D[] = {2,3,4,5,6,7,8}; //definição de todas as portas digitais
int Port_A[] = {A0,A1,A2,A3,A4}; //definição de todas as portas analogicas
int Polo = LOW; //altera seu estado varias vezes em um tempo determinado por Tempo_1.
int estadoFarol = LOW; //altera o estado do led frontal do hover
int contagem; //cria uma contagem quando o botão principal é apertado
int alertaFarol = LOW; //muda seu estado fazendo com que o farol pisque simuntaneamente
int Bot[] = {LOW, LOW, LOW, LOW, LOW}; //guarda o valor atual dos botões e altera assim que forem pressonados
#include "neotimer.h"
Neotimer Tempo_1 = Neotimer(100); //Define o tempo de alteração do estado de Polo
Neotimer Tempo_2 = Neotimer(1); //tempo de contagem do botão de ação do controle
Neotimer Tempo_3 = Neotimer(300); //tempo para o farol piscar
void setup() {
Serial.begin(115200); //inicia a comunicação serial
for (int Np = 0; Np <= 6; Np++){ //laço que se repete 7 vezes
if (Np < 5){ //enquanto Np for menor que 5
pinMode(Port_A[Np], INPUT); //define todas as portas de A0 - A4 como entrada
}
pinMode(Port_D[Np], OUTPUT); //define todas as portas de 2 - 8 como saída
digitalWrite(Port_D[Np], LOW); //desliga todas as portas digitais
}
int pLed = HIGH;
for (int Pl = 0; Pl <= 5; Pl++){
digitalWrite(Port_D[6], pLed);
pLed = !pLed;
delay(400);
}
}
void loop() {
for (int Nb = 0; Nb <= 4; Nb++){
Bot[Nb] = digitalRead(Port_A[Nb]); //obtém o valor das portas digitais e guarda em Bot[]
}
if(Bot[0] == HIGH && Bot[2] == HIGH){ //frente + direita
if (Tempo_1.repeat()){ //gerador de repetições
Polo = !Polo; //inverte o estado atual de polo
}
digitalWrite(Port_D[0], HIGH);
digitalWrite(Port_D[1], LOW);
digitalWrite(Port_D[2], Polo); //define na porta digital o valor alterado de polo
digitalWrite(Port_D[3], LOW);
} else if (Bot[0] == HIGH && Bot[3] == HIGH){ //frente + Esquerda
if (Tempo_1.repeat()){ //gerador de repetições
Polo = !Polo;//inverte o estado atual de polo
}
digitalWrite(Port_D[0], Polo);//define na porta digital o valor alterado de polo
digitalWrite(Port_D[1], LOW);
digitalWrite(Port_D[2], HIGH);
digitalWrite(Port_D[3], LOW);
} else if (Bot[1] == HIGH && Bot[2] == HIGH){ //ré + direita
if (Tempo_1.repeat()){ //gerador de repetições
Polo = !Polo;//inverte o estado atual de polo
}
digitalWrite(Port_D[0], LOW);
digitalWrite(Port_D[1], HIGH);
digitalWrite(Port_D[2], LOW);
digitalWrite(Port_D[3], Polo);//define na porta digital o valor alterado de polo
} else if (Bot[1] == HIGH && Bot[3] == HIGH){ //ré + esquerda
if (Tempo_1.repeat()){ //gerador de repetições
Polo = !Polo;//inverte o estado atual de polo
}
digitalWrite(Port_D[0], LOW);
digitalWrite(Port_D[1], Polo);//define na porta digital o valor alterado de polo
digitalWrite(Port_D[2], LOW);
digitalWrite(Port_D[3], HIGH);
} else if (Bot[0] == HIGH){ //frente
digitalWrite(Port_D[0], HIGH);
digitalWrite(Port_D[1], LOW);
digitalWrite(Port_D[2], HIGH);
digitalWrite(Port_D[3], LOW);
} else if (Bot[1] == HIGH){ //ré
digitalWrite(Port_D[0], LOW);
digitalWrite(Port_D[1], HIGH);
digitalWrite(Port_D[2], LOW);
digitalWrite(Port_D[3], HIGH);
} else if (Bot[2] == HIGH){ //Direita
digitalWrite(Port_D[0], HIGH);
digitalWrite(Port_D[1], LOW);
digitalWrite(Port_D[2], LOW);
digitalWrite(Port_D[3], HIGH);
} else if (Bot[3] == HIGH){ //esquerda
digitalWrite(Port_D[0], LOW);
digitalWrite(Port_D[1], HIGH);
digitalWrite(Port_D[2], HIGH);
digitalWrite(Port_D[3], LOW);
} else { //desliga todas as portas
digitalWrite(Port_D[0], LOW);
digitalWrite(Port_D[1], LOW);
digitalWrite(Port_D[2], LOW);
digitalWrite(Port_D[3], LOW);
}
if (Bot[4] == HIGH){ //inicia contagem se o botão de ação for pressionado
if (Tempo_2.repeat(2000)){ // Delay de tempo que se repete a cada 1 milisegundo
contagem++; //almenta o valor de "contagem" até no maximo 2 segundos
}
if (contagem >= 1998){ //verifica se o botão ficou pressionado tempo suficiente
digitalWrite(Port_D[5], HIGH); //liga a bomba de agua
if (Tempo_3.repeat()){ //delay que se repete em um tempo personalizado
alertaFarol = !alertaFarol; //altera o estado de "alertaFarol" simuntaneamente
}
digitalWrite(Port_D[6], alertaFarol); //liga/desliga o led principal varias vezes
}
} else {
if (contagem <= 1997 && contagem > 1){ //verifica se o valor é menor que o valor limite
estadoFarol = !estadoFarol; //altera o estado
}
digitalWrite(Port_D[5], LOW); //desliga a bomba de agua
digitalWrite(Port_D[6], estadoFarol); // liga/desliga o led principal
contagem = 0; //reseta os valores de contagem
Tempo_2.repeatReset(); //reseta o tempo de contagem
}
}