/* Altere os valores das portas em "#define" para as portas
   que estiverem em uso no projeto.
*/
//Portas Leitura de controle
#define CMF A0 //Comando Frente
#define CMB A1 //Comando Ré
#define CMD A2 //Comando Direita
#define CME A3 //Comando Esquerda
//Portas de controle de motores
#define MA1 2 //Controle Porta A do motor 1
#define MB1 3 //Controle Porta B do motor 1
#define MA2 4 //Controle Porta A do motor 2
#define MB2 5 //Controle Porta B do motor 2
int VM[] = {0, 0, 0, 0}; //guarda valores mapeados das portas analogicas
int Botao[] = {LOW, LOW, LOW, LOW}; //Guarda o estado dos botões
int PA[] = {CMF, CMB, CMD, CME}; //Guarda as portas de leitura em uma variavel
int PD[] = {MA1, MB1, MA2, MB2}; //Guarda as portas de comando em uma variavel
void setup() {
  for (int Np = 0; Np <= 3; Np++) { //laço que se repete 4 vezes até que Np seja igual a 3
    pinMode(PA[Np], INPUT);         //define todas as portas em PA como Entrada
    pinMode(PD[Np], OUTPUT);        //define todas as portas em Pd como Saída
    digitalWrite(PD[Np], LOW);      //desliga todas as portas de saída
  }
}
void loop() {
  for (int Np = 0; Np <= 3; Np++) {        //laço que se repete 4 vezes até que Np seja igual a 3
    int VL[Np];
    VL[Np] = analogRead(PA[Np]);           //faz a leitura das portas analogicas e guarda em VL
    VM[Np] = map(VL[Np], 0, 1023, 0, 255); //mapeia o valor lido de cada porta analogica
    if (VM[Np] >= 200) { //verifica se o valor mapeado é igual ou maior que 150 (dentre 3-5v)
      Botao[Np] = HIGH;  //altera o estado de um dos botões que corresponda á porta lida
    } else {
      Botao[Np] = LOW;
    }
  }
  if (Botao[0] == HIGH) { //frente
    digitalWrite(MA1, HIGH); //porta A motor 1
    digitalWrite(MA2, HIGH); //porta A motor 2
  } else if (Botao[1] == HIGH) { //ré
    digitalWrite(MB1, HIGH); //porta B motor 1
    digitalWrite(MB2, HIGH); //porta B motor 2
  } else if (Botao[2] == HIGH) { //direita
    digitalWrite(MA1, HIGH); //porta A motor 1
    digitalWrite(MB2, HIGH); //porta B motor 2
  } else if (Botao[3] == HIGH) { //esquerda
    digitalWrite(MB1, HIGH); //porta B motor 1
    digitalWrite(MA2, HIGH); //porta A motor 2
  } else { //Desligado
    for (int Np = 0; Np <= 3; Np++) {
      digitalWrite (PD[Np], LOW); //desliga todas as portas digitais dos motores
    }
  }
}