Menu

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 bo
tão para ligar e um para desligar. Ainda não utilizamos interrupção, portando, devemos manter BD um tempo pressionado.

O esquema no thinkercad.
www.clubedaeletronica.com.br

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