/******************************************************************************* Projeto I06 - Controlando um motor DC com o CI L293D Autor: Angelo Luis Ferreira Data: 29/10/2020 http://squids.com.br/arduino *******************************************************************************/ // botões de controle #define switchPin 2 // Entrada da botão que inverte a rotação #define turnPin 8 // Entrada do botão liga e desliga o circuito #define potPin 0 // Potenciômetro no pino analógico 0 // L293D #define motorPin1 3 // Entrada 1 do L293D #define motorPin2 4 // Entrada 2 do L293D #define speedPin 9 // Pino de Ativação (Enable 1) do L293D (PMW) // variáveis int Mspeed = 0; // Uma variável para armazenar o valor de velocidade atual boolean stateSwitch = 0; // variável para armazenar o status do switchPin (0 ou 1) boolean stateTurn = 0; // variável para armazenar // leds const byte ledGreen = 7; const byte ledYellow = 6; const byte ledRed = 5; void setup() { //define o pino da chave como INPUT pinMode(switchPin, INPUT_PULLUP); pinMode(turnPin, INPUT_PULLUP); // define os pinos remanescentes como saída pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(speedPin, OUTPUT); // define os leds pinMode(ledGreen, OUTPUT); pinMode(ledYellow, OUTPUT); pinMode(ledRed, OUTPUT); } void loop() { turnOnOff(); if (stateTurn) { Mspeed = analogRead(potPin)/4; // lê o valor de velocidade a partir do potenciômetro analogWrite(speedPin, Mspeed); // escreve a velocidade para o pino de Ativação 1 turnLed(Mspeed); // acende o led correspondente à velocidade pushSwitch(); // verifica se o botão para inverter a rotação do motor foi acionado if (stateSwitch) { // Se a chave estiver HIGH, gire o motor em sentido horário digitalWrite(motorPin1, LOW); // define a Entrada 1 do L293D como baixa digitalWrite(motorPin2, HIGH); // define a Entrada 2 do L293D como alta } else { // se a chave estiver LOW, gire o motor em sentido anti-horário digitalWrite(motorPin1, HIGH); // define a Entrada 1 do L293D como baixa digitalWrite(motorPin2, LOW); // define a Entrada 2 do L293D como alta } } else { turnOffLeds(); digitalWrite(motorPin1, LOW); // define a Entrada 1 do L293D como baixa digitalWrite(motorPin2, LOW); // define a Entrada 2 do L293D como alta } } void turnOnOff() { if (!digitalRead(turnPin)) { // verifica se o botão foi acionado stateTurn = !stateTurn; while(!digitalRead(turnPin)) {} delay(50); } } void pushSwitch() { if (!digitalRead(switchPin)) { // verifica se o botão foi acionado stateSwitch = !stateSwitch; while(!digitalRead(switchPin)) {} delay(50); } } void turnLed(byte j) { if (j<=+85) { turnOffLeds(); digitalWrite(ledGreen, HIGH); } else if ((85< j) && (j<= 170)) { turnOffLeds(); digitalWrite(ledYellow, HIGH); } else if (j>=170) { turnOffLeds(); digitalWrite(ledRed, HIGH); } } void turnOffLeds() { digitalWrite(ledGreen, LOW); digitalWrite(ledRed, LOW); digitalWrite(ledYellow, LOW); }