/* control final Fabacademy2021 Autor:Luis Alberto Hernandez Vega Titulo:Smart Curing Station Esto fue desarrollado bajo la licencia creative commons para que puedas redistribuirlo libremente siempre que no sea con fines de lucro y des credito al autor */ //Querido colega programador // //cuando escribi este codigo, solo dios y yo //sabiamos como funcionaba. //ahora, ¡¡solo dios lo sabe!! // //asi que si estas tratando de "optimizar" //este codigo y fracasas (seguramente) //porfavor incremente el contador //como una advertencia // // total_de_horas_perdidas_aqui = 150 // #include int menu=0; int submenu=0; int motor=3; int led=2; int e=5;//LCD int rs=6;//LCD int v0=A0; //si quieres puedes usar una salida pwm para controlar el contraste yo use un potenciometro soldado int d4=7;//LCD int d5=8;//LCD int d6=9;//LCD int d7=10;//LCD int upb=11;//BP1 int dwnb=12;//BP2 int selb=13;//BP3 //int pt=A1;//fototransitor //variable que guarda valores del sensor LiquidCrystal lcd(rs, e, d4, d5, d6, d7); void setup() { //Serial.begin (9600); lcd.begin(16,2);//inicializa la comunicacion con el LCD analogWrite(v0,600);//controla brillo de los digitos del lcd pinMode(upb,INPUT_PULLUP); //boton hacia arriba como entrada pinMode(dwnb,INPUT_PULLUP); //boton hacia abajo como entrada pinMode(selb,INPUT_PULLUP); //boton de seleccion como entrada pinMode(motor,OUTPUT); //pin de motor como salida hacia mosfet pinMode(led,OUTPUT); //pin de luces como salida hacia mosfet //pinMode(pt,INPUT);//pin para entrada de sensor de luz digitalWrite(motor,LOW); digitalWrite(led, LOW); updateMenu(); //funcion de actualizar menu executeAction(); //funcion de ejecutar accion } void loop() { //detecta el pulso del boton dwn e incrementa el conteo if(!digitalRead(dwnb)) { menu++; updateMenu(); delay(300); while(!digitalRead(dwnb)); } //detecta el pulso del boton up e incrementa el conteo if(!digitalRead(upb)) { menu--; updateMenu(); delay(300); while(!digitalRead(upb)); } //detecta el pulso del boton de seleccion y ejecuta la funcion executeAction() if(!digitalRead(selb)) { executeAction(); delay(300); while(!digitalRead(selb)); } //analogRead (pt) ; // Serial.println(pt); } void updateMenu () { //muestra las opciones del primer nivel de menu switch(menu) { case 0: lcd.clear(); lcd.setCursor(0,0); lcd.print("Hola"); lcd.setCursor(0,1); lcd.print(" Mundo"); menu=0; break; case 1: lcd.clear(); lcd.setCursor(0,0); lcd.print(">30 seg 1 Hr"); lcd.setCursor(0,1); lcd.print(" 5 min 3 Hrs"); submenu=1; break; case 2: lcd.clear(); lcd.setCursor(0,0); lcd.print("30 seg 1 Hr"); lcd.setCursor(0,1); lcd.print(">5 min 3 Hrs"); submenu=2; break; case 3: lcd.clear(); lcd.setCursor(0,0); lcd.print("30 seg >1 Hr"); lcd.setCursor(0,1); lcd.print("5 min 3 Hrs"); submenu=3; break; case 4: lcd.clear(); lcd.setCursor(0,0); lcd.print("30 seg 1 Hr"); lcd.setCursor(0,1); lcd.print("5 min >3 Hrs"); submenu=4; break; case 5: menu=0; break; } } void executeAction () { //muestra las acciones a realizar en cada funcion action1,2,3 y 4 respectivamente switch(submenu) { case 1: action1(); break; case 2: action2(); break; case 3: action3(); break; case 4: action4(); break; } } //cada accion hace algo diferente dependiendo de la opcion seleccionada void action1() { digitalWrite(led,LOW);//apaga luces digitalWrite(motor,LOW);//apaga motores lcd.clear();//limpia la pantalla lcd.setCursor(0,0);//coloca el cursor en el primer renglon(fila 0) y primer columna (digito 0) lcd.print("Secando");//muestra el mensaje lcd.setCursor(0,1);//coloca el cursor en el segundo renglon (fila 1) y la primer columna (digito 0) lcd.print(" 30 seg");//muestra el mensaje digitalWrite(led,HIGH);//enciende luces digitalWrite(motor,HIGH);//enciende motores delay(1000);//esto es para hacer pruebas //delay(30000);//espera 30 segundos //digitalWrite(led,LOW);//apaga luces //digitalWrite(motor,LOW);//apaga motores menu=0;//regresa el contador a 0 updateMenu();//regresa a la pantalla inicial correspondiente al menu=0 } void action2() { lcd.clear();//limpia la pantalla lcd.setCursor(0,0);//coloca el cursor en el primer renglon(fila 0) y primer columna (digito 0) lcd.print("Secando");//muestra el mensaje lcd.setCursor(0,1);//coloca el cursor en el segundo renglon (fila 1) y la primer columna (digito 0) lcd.print(" 5 min");//muestra el mensaje digitalWrite(led,HIGH);//enciende luces digitalWrite(motor,HIGH);//enciende motores delay(2000);//esto es para hacer pruebas // delay(300000); //espera 5 minutos digitalWrite(led,LOW);//apaga luces digitalWrite(motor,LOW);//apaga motores menu=0;//regresa el contador a 0 updateMenu();//regresa a la pantalla inicial correspondiente al menu=0 } void action3() { lcd.clear(); lcd.setCursor(0,0); lcd.print(" Secando "); lcd.setCursor(0,1); lcd.print("1 Hr."); digitalWrite(led,HIGH); digitalWrite(motor,HIGH); delay(3000);//esto es para hacer pruebas //delay(3600000); digitalWrite(led,LOW); digitalWrite(motor,LOW); menu=0; updateMenu(); } void action4() { lcd.clear(); lcd.setCursor(0,0); lcd.print(" Secando "); lcd.setCursor(0,1); lcd.print("3 Hrs."); digitalWrite(led,HIGH); digitalWrite(motor,HIGH); delay(4000);//esto es para hacer pruebas //delay(10800000); digitalWrite(led,LOW); digitalWrite(motor,LOW); menu=0; updateMenu(); }