009 - Arduino - Utilizando funções
A utilização de funções na programação, além de facilitar no desenvolvimento do código o deixa muito mais organizado.
Este código colocamos três botões pulsantes, onde cada um chamará uma função.
O esquema no thinkercad.
O código:
//-------------------------------------------- //Aulas Online - Arduino //Aula:- Otimizando o código ( uso de funções ) //Auto:- Clodoaldo //Revisão:- 06Out2020 //-------------------------------------------- //-------------------------------------------- //DEFINIÇÃO DE ENTRADAS E SAÍDAS //ENTRADAS #define S0 A0 #define S1 A1 #define S2 A2 //SAÍDAS #define VM 8 #define AM 7 #define VD 6 //-------------------------------------------- //-------------------------------------------- //DEFINIÇÃO DE VARIÁVEIS // aqui suas variáveis //-------------------------------------------- //-------------------------------------------- //INCLUI AS BIBLIOTECAS NECESSÁRIAS #include <LiquidCrystal.h> // biblioteca do LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Pinos onde o LCD está ligado //-------------------------------------------- //-------------------------------------------- void setup() { lcd.begin(16, 2); //Inicializa LCD //pinos configurados com entrada pinMode(S0, INPUT); pinMode(S1, INPUT); pinMode(S2, INPUT); //pinos configurados com Saídas pinMode(VM, OUTPUT); pinMode(AM, OUTPUT); pinMode(VD, OUTPUT); } //------------------------------------- //Função secundária void HORARIO() { lcd.setCursor(0,0); lcd.print("horario "); digitalWrite(VM, HIGH); delay(500); digitalWrite(AM, HIGH); delay(500); digitalWrite(VD, HIGH); delay(500); } //------------------------------------- //------------------------------------- //Função secundária void ANTIHORARIO() { lcd.setCursor(0,0); lcd.print("Antihorario "); digitalWrite(VD, HIGH); delay(500); digitalWrite(AM, HIGH); delay(500); digitalWrite(VM, HIGH); delay(500); } //------------------------------------- //Função secundária void DESLIGA() { lcd.setCursor(0,0); lcd.print("Testa funcao..."); digitalWrite(VD, LOW); digitalWrite(AM, LOW); digitalWrite(VM, LOW); } //------------------------------------- //------------------------------------- //Chama função principal void loop() { lcd.setCursor(0,0); lcd.print("Testa funcao..."); if(digitalRead(S0)==HIGH) { HORARIO(); // chama função horário } if(digitalRead(S1)==HIGH) { ANTIHORARIO(); // chama função horário } if(digitalRead(S2)==HIGH) { DESLIGA(); // chama função desliga } }Agora, vamos programas um semáforo com um botão para ligar e um para desligar. Ainda não utilizamos interrupção, portando, devemos manter BD um tempo pressionado.
O esquema no thinkercad.
O código:
//-------------------------------------------------
//Aulas: Arduino Online //Projeto: M4A - Semáforo com função //Autor: Clodoaldo //Revisão: 07_10_2020 //------------------------------------------------- //------------------------------------------------- //DEFININIÇÃO DE ENTRADAS E SAÍDAS (TAG) //Saídas #define VM1 2 #define AM1 3 #define VD1 4 #define VM2 5 #define AM2 6 #define VD2 7 //Entradas #define LIGA 12 #define DESLIGA 13 //------------------------------------------------- //DEFININIÇÃO DE VÁRIÁVEIS AUXILIARES //Variáveis bool SELO = 0; //------------------------------------------------- void setup() { pinMode(VM1, OUTPUT); pinMode(AM1, OUTPUT); pinMode(VD1, OUTPUT); pinMode(VM2, OUTPUT); pinMode(AM2, OUTPUT); pinMode(VD2, OUTPUT); pinMode(LIGA, INPUT); pinMode(DESLIGA, INPUT); } void ESTADO_00() { digitalWrite(VM1, LOW); digitalWrite(AM1, LOW); digitalWrite(VD1, LOW); digitalWrite(VM2, LOW); digitalWrite(AM2, LOW); digitalWrite(VD2, LOW); } void ESTADO_01() { digitalWrite(VM1, HIGH); digitalWrite(AM1, LOW); digitalWrite(VD1, LOW); digitalWrite(VM2, LOW); digitalWrite(AM2, LOW); digitalWrite(VD2, HIGH); } void ESTADO_02() { digitalWrite(VM1, HIGH); digitalWrite(AM1, LOW); digitalWrite(VD1, LOW); digitalWrite(VM2, LOW); digitalWrite(AM2, HIGH); digitalWrite(VD2, LOW); } void ESTADO_03() { digitalWrite(VM1, LOW); digitalWrite(AM1, LOW); digitalWrite(VD1, HIGH); digitalWrite(VM2, HIGH); digitalWrite(AM2, LOW); digitalWrite(VD2, LOW); } void ESTADO_04() { digitalWrite(VM1, LOW); digitalWrite(AM1, HIGH); digitalWrite(VD1, LOW); digitalWrite(VM2, HIGH); digitalWrite(AM2, LOW); digitalWrite(VD2, LOW); } void loop() { if(digitalRead(LIGA)==HIGH) { SELO=HIGH; } if(SELO==HIGH) { ESTADO_01(); delay(2000); ESTADO_02(); delay(2000); ESTADO_03(); delay(2000); ESTADO_04(); delay(2000); } if(digitalRead(DESLIGA)==HIGH) { SELO=LOW; } if(SELO==LOW) { ESTADO_00(); } }"Todo grande problema deve ser dividido em problemas menores"
www.clubedaeletronica.com.br
Comentários
Postar um comentário
Sugestões para otimizar aulas