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:

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:
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

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???