Go Down

Topic: Boton arcade con led (Read 620 times) previous topic - next topic

marcnkm

Apr 22, 2018, 11:19 am Last Edit: May 11, 2018, 01:51 am by surbyte
Hola,

Estoy iniciándome en esto del Arduino, y me está costando mucho.

Quería empezar haciendo un juego de luces. Para ello dispongo de los siguientes botones:
https://shop.edwinrobotics.com/726-thickbox_default/medium-sized-flat-arcade-button-with-led-backlight.jpg

Las conexiones la realizo de la siguiente manera: (no he puesto un diagrama de fritzing porque no encuentro los elementos)
Placa: arduino mega

Entrada led al PIN 2
Salida led a GND

switch:
Common a 5V
Normal Open: al pin 42
Normal Closed: sin conexión

No utilizo ninguna resistencia por ningún lado, y creo que debería poner una antes del led? es así o me equivoco?
Creéis que tengo bien realizadas las conexiones?

Para empezar la idea es tener 1 o 2 luces conectadas al arduino, y cuando pulse el botón se encienda la luz. Y cuando lo dejo de presionar la luz se apague.

Os dejo el código que estoy usando para esta prueba con 1 luz, pero el funcionamiento no es el esperado. (el led siempre esta activo)

El código de la función debounce fue copiado de internet.

Code: [Select]

const int LED = 2;
const int inputPin = 42;
const int debounceDelay = 200;  // milliseconds to wait until stable
int ledState=0;


// debounce returns the stable switch state
boolean debounce(int pin)
{
 boolean state;
 boolean previousState;

 previousState = digitalRead(pin);          // store switch state
 for(int counter=0; counter < debounceDelay; counter++)
 {
     delay(1);                  // wait for 1 millisecond
     state = digitalRead(pin);  // read the pin
     if( state != previousState)
     {
        counter = 0; // reset the counter if the state changes
        previousState = state;  // and save the current state
     }
 }  
 return state;
}


void setup() {
  // put your setup code here, to run once:

pinMode(LED, OUTPUT);
pinMode(inputPin, INPUT);
}

void loop()
{
 if(debounce(inputPin) == true){
   //  call your function to change values here
   ledState = !ledState;
  
   digitalWrite(LED,HIGH);
 }
 else{
  digitalWrite(LED,LOW);
 }
}


Gracias por la ayuda.

Kike_GL

No nos comentar que modelo de Arduino tienes. Mega ?

El código que copiaste esta muy bien tu problema es solo de hardware.

1. Debes poner SIEMPRE un resistencia de 220 ohms en serie con el LED. Es decir anado del LED (pata mas larga) a pin 2, catodo a la resistencia 220 y la otra pata de resistencia a GND.

2. El pulsador debe tener una pata en +5V y la otra en el pin que usaras (42 es solo para Arduino Mega)

3. Debes poner una resistencia de 10K entre el pin 42 y GND.

La funcion de usuario debounce() es para evitar el "efecto rebote" que producen normalmente los contactos metalicos al juntarse.
Saludos, Kike_GL

marcnkm

#2
May 06, 2018, 12:09 pm Last Edit: May 11, 2018, 01:51 am by surbyte
Hola,
Primero de todo gracias por la ayuda.

Si utilizo un Arduino Mega, ya que el proyecto consta de 10 luces y con un Arduino UNO no tenia entradas y salidas suficientes.

Que lio, uno me dice que esta bien y el otro que esta mal el codigo. La verdad que llevo dias intentando provar la funcion pero no doy con ninguna solucion.

Ahora estaba provando con la funcion de "debounce" que tiene arduino en sus tutoriale:
https://www.arduino.cc/en/Tutorial/Debounce

Pero tampoco me acaba de funcionar. Algo tengo que hacer mal, pero no se el que.

Os explico un poco mejor qual es mi idea, para ver si la estoy haciendo bien.

La idea es tener 10 botones arcade con led como los del siguiente enlace:



Al encender el arduino el 1r boton tendra el led activo y los demas apagado. Al pulsar el 1r boton, el led se apagara y se encendera el led del siguiente boton. Y asi succesivamente.

Entiendo que hago bien al querer utilizar la funcion debounce para el rebotes, o estoy equivocado?


Moderador: Enlace e imagen editados

Go Up