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
}
}