This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 1 voto(s) - 2 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Contador de créditos
#21
Si justamente tiene dos de esas una en cada pulsador en el de incremento y en el de decremento.

http://imgur.com/QbA2e5E
  Responder
#22
Y en el botón de bloqueo también? Lo que está claro es que si lo tienes con pulldown, no te debería de salir el mensaje de entrada al bucle en ningún momento, si está bien conectado y el pulsador sólo se activa al apretarlo...
  Responder
#23
Nop en ese no lo puse pero voy a ponerselo ahora mismo.
  Responder
#24
Las resistencias no están de adorno! :dale2:
  Responder
#25
Te lo dije no tengo mucha idea Facepalm ya se la puse una de 4,3k (las otras son de 4,7k no tenia mas DSonrisa pero sigue sin ir con el ultimo codigo.
  Responder
#26
El "sigue sin ir" es taaaaaaaaaan inexacto... sin datos, poco se te puede ayudar.
Mete en el bucle principal, después de la lectura del botón un println con el valor, a ver si es 1 ó 0. Así te aseguras qué está leyendo, aunque te devuelva una locura de resultados (puedes poner un delay también para ralentizarlo).
  Responder
#27
En el monitor serial ya no me sale nada (perdoname pero como te dije ... es mi primer contacto con arduino y se muy poco xD)

WeSo escribió:Mete en el bucle principal, después de la lectura del botón un println con el valor, a ver si es 1 ó 0. Así te aseguras qué está leyendo, aunque te devuelva una locura de resultados (puedes poner un delay también para ralentizarlo).

Ahi no te entendí ...
  Responder
#28
Si no te sale nada en el monitor serial, es que al menos está leyendo bien el valor inicial, o debería.
Código:
/* se declaran las contantes para identificar cada led*/
                const int r = 11;
                const int a = 2;
                const int b = 3;
                const int c = 4;
                const int d = 5;
                const int e = 6;
                const int f = 7;
                const int g = 8;
                const int BtnIncremento = 9; // boton de incremento conectadoa al pin 9
                const int BtnDecremento = 10; // boton de decremento conectadoa al pin 10
                const int BtnBloqueo = 12; // boton de bloqueo conectado al pin 12

                const int tiempoAntirebote =10;
                int cuenta =0;   //lleva la cuenta
                int estadoBtnIncremento;
                int estadoBtnIncrementoAnterior;
                int estadoBtnDecremento;
                int estadoBtnDecrementoAnterior;
                int estadoBtnBloqueo;
                int estadoBtnBloqueoAnterior;  
                boolean bloqueo = false; // De inicio está desbloqueado, también se podría hacer con el estado

                boolean antirebote  (int pin ) {
                  int  contador =0;
                  boolean estado;               // guarda el estado del boton
                  boolean estadoAnterior;      // guarda el ultimo estado del boton

                  do {
                    estado = digitalRead (pin);
                    if (estado != estadoAnterior ){   // comparamos el estado actual
                      contador =0;                    // reiniciamos el contador
                      estadoAnterior= estado;
                    }
                    else{
                      contador = contador +1;          // aumentamos el contador en 1
                    }
                    delay (1);
                  }
                  while (contador < tiempoAntirebote);
                  return estado;
                }
                /* Metodo para elegir que numero mostrar en el display*/
                void actualizarNumero(){
                  switch (cuenta) {
                  case 0:
                    /*Bloque para mostrar un 0*/
                    digitalWrite(a, HIGH);
                    digitalWrite(b, HIGH);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, HIGH);
                    digitalWrite(e, HIGH);
                    digitalWrite(f, HIGH);
                    digitalWrite(g, LOW);
                    digitalWrite(r, HIGH);
                    break;
                  case 1:
                    /*Bloque para mostrar un 1*/
                    digitalWrite(a, LOW);
                    digitalWrite(b, HIGH);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, LOW);
                    digitalWrite(e, LOW);
                    digitalWrite(f, LOW);
                    digitalWrite(g, LOW);
                    digitalWrite(r, LOW);
                    break;
                  case 2:
                    /*Bloque para mostrar un 2*/
                    digitalWrite(a, HIGH);
                    digitalWrite(b, HIGH);
                    digitalWrite(c, LOW);
                    digitalWrite(d, HIGH);
                    digitalWrite(e, HIGH);
                    digitalWrite(f, LOW);
                    digitalWrite(g, HIGH);
                    digitalWrite(r, LOW);
                    break;
                  case 3:
                    /*Bloque para mostrar un 3*/
                    digitalWrite(a, HIGH);
                    digitalWrite(b, HIGH);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, HIGH);
                    digitalWrite(e, LOW);
                    digitalWrite(f, LOW);
                    digitalWrite(g, HIGH);
                    digitalWrite(r, LOW);
                    break;
                  case 4:
                    /*Bloque para mostrar un 4*/
                    digitalWrite(a, LOW);
                    digitalWrite(b, HIGH);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, LOW);
                    digitalWrite(e, LOW);
                    digitalWrite(f, HIGH);
                    digitalWrite(g, HIGH);
                    digitalWrite(r, LOW);
                    break;
                  case 5:
                    /*Bloque para mostrar un 5*/
                    digitalWrite(a, HIGH);
                    digitalWrite(b, LOW);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, HIGH);
                    digitalWrite(e, LOW);
                    digitalWrite(f, HIGH);
                    digitalWrite(g, HIGH);
                    digitalWrite(r, LOW);
                    break;
                  case 6:
                    /*Bloque para mostrar un 6*/
                    digitalWrite(a, HIGH);
                    digitalWrite(b, LOW);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, HIGH);
                    digitalWrite(e, HIGH);
                    digitalWrite(f, HIGH);
                    digitalWrite(g, HIGH);
                    digitalWrite(r, LOW);
                    break;
                  case 7:
                    /*Bloque para mostrar un 7*/
                    digitalWrite(a, HIGH);
                    digitalWrite(b, HIGH);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, LOW);
                    digitalWrite(e, LOW);
                    digitalWrite(f, LOW);
                    digitalWrite(g, LOW);
                    digitalWrite(r, LOW);
                    break;
                  case 8:
                    /*Bloque para mostrar un 8*/
                    digitalWrite(a, HIGH);
                    digitalWrite(b, HIGH);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, HIGH);
                    digitalWrite(e, HIGH);
                    digitalWrite(f, HIGH);
                    digitalWrite(g, HIGH);
                    digitalWrite(r, LOW);
                    break;
                  case 9:
                    /*Bloque para mostrar un 9*/
                    digitalWrite(a, HIGH);
                    digitalWrite(b, HIGH);
                    digitalWrite(c, HIGH);
                    digitalWrite(d, HIGH);
                    digitalWrite(e, LOW);
                    digitalWrite(f, HIGH);
                    digitalWrite(g, HIGH);
                    digitalWrite(r, LOW);

                  }
                }

                void setup(){
                  /*Declaramos los segmetos del display como salidas*/
                  pinMode(a, OUTPUT);
                  pinMode(b, OUTPUT);
                  pinMode(c, OUTPUT);
                  pinMode(d, OUTPUT);
                  pinMode(e, OUTPUT);
                  pinMode(f, OUTPUT);
                  pinMode(g, OUTPUT);
                  pinMode(r, OUTPUT);
                  /*Declaramos los botones como entradas*/
                  pinMode(BtnIncremento, INPUT);
                  pinMode(BtnDecremento, INPUT);
                  pinMode(BtnBloqueo, INPUT);
                  Serial.begin(9600);
                }

                void loop() {
                  estadoBtnBloqueo = digitalRead(BtnBloqueo);
                  Serial.println(estadoBtnBloqueo);
                  delay(1000);
                  if (estadoBtnBloqueo  != estadoBtnBloqueoAnterior) {     // si hay cambio con respeto al estado
                    if (antirebote (BtnBloqueo) == HIGH){         //checamos  si esta preionado y si lo esta
                      bloqueo = !bloqueo;
                      Serial.println("Entra en bloqueo");
                    }
                  }
                  estadoBtnBloqueoAnterior = estadoBtnBloqueo;              // guardamos el estado del boton

                  estadoBtnIncremento = digitalRead(BtnIncremento);
                  if (estadoBtnIncremento  != estadoBtnIncrementoAnterior) {     // si hay cambio con respeto al estado
                    if (antirebote (BtnIncremento)){         //checamos  si esta preionado y si lo esta
                      cuenta = cuenta + 4;                                       //aumentamos la cuenta
                      if (cuenta > 9){                
                        cuenta = 9;
                      }
                    }
                  }
                  estadoBtnIncrementoAnterior = estadoBtnIncremento;              // guardamos el estado del boton

                  if (!bloqueo) { // Si está bloqueado, lo ignoramos, y en otro caso, lo leemos
                      estadoBtnDecremento = digitalRead(BtnDecremento);      //leemos el estado del boton
                      if (estadoBtnDecremento  != estadoBtnDecrementoAnterior) {     // si hay cambio con respeto al estado anterior
                        if (antirebote (BtnDecremento)){   //si el boton esta presionado disminuimos la cuenta
                          cuenta--;                            
                          if (cuenta<0){

                            cuenta = 0;
                          }
                        }
                      }
                      estadoBtnDecrementoAnterior = estadoBtnDecremento;  //guardamos el estado del boton
                  }

                  actualizarNumero();   //desplegamos la cuenta en el display
                }

Ahora con éste código te debería imprimir cada segundo un valor, 0 en caso de no estar apretado, y si lo mantienes apretado, debería en algún momento mostrarte un 1.

Echa un ojo a los códigos que te pongo e intenta comprender los cambios. Una de las cosas más complicadas en programación (y más de un hard) es la depuración.

También asegúrate que el pin 12 de la placa (modelo) que uses permite lectura digital.
  Responder
#29
El Arduino es un Uno el pin 12 es Digital según pone en la placa.
Ahora aparecen los 0 pero cuando le doy a los pulsadores o mantengo pulsado no sale ningún 1
http://prntscr.com/629s3m

Ahora tiene bastante delay XD se nota
  Responder
#30
Haz lo mismo con alguno de los otros pulsadores, para comprobar que realmente cuando pulsas te devuelve un 1 por consola. Mírate el código que te he puesto en el post anterior, es muy simple de añadir (es una línea).

Si al apretar el pulsador directamente no te da un 1, es que algo va mal ahí, porque vamos, simplemente se está haciendo una lectura del pin 12, y dices que no te devuelve un 1... :?

Prueba a cambiar de pin, intercambiarlo con uno de otro botón, por ejemplo el de crédito, y ver si así realmente te devuelve un 1 cuando pulsas. No sé, son mil cosas que se pueden cacharrear y probar :nuse:
  Responder
#31
Añadí el código en los otros pulsadores y cuando le doy me devuelve un 1 pero cuando pulso el de bloqueo sigue sin pasar nada ... le cambié de pin lo puse en el 13 pero sigue sin ir, esta en false es decir tendria que estar desbloqueado desde un principio le doy al pulsador y nada sigue cambiando, lo pongo en true para que desde el inicio este bloqueado y lo mismo y otra cosa ... cuando pulso el de incremento o el de decremento no responde al instante no se si me explico bien ... le tengo que dar unas cuantas veces para que baje un numero o aumente.
  Responder
#32
Aunque lo pongas a true va a hacer lo mismo porque antes de hacer el if, te hace el digitalRead, el cual te da siempre 0.

Si el resto de pulsadores funciona y ese no, pues una de dos: o el pin está mal (difícil) o el pulsador está mal. Prueba a cambiar un pulsador por otro (simplemente en el código cambias el número de pin por ejemplo del de crédito por el de bloqueo), y mira si a ver así funciona el sistema de bloqueo del pulsador de decrementar.
  Responder
#33
Ahora parece que funciona (maldito pulsador XD) pero para subir, bloquear o disminuir tengo que darle bastantes veces al pulsador como quito eso?
  Responder
#34
Quita el delay(1000) que pusimos por ahí. El antirrebote apenas son 10ms, que no deberían afectar.
  Responder
#35
Listo por ahora todo funciona bien Gran sonrisa muchisimas gracias WeSo! me salvastes la vida (de verdad me ahorré comprar un monedero x.x)
  Responder
#36
De nada, espero que hayas aprendido Lengua
  Responder
#37
A la fuerza tengo que hacerlo XD otra cosa mas ... como "divido" ese pulsador de bloqueo? es decir para que uno bloquee y el otro desbloquee. Podria haberme dicho mi "jefe" desde un principio que tenia que ir con dos pulsadores ... Facepalm
  Responder
#38
Muy sencillo: cuando detectas la pulsación de uno, en lugar de ser "bloqueo = !bloqueo", directamente uno hace "bloqueo = false" y otro "bloqueo = true".
  Responder
#39
Voy a probar y te digo

Seria una cosa asi no?

Código:
estadoBtnBloqueo = digitalRead(BtnBloqueo);
                      Serial.println(estadoBtnBloqueo);
                  
                      if (estadoBtnBloqueo  != estadoBtnBloqueoAnterior) {     // si hay cambio con respeto al estado
                        if (antirebote (BtnBloqueo) == HIGH){         //checamos  si esta preionado y si lo esta
                          bloqueo = true;
                          Serial.println("Entra en bloqueo");
                        }
                        {
                          estadoBtnBloqueo = digitalRead(BtnBloqueo);
                      Serial.println(estadoBtnBloqueo);
                  
                      if (estadoBtnBloqueo  != estadoBtnBloqueoAnterior) {     // si hay cambio con respeto al estado
                        if (antirebote (BtnDesbloqueo) == HIGH){         //checamos  si esta preionado y si lo esta
                          bloqueo = false;
                          Serial.println("Entra en desbloque");
                        }

Le puse el pin que me quedaba en 12 XD y le cambié el nombre.
  Responder
#40
Te falta declarar "estadoBtnDesbloqueo" y "estadoBtnDesbloqueoAnterior" y sustituirlas, si no, sólo entrará cuando pulses el de bloqueo.
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  LM35 y Contador binario Mentus 3 2,333 11-04-2015, 10:03 PM
Último mensaje: paredesivan4
  contador bolas airsoft harian33 15 4,611 24-06-2014, 08:00 PM
Último mensaje: harian33