hola gente como estan?Mi nombre es lionel,tengo 27 años y soy de buenos aires,argentina,estoy con un proyecto que nesecitaria si son tan amables que me den una mano,nobleza obliga confensar que quizas las ganas de crear el proyecto para casa supera al conocimiento que poseo en arduino,sepan disculpar si algunas cosas resultan ser muy obvias o estar equivocados en el desarrollo de otras…sin mas rodeos la situacion es la siguiente:
Estoy intentando hacer una especie de maquinas de jugos,la cual constaria de un arduino uno y un servo motor,y mediante una pantalla lcd 16x2 y 3 botones (MENU-boton 1-boton 2)seleccionariamos el modo y el tipo de jugo a tomar(que son 2:naranja y maracuya).En este link voy a dejar un grafico de cual es mi idea y tambien dejare el codigo que tengo…(se puede visualizar en “tinkercad” ACA
Cuales son los problemas con que me encuentro son que,por ejemplo,el codigo originalmente era para una pantalla 20x4 y 4 botones,yo trate de adaptarlo a mi nesecidad(16x2 y 3 botones),pero no contemplaba la idea de que se desaroyen submenus,en principio desearia saber la opinion de la gente que sabe mas que yo,en que si ven viable el "formato"del codigo para lograr el fin que yo deseo…
intente “generar” un nuevo switch dentro de los casos del switch,y tambien intente con un “if”,pero no logro hacer que las acciones que tomo en determinado "menu"no afecte al resto del programa,por ejemplo:
Estaba probando la alimentacion del servomotor,y lo asociaba al estado del pin correspondiente al boton 1,entonces,si presionaba (o no,segun si lo ponia cuando lea que este high o low)el boton funcionaba el servo,pero si en el "supuesto"menu 2 presionaba el 1 hacia la misma ejecucion obviamente…
Otra icognita que me surge,y esto seria una vez logrado el esquema basico del programa “funcional”, es que,deseo que cuando pase una determinada cantidad de seg(Por ej,3 o 5 segundos)sin tocar ningun boton me retorne al menu principal,pense usar millis,pero no se como adaptarlo para la funcion que yo quiero,ya que esto solo cuenta el tiempo transcurrido…
inicio=millis();
delay(1000);
fin=millis();
transcurrido=fin-inicio;
Serial.print(transcurrido);
delay(500);
y aqui esta el codigo completo
#include <Servo.h>
#include <LiquidCrystal.h>
Servo servomotor;
int pulsador1=0; //almacena el estado del botón
int pulsador2=0;
int pulsador3=0;
int estado1=0; //0=led apagado, 1=led encendido
int estado2=0;
int estado3=0;
int pulsadorAnt1=0; //almacena el estado anterior del boton
int pulsadorAnt2=0;
int pulsadorAnt3=0;
int x;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//** Programa **//
void setup() {
Serial.begin(9600);
servomotor.attach(10);
pinMode (6, INPUT);
pinMode (7, INPUT);
pinMode (8, INPUT);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("MAQUINA DE JUGOS");
lcd.setCursor(0,2);
lcd.print(" PRESIONE MENU");
}
void pulsar1() {
pulsador1 = digitalRead(6); //lee si el botón está pulsado
if((pulsador1==LOW)&&(pulsadorAnt1==HIGH)){ //si el boton es pulsado y antes no lo estaba
estado1++;
delay(20); //pausa de 40 ms
}
pulsadorAnt1=pulsador1; //actualiza el nuevo estado del boton
}
void pulsar2() {
pulsador2 = digitalRead(7); //lee si el botón está pulsado
if((pulsador2==LOW)&&(pulsadorAnt2==HIGH)){ //si el boton es pulsado y antes no lo estaba
estado2++;
delay(20); //pausa de 40 ms
}
pulsadorAnt2=pulsador2; //actualiza el nuevo estado del boton
}
void pulsar3() {
pulsador3 = digitalRead(8); //lee si el botón está pulsado
if((pulsador3==LOW)&&(pulsadorAnt3==HIGH)){ //si el boton es pulsado y antes no lo estaba
estado3++;
delay(20); //pausa de 40 ms
}
pulsadorAnt3=pulsador3; //actualiza el nuevo estado del boton
}
void loop()
{
pulsar1();
switch (estado1) {
case 1:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("1.AUTOMATICO");
lcd.setCursor(0, 1);
lcd.print("2.MANUAL");
case 2:
estado1=0;
break;
}
pulsar2();
switch (estado2) {
case 1:
lcd.clear();
delay(100);
lcd.setCursor(0,0);
lcd.print(">1.50/50 %");
lcd.setCursor(0, 1);
lcd.print(">2.75/25 %");
delay(20); //pausa de 40 ms
case 2:
estado2=0;
break;
}
pulsar3();
switch (estado3) {
case 1:
lcd.clear();
delay(100);
lcd.setCursor(0,0);
lcd.print("1.MARACUYA");
lcd.setCursor(0, 2);
lcd.print("2.NARANJA");
case 2:
estado3=0;
break;
}
}
Basicamente es esa mi duda,si alguien tuviese el tiempo y la amabilidad de leer el posteo y ver el codigo o el ejemplo en el tinkercad y de comentarme cual es su opinion al respecto estare muy agradecido.
EDIT:
los enlances han sidos retirados,se crearon hipervinculos en las palabras relacionadas para que se pueda apreciar…
Elegi tener una pantalla de 16x2 ya que solo cotemplaria 2 lineas las opciones y la eleccion entre 2 puntos del menu(Como se ve en el ejemplo de tinkercad…),tengo el codigo con 4 botones y pantalla de 20x4;El asunto es que tampoco permitia el despliegue de menu,lo use como puntapie inicial para darle forma al proyecto,espero haber corregido todo lo mencionado,y sabran disculpar el error…gracias!