#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int motor_up=2; //Pin de salida digital para subir la plataforma
const int motor_down=3; //Pin de salida digital para bajar la plataforma
const int ind_error=27; //Pin del indicador de error
const int ind_pt=26; //Pin del indicador de proceso sin errores
const int boton=28; //Pin de entrada del boton de inicio
LiquidCrystal_I2C lcd(0x27, 20, 4); //Declaracion del LCD, con dimensiones
//y direccion del modulo i2c
void setup() {
Wire.setSDA(0); //Configuración e inicialización de los pines SDA y SCL
Wire.setSCL(1); //para modulo i2c de la LCD
Wire.begin();
lcd.init(); //Inicialización de LCD
lcd.backlight();
lcd.begin(0,2);
lcd.print("Prueba de"); //Escritura del primer mensaje "prueba de continuidad"
lcd.setCursor(2, 1);
lcd.print("continuidad");
pinMode(boton, INPUT); //Configuración de entradas y salidas para
pinMode(motor_down, OUTPUT);//el boton, la plataforma y los indicadores
pinMode(motor_up, OUTPUT);
pinMode(ind_error, OUTPUT);
pinMode(ind_pt, OUTPUT);
for (int i=4; i<=18;i+=2){
pinMode(i,OUTPUT); //Configuración de los pines para enviar pulso
}
for(int j=5;j<=19;j+=2){
pinMode(j,INPUT);//Configuración de los pines de lectura de pulso
}
}
void sendPulse(int a,int e){ //Función de enviar pulso
if (e!=0){ //La función enciende o apaga el pulso del pin
digitalWrite(a,HIGH);//indicado con la letra "a"
delay(100);
}
else{
digitalWrite(a,LOW);
}
}
void plataforma(int x){//Función plataforma
//Esta función baja o sube la plataforma con
if (x==1){ //las puntas de prueba, al bajar muestra el
lcd.print("Realizando");//mensaje "Realizando prueba"
lcd.setCursor(2, 1);
lcd.print("Prueba");
digitalWrite(motor_down,HIGH);
delay(1000);
digitalWrite(motor_down,LOW);
}
else{
digitalWrite(motor_up,HIGH);
delay(1000);
digitalWrite(motor_up,LOW);
}
}
bool test(){ //Función test, se encarga de realizar la prueba
bool err=false; //Variable de retorno "false" si no hay errores, "true" si hay alguna falla
plataforma(1); //Se baja la plataforma
int a=1;
lcd.clear(); //Se limpia el LCD
lcd.print("Probando galleta"); //Se imprime "Probando galleta"
for (int i=4;i<=18;i+=2){ //ciclo for para pasar por todas las galletas
sendPulse(i,1); //Se enivia un pulso a la galleta
lcd.setCursor(2, 1);
lcd.print(a); //Se imprime el numero de la galleta que se está probando
if (digitalRead((i+1))==LOW){ //Si no se recibe señal
sendPulse(i,0); //Se apaga el pulso
lcd.clear(); //y se imprime el mensaje de fallo
lcd.setCursor(0, 0); //junto al numero de la galleta
lcd.print("fallo en galleta");
lcd.setCursor(2, 1);
lcd.print(a);
digitalWrite(ind_error,HIGH); //Se enciende el indicador de error
err= true;
break; // y se detiene el proceso de pruebas
}
sendPulse(i,0); //se apaga el pulso
a++;
}
plataforma(0); //Se sube la plataforma
return err; //Se retorna si hubo o no hubo un error
}
void loop() {
if (digitalRead(boton)==HIGH){ //Si el boton se presiona se reinician
digitalWrite(ind_error,LOW); //Los indicadores y la LCD
digitalWrite(ind_pt,LOW);
lcd.clear();
if (test()==false){ //Se realiza la prueba y se verifica si
lcd.clear(); //hubo algun error, de lo contrario se
lcd.print("Sin fallas"); //enciende el indicador verde y se muestra
digitalWrite(ind_pt, HIGH); //Sin fallas
}
}
delay(1); //Solo sirve para darle fluidez a la simulación
}