Skip to main content

Contar el número de pulsaciones – Ejemplo con Arduino Nº 12

Para hacer un contador con Arduino para contar el número de pulsaciones, debemos contar las veces que se acciona un pulsador, recuerda que cuando decimos pulsador, puede ser un final de carrera o cualquier otro detector de dos estados, en definitiva, contaremos las veces que cambia de estado el pulsador, esto se denomina detección de cambio de estado o detector de flanco.

HARDWARE NECESARIO:

Para realizar este circuito necesitarás:

  • Tarjeta Arduino o Genuino
  • Pulsador
  • Resistencia de 10K
  • Protoboard
  • Cables de conexión

CIRCUITO:

Para montar este ejemplo utilizarás cualquiera de los circuitos que ya has utilizado antes, para trabajar con entradas digitales.

Para ello conectarás uno de los extremos de la resistencia a masa y el otro extremo a una de las patillas del pulsador, la otra patilla del pulsador la conectarás a +Vcc, y por último el nudo que hay entre los dos componentes lo conectarás a la entrada digital número 2.

CÓDIGO:

En este programa la placa Arduino está constantemente leyendo el estado del pulsador, y si este ha cambiado respecto al estado anterior, y el estado es alto, incrementa en uno el contador. Además de ello si el número contado es múltiplo de 3 enciende un led, de lo contrario lo apaga.

El programa definitivo queda así:

const int Pulsador=2;

const int Led=13;

int ContadorDePulsaciones=0;

int EstadoDelPulsador=0;

int AnteriorEstadoDelPulsador=0;

void setup()

{

                pinMode(Pulsador,INPUT);

                pinMode(Led,OUTPUT);

                Serial.begin(9600);

}

void loop()

{

EstadoDelPulsador=digitalRead(Pulsador);

If(EstadoDelPulsador ¡=AnteriorEstadoDelPulsador)

{

                If(EstadoDelPulsador==HIGH)

{

ContadorDePulsaciones++;

Serial.println(“Pulsador pulsado”);

Serial.print(“El número de veces que has accionado el pulsador es: “

Serial.println(ContadorDePulsaciones);

}

else

{

                Serial.println(“Pulsador sin pulsar”);

}

AnteriorEstadoDelPulsador=EstadoDelPulsador;

If(ContadorDePulsaciones % 3 == 0)

{

                digitalWrite(Led, HIGH);

}

else

{

                digitalWrite(Led,LOW);

}

}

}

 

Resistencia INPUT_PULLUP – Ejemplo con Arduino Nº 11

En este ejemplo te enseñaré el uso de la resistencia INPUT_PULLUP con pinMode(). También monitorizaremos el estado del pulsador mediante el puerto serie que comunica la placa Arduino al PC mediante el cable USB (Universal Serial Bus).

HARDWARE NECESARIO:

Para realizar este circuito necesitarás:

  • Tarjeta Arduino o Genuino
  • Pulsador
  • Protoboard
  • Cables de conexión

CIRCUITO:

En este circuito simplemente te quiero enseñar el concepto de la resistencia INPUT_PULLUP, que es una resistencia interna que tiene el arduino para evitar sobreintensidades. Así que en este circuito utilizaremos solamente un pulsador conectado a masa y al pin 2 de la placa de Arduino, así pues, cuando acciones el pulsador la entrada leerá LOW, pues estarás conectándolo a masa, y cuando no presiones el pulsador estará leyendo HIGH.

CÓDIGO:

En este programa la placa Arduino está constantemente leyendo el estado del pulsador, a través de la función digitalRead(), y hará una comparación sencilla, si la lectura del pulsador es HIGH, apagará el Led del pin número 13, y si la lectura del pulsador es LOW, encenderá el citado pin, además de todo ello, mostrarás la lectura del pulsador en el monitor del puerto serie con la instrucción Serial.println().

 

El programa definitivo queda así:

// Resistencia interna INPUT_PULLUP – www.aprobarfacil.com

void setup()

{

                Serial.begin(9600);

                pinMode(2, INPUT_PULLUP);

                pinMode(13, OUTPUT);

}

void loop()

{

int LecturaPulsador=digitalRead(2);

Serial.println(LecturaPulsador);

If(LecturaPulsador==HIGH)

{

digitalWrite(13,LOW);

}

else

{

                digitalWrite(13,HIGH);

}

}

Evitar rebotes de los pulsadores – Ejemplo con Arduino Nº 10

En algunos casos es necesario evitar rebotes de los pulsadores, como por ejemplo en el caso de contadores, los rebotes se generan por problemas mecánicos o físicos, estos rebotes es posible que la placa de Arduino los lea como múltiples pulsaciones en un corto periodo de tiempo, consiguiendo así engañar al programa.

En este ejemplo te muestro como conseguir evitar el efecto de los rebotes mediante software, para ello comprobaremos varias veces el estado de la entrada en un muy corto periodo de tiempo, para asegurar que el botón ha sido presionado, para ello utilizaremos de nuevo la función millis() y un periodo de tiempo en el que no se contarán los rebotes del pulsador.

En este ejemplo, cada vez que le des al pulsador cambiará el estado del Led, si está encendido se apagará y si está apagado se encenderá.

CIRCUITO:

Para este circuito utilizaremos de nuevo el circuito utilizado en el ejemplo de entradas digitales.

CÓDIGO:

const int Boton=2;

const int Led=13;

int EstadoDelLed=HIGH;

int EstadoDelBoton;

int EstadoAnteriorDelLed=LOW;

unsigned long TiempoDeLaUltimaPulsacion=0;

unsigned long MargenDePulsacion=50;

void setup()

{

                pinMode(Boton, INPUT);

                pinMode(Led, OUTPUT);

                digitalWrite(Led, EstadoDelLed);

}

void loop()

{

                int Lectura=digitalRead(Boton);

                if (Lectura !=EstadoAnteriorDelLed)

                {

                TiempoDeLaUltimaPulsacion=millis();

}

                If((millis() – TiempoDeLaUltimaPulsacion) > MargenDePulsacion)

                {

                if(Lectura != EstadoDelBoton)

                {

                EstadoDelBoton=Lectura;

                If(EstadoDelBoton=HIGH)

                {

                                EstadoDelLed= ¡EstadoDelLed;

}

}

}

}

Evitar rebotes de los pulsadores – Ejemplo con Arduino Nº 09

En algunos casos es necesario evitar rebotes de los pulsadores, como por ejemplo en el caso de contadores, los rebotes se generan por problemas mecánicos o físicos, estos rebotes es posible que la placa de Arduino los lea como múltiples pulsaciones en un corto periodo de tiempo, consiguiendo así engañar al programa y c0ntar tres o cuatro pulsaciones en vez de una.

En este ejemplo te muestro como conseguir evitar el efecto de los rebotes mediante software, para ello comprobaremos varias veces el estado de la entrada en un muy corto periodo de tiempo, para asegurar que el botón ha sido presionado, para ello utilizaremos de nuevo la función millis() y un periodo de tiempo en el que no se contarán los rebotes del pulsador.

En este ejemplo, cada vez que le des al pulsador cambiará el estado del Led, si está encendido se apagará y si está apagado se encenderá.

CIRCUITO:

Para este circuito utilizaremos de nuevo el circuito utilizado en el ejemplo de entradas digitales.

CÓDIGO:

const int Boton=2;

const int Led=13;

int EstadoDelLed=HIGH;

int EstadoDelBoton;

int EstadoAnteriorDelLed=LOW;

unsigned long TiempoDeLaUltimaPulsacion=0;

unsigned long MargenDePulsacion=50;

void setup()

{

                pinMode(Boton, INPUT);

                pinMode(Led, OUTPUT);

                digitalWrite(Led, EstadoDelLed);

}

void loop()

{

int Lectura=digitalRead(Boton);

if (Lectura !=EstadoAnteriorDelLed)

{

TiempoDeLaUltimaPulsacion=millis();

}

                If((millis() – TiempoDeLaUltimaPulsacion) > MargenDePulsacion)

{

if(Lectura != EstadoDelBoton)

                {

                EstadoDelBoton=Lectura;

                If(EstadoDelBoton=HIGH)

                {

                                EstadoDelLed= ¡EstadoDelLed;

}

}

}

}

Parpadeo sin utilizar delay – Ejemplo con Arduino Nº 07

Para utilizar las funciones de tipo parpadeo sin utilizar delay, porque a veces necesitas hacer dos cosas a la vez con Arduino, por ejemplo, en el ejemplo del parpadeo, mientras utilizas la función delay(), el procesador está inactivo y no puede responder a los posibles cambios en las entradas, es decir, que si quiere hacer por ejemplo un semáforo interactivo, en el que exista un pulsador de peatones, es imposible hacerlo utilizando la función delay().

En el siguiente ejemplo te mostraré como hacer una secuencia de LEDs y además leer el valor de una entrada. Para ello utilizaremos una función propia del IDE de Arduino llamada millis(), que es una función propia del IDE que nos devuelve un valor que expresa el tiempo que ha pasado desde que se inició el programa, en milisegundos.

El concepto que existe detrás de este algoritmo es ir comprobando si el botón se ha pulsado continuamente, dentro de la función loop(), cada vez que apaguemos o encendamos el LED, anotaremos el momento en el que ha sucedido, y si el tiempo que ha pasado desde que se inició el programa menos el último cambio supera el valor del tiempo de cambio de estado, cambiaremos de nuevo el estado del LED.

En este programa te enseñaré como hacerlo.

CIRCUITO:

Para hacer este circuito utilizaremos cualquier montaje de un LED con una resistencia.

CÓDIGO:

const int Led = LED_BUILTIN;

int EstadoDelLed=LOW;

unsigned long TiempoUltimoCambio=0;

const long Intervalo = 1000;

void setup()

{

pinMode(Led, OUTPUT);

}

void loop()

{

unsigned long TiempoAhora = millis();

if (TiempoAhora – TiempoUltimoCambio >= Intervalo)

{

TiempoUltimoCambio = TiempoAhora;

If ( EstadoLed = LOW)

{

EstadoLed=HIGH;

}

Else

{

EstadoLed=LOW;

}

digitalWrite(Led, EstadoLed);

}

}