Restador a infinito
buenas, estoy empezando con el arduino por un proyecto de la universidad y tengo un problema. básicamente el proyecto consiste en un separador de monedas de 50 cents, 1 y 2 euros. las monedas se separan, y se cuenta cuando cae cada una mediante un led y una fotorresistencia. cuando queremos expulsar una moneda pulsamos uno de los tres pulsadores.
la parte de contar el numero de monedas que caen la hace perfectamente, pero luego cuando mantengo el pulsador para que expulse una moneda el contador empieza restar como un loco. ¿podría alguien ayudarme que aunque mantenga pulsado el pulsador solo me descuente una moneda?
aquí adjunto la parte del programa:
la parte de contar el numero de monedas que caen la hace perfectamente, pero luego cuando mantengo el pulsador para que expulse una moneda el contador empieza restar como un loco. ¿podría alguien ayudarme que aunque mantenga pulsado el pulsador solo me descuente una moneda?
aquí adjunto la parte del programa:
code: [select]
if(analogread(led1) >= 600){ //detecta el paso de una moneda de 1 euro y la suma
count3=count3+1;
serial.println("monedas de 1 euro: ");
serial.println(count3);
delay(500);
}
while(digitalread(pulsador1) == low){ //debería de restar una moneda cuando pulse el pulsador
count3=count3-1;
serial.println("monedas de 1 euro: ");
serial.println(count3);
}
hola! tu problema es porque estas usando una sentencia que dice que mientras el boton este pulsado se reste un entero la variable count3, recuerda que el bucle se ejecuta muchísimas veces por segundo, es por eso que te hace miles de restas cuando presionas el pulsador eso ademas de los rebotes del pulsador. quita el "while" y reeemplazalo por un "if" prueba esto:
cuando tengas una consulta es mejor poner el código completo para localizar mas fácil los errores, ah y recuerda usar etiquetas, lee las normas del foro (no tarda en decírtelo surbyte )
salu2
code: [select]
boolean estado_pulsador1=true; //tienes que agregar estas 2 variables
boolean estado_ant_pul=true; // en estas se guarda el estado del pulsador
//void loop
if(analogread(led1) >= 600){ //detecta el paso de una moneda de 1 euro y la suma
count3=count3+1;
serial.println("monedas de 1 euro: ");
serial.println(count3);
delay(500);
}
//aqui esta lo que cambie de tu codigo
estado_pulsador1=digitalread(pulsador1);
if (estado_pulsador1 != estado_ant_pul){ //se presiono el boton
if (estado_pulsador1==false){ //supongo que estas usando el boton en pull-up
count3--; //esto es lo mismo que count3=count3-1;
serial.println("monedas de 1 euro: ");
serial.println(count3);
}
estado_ant_pul=estado_pulsador1;
if (count3 < 0) //esto es para evitar que te de numeros negativos
count3=0;
delay(100);
}
cuando tengas una consulta es mejor poner el código completo para localizar mas fácil los errores, ah y recuerda usar etiquetas, lee las normas del foro (no tarda en decírtelo surbyte )
salu2
Arduino Forum > International > Español (Moderators: surbyte, Hector_A) > Restador a infinito
arduino
Comments
Post a Comment