/*
---------------------------------------------
Contador de pulsos
---------------------------------------------
Programa que muestra por pantalla (consola serial) el número
de veces que el pulsador ha sido presionado, se realiza un
proceso que de acuerdo al número de pulsaciones se enciende
un LED,
*/
//--------------------------------------------------
//Declara puertos de entradas y salidas y variables
//--------------------------------------------------
int conta = 0; //Variable para guardar el conteo de los pulsos
//------------------------------------
//Funcion principal
//------------------------------------
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
Serial.begin(9600); //Inicia comunicación serial
pinMode(2,INPUT);//Configura el pin 2 como una entrada, pulsador
pinMode(13,OUTPUT); //Configura el pin 13 como una salida, LED
}
//------------------------------------
//Funcion ciclicla
//------------------------------------
void loop() // Esta funcion se mantiene ejecutando
{ // cuando este energizado el Arduino
// Si el pulsador esta oprimido
if ( digitalRead(2) == HIGH )
{
delay(50); // Para impedir que se produzcan dos pulsos
// Si el pulsador no esta oprimido, flanco de bajada
if ( digitalRead(2) == LOW )
{
conta++; //Incrementa el contador
Serial.println(conta); //Imprime el valor por consola
delay (100); // Retardo
}
}
// Si el valor del contador es 5
if (conta==5)
{
digitalWrite(13,HIGH); //Enciende el LED
}
// Si el valor del contador es 8
if (conta==8)
{
digitalWrite(13,LOW); // Apaga el LED
}
if (conta>=8)
{
conta=0;
}
}
//Fin programa
/*
int contador = 0;
bool dato = LOW;
bool datoAnterior = LOW;
void setup() {
pinMode(6,INPUT);
}
void loop() {
dato = digitalRead(6);
if (dato == HIGH && datoAnterior == LOW)
{
contador++;
}
datoAnterior = dato;
}
Lo que hago es mirar cada vez el valor. En el momento en que cambia a uno y el anterior era un cero sumo al contador. Claro, cuando se dé el flanco de bajada no lo detectará y solamente contaré los flancos de subida tal y como quería. Este código acepta modificaciones, pudiendo contar los flancos de bajada:
int contador = 0;
bool dato = LOW;
bool datoAnterior = LOW;
void setup() {
pinMode(6,INPUT);
}
void loop() {
dato = digitalRead(6);
if (dato == LOW && datoAnterior == HIGH)
{
contador++;
}
datoAnterior = dato;
}
O simplemente contar un cambio, lo que viene siendo tanto flancos de subida como de bajada:
int contador = 0;
bool dato = LOW;
bool datoAnterior = LOW;
void setup() {
pinMode(6,INPUT);
}
void loop() {
dato = digitalRead(6);
if (dato != datoAnterior)
{
contador++;
}
datoAnterior = dato;
}
*/