//Incluir librerías
#include <LiquidCrystal.h>
#define ENABLE A1 //Define ENABLE como una constante de valor A1
#define B_IN A0 //Define B_IN como una constante de valor A0
#define LED_V 2 //Define B_IN como una constante de valor 2
#define ESPERA 100 //Define espera como una constante de valor 100
int estado=0; //Define variable entera estado con valor inicial 0
int entrada; //Define variable entera entrada
unsigned char secuencia=0; //Define variable caracter secuencia
/* Display */
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); //Pasar el número de pines al constructor
//Poner aquí el código de configuración, se ejecuta una vez:
void setup() {
//Asignación de nombres lógicos a IO
pinMode(ENABLE, INPUT_PULLUP); //Conexión a 5V a través de la resistencia interna
pinMode(B_IN, INPUT_PULLUP); //Conexión a 5V a través de la resistencia interna
pinMode(LED_V, OUTPUT);
Serial.begin(115200);
lcd.begin(16, 2); //Inicializa el LCD
//lcd.print("Hello World!"); //Ejemplo de interacción con el LCD
showSpalshScreen();
lcd.clear();
lcd.cursor();
lcd.setCursor(1, 0);
lcd.setCursor(0, 0);
lcd.print("Maquina estados");
estado=0;
ver_sec(0);
}
//Poner aquí el código principal, se ejecuta repetidamente, de manera indefinida:
void loop() {
//Máquina de estados-Inicio-------------------------
switch (estado) {
case 0:
if(digitalRead(ENABLE)==0) {
if(digitalRead(B_IN)==0) {
estado=0;ver_sec(0);
}
else {
estado=1;ver_sec(1);
}
}
else {
estado=0;
}
digitalWrite(LED_V,LOW);
ver_estado(estado);
delay(ESPERA);
break;
//-----------------------------------------------
case 1:
if(digitalRead(ENABLE)==0) {
if(digitalRead(B_IN)==0) {
estado=2;ver_sec(0);
}
else {
estado=1;ver_sec(1);
}
}
else {
estado=1;
}
digitalWrite(LED_V,LOW);
ver_estado(estado);
delay(ESPERA);
break;
//-----------------------------------------------
case 2:
if(digitalRead(ENABLE)==0) {
if(digitalRead(B_IN)==0) {
estado=0;ver_sec(0);
}
else {
estado=3;ver_sec(1);
}
}
else {
estado=2;
}
digitalWrite(LED_V,LOW);
ver_estado(estado);
delay(ESPERA);
break;
//-----------------------------------------------
case 3:
if(digitalRead(ENABLE)==0) {
if(digitalRead(B_IN)==0) {
estado=2;ver_sec(0);
}
else {
estado=1;ver_sec(1);
}
}
else {
estado=3;
}
digitalWrite(LED_V,HIGH);
ver_estado(estado);
delay(ESPERA);
break;
}
//Máquina de estados-Fin----------------------------
}
//Visualización de estado en LCD
void ver_estado(int paso) {
lcd.setCursor(0, 1);
lcd.print("EST:");
lcd.print(estado);
lcd.setCursor(16,0);
if(digitalRead(ENABLE)==0) {
lcd.print(1);
}
else {
lcd.print(2);
}
}
//Verificar secuencia
void ver_sec(char bite) {
int i=0,val;
secuencia= secuencia << 1;
secuencia = secuencia + bite;
val=secuencia;
lcd.setCursor(7, 1);
for(i=0;i<8;i++) {
if((val & 0b10000000) == 0b10000000) {
lcd.print(1);
}
else {
lcd.print(0);
}
val = val << 1;
}
}
void showSpalshScreen() {
String message= "Iniciando";
lcd.print("Taller Ing II ");
lcd.setCursor(3, 1);
for (byte i=0;i<message.length();i++) {
lcd.print(message[i]);
delay(100);
}
delay(500);
}