Transicion de estados con arduino

Esta vez les traigo como hacer una Transicion de estados con arduino

Una Transicion de estados es pasar de un estado a otro por medio de un pulsador usando como elemento activo un arduino.

Imaginemos un automovil que necesita pasar de una velocidad a otra contolado por la velocidad y peso. este proceso puede ser simulado con el codigo y el video a continuación.

En esta parte presento l código usado y en el video la explicacion del mismo:

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

// constants won't change. Used here to set a pin number :
const int ledPinAzul=  8;// the number of the LED pin
const int ledPinAmarillo =  9;// the number of the LED pin
const int ledPinVerde =  10;// the number of the LED pin
const int ledPinRojo =  11;// the number of the LED pin
const int botonB =  13;// the number of the LED pin
const int botonA =  12;// the number of the LED pin

const int estadoAzul = 1;             // ledState used to set the LED
const int estadoAmarillo = 2;             // ledState used to set the LED
const int estadoVerde = 3;             // ledState used to set the LED
const int estadoRojo = 4;             // ledState used to set the LED

// Variables will change :
int buttonAantes = 0;
int buttonAahora = 0;
int buttonBantes = 0;
int buttonBahora = 0;
int estadoUltimo = 3;
int Estado;

void setup() 
{
  // set the digital pin as output:
  pinMode(ledPinAzul, OUTPUT);
  pinMode(ledPinAmarillo, OUTPUT);
  pinMode(ledPinVerde, OUTPUT);
  pinMode(ledPinRojo, OUTPUT);

  pinMode(botonA, INPUT);
  pinMode(botonB, INPUT);
  Estado = estadoRojo;
  digitalWrite(ledPinRojo,HIGH);
  lcd.begin(16, 2);
  mensajeLCD("Bienvenido", "Modo: STANDBY");
}

void loop() 
{
  lectura();
  escritura();
}

void lectura()
{
  buttonAantes = buttonAahora;
  buttonAahora = digitalRead(botonA);
  buttonBantes = buttonBahora;
  buttonBahora = digitalRead(botonB);
  delay(50);
}

void escritura()
{
  switch(Estado)
  {
    case estadoAzul:
      controlarAzul();
    break;
    case estadoAmarillo:
      controlarAmarillo();
    break;
    case estadoVerde:
      controlarVerde();
    break;
    case estadoRojo:
      controlarRojo();
    break;
  }
}

void controlarAzul()
{
  if(buttonAantes == 1 && buttonAahora == 0)
  {
    apagar();
  }
  else if(buttonBantes == 1 && buttonBahora == 0)
  {
    prenderVerde();
  }  
}

void controlarAmarillo()
{
  if(buttonAantes == 1 && buttonAahora == 0)
  {
    apagar();
  }
  else if(buttonBantes == 1 && buttonBahora == 0)
  {
    prenderAzul();
  }  
}

void controlarVerde()
{
  if(buttonAantes == 1 && buttonAahora == 0)
  {
    apagar();
  }
  else if(buttonBantes == 1 && buttonBahora == 0)
  {
    prenderAmarillo();
  }  
}

void controlarRojo()
{
  if(buttonAantes == 1 && buttonAahora == 0)
  {
    prenderVerde();
  }
}

void prenderVerde()
{
  digitalWrite(ledPinAzul,LOW);
  digitalWrite(ledPinAmarillo,LOW);
  digitalWrite(ledPinVerde,HIGH);
  digitalWrite(ledPinRojo,LOW);
  mensajeLCD(" ", "Modo: AUTOMATICO");
  Estado = estadoVerde;
}

void prenderAmarillo()
{
  digitalWrite(ledPinAzul,LOW);
  digitalWrite(ledPinAmarillo,HIGH);
  digitalWrite(ledPinVerde,LOW);
  digitalWrite(ledPinRojo,LOW);
  mensajeLCD(" ", "Modo: PRUEBA");
  Estado = estadoAmarillo;
}

void prenderAzul()
{
  digitalWrite(ledPinAzul,HIGH);
  digitalWrite(ledPinAmarillo,LOW);
  digitalWrite(ledPinVerde,LOW);
  digitalWrite(ledPinRojo,LOW);
  mensajeLCD(" ", "Modo: MANUAL");
  Estado = estadoAzul;
}

void apagar()
{
  digitalWrite(ledPinAzul,LOW);
  digitalWrite(ledPinAmarillo,LOW);
  digitalWrite(ledPinVerde,LOW);
  digitalWrite(ledPinRojo,HIGH);
  mensajeLCD(" ", "Modo: STANDBY");
  Estado = estadoRojo;
}

void mensajeLCD(String mensajeA, String mensajeB)
{
  lcd.clear();
  lcd.setCursor(0, 0);  // set the cursor to column 1, line 1
  lcd.print(mensajeA); // Enviar el mensaje
  lcd.setCursor(0, 1);  // set the cursor to column 1, line 2
  lcd.print(mensajeB); // Enviar el mensaje
}

Se trata de dos pulsadores y 4 leds. al iniciar el programa un led rojo prende y todos los demas permanecen apagados. al presionar un pulsador de encendido el led verde y se pagan los demas, si se presiona el mismo pulsador de encndido el led verde se apaga y el rojo enciendo de nuevo. A todas estas el rojo indica standby, solo si esta prendido el verde y se presiona el otro pulsador de seleccion se podra cambiar de estados o colores entre los leds restantes. en cualquier momento que se precione el de encendido el led rojo prendera apagando el resto sin importar el estado anterior.

Aca les presento la imagen del circuito:

proyecto_luces_leds-300x234 Transicion de estados con arduino

Para el que lo desee puedo darles el link en circuits 123 autodesk para la simulación.

Saludos.

Comparte en...proyecto_luces_leds-300x234 Transicion de estados con arduinoproyecto_luces_leds-300x234 Transicion de estados con arduinoproyecto_luces_leds-300x234 Transicion de estados con arduinoproyecto_luces_leds-300x234 Transicion de estados con arduinoproyecto_luces_leds-300x234 Transicion de estados con arduino

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *