Descrición
Utilizaremos a función while para que agarde ata que soltemos o pulsador. Será entón cando realicemos o rexistro no contador. Desta maneira evitamos que se rexistren varios pulsos cada vez que prememos.
Ademais, introduciremos un pequeno tempo de espera de 0,02s delay(20); para solucionar os problemas dun posible efecto rebote no pulsador (O pulsador emite varios pulsos cada vez que prememos nel ou cando o soltamos)
A función while(condición) { proceso } podemos escribila sen poñer ningún proceso entre parénteses, substituíndoo por un “;”: while(condición); . Iso significa que non se executa ningunha función mentres agarda a que se deixe de cumprir a condición establecida. Imos velo con dous exemplos:
Programas:
1. Contador
1. Contador: Imos facer un contador de xeito que cada vez que prememos nun pulsador suma 1. Os valores visualizámolos na consola serie.
// Declaración de variables: int pulsador=2; int conta = 0; // Variable para gardar o número de pulsos int estado; // Variable que garda o estado do pulsador // Configuración: void setup() { Serial.begin(9600); //Inicia comunicación serial } // Programa: void loop() { estado = digitalRead(pulsador); if ( estado == 1 ) { while(digitalRead(pulsador)==1); // Agarda mentres o pulsador esta premido delay(20); // Agardamos 0,02s para evitar o efecto rebote conta++; //Incrementa o contador Serial.println(conta); //Imprime o valor por consola } }
2. Contador con LED
2. Contador con LED: O programa é o mesmo que o anterior, pero engadimos un LED que indica que se realiza un pulso.
// Declaración de variables: int led=9; int pulsador=2; int conta = 0; // Variable para gardar o número de pulsos int estado; // Variable que garda o estado do pulsador // Configuración: void setup() { Serial.begin(9600); //Inicia comunicación serial pinMode (led, OUTPUT); } // Programa: void loop() { estado = digitalRead(pulsador); if ( estado == 1 ) { digitalWrite(led, HIGH); // LED aceso while(digitalRead(pulsador)==1); // Agarda mentres o pulsador esta premido delay(20); // Agarda 0,02s para evitar o efecto rebote conta++; // Incrementa o contador Serial.println(conta); // Imprime o valor por consola } else{ digitalWrite(led, LOW); // LED apagado } }
Propostas:
- Contador descendente: Fai un contador descendente, de maneira que empecemos por 10 e cada vez que prememos no pulsador se desconte un punto.
- Potencias de 2: A partir dun valor inicial 2, fai un contador que multiplique por 2 cada vez que prememos no pulsador. Utiliza o tipo de variable long (32 bits) para a variable “conta” no canto de int (16 bits) para que poida almacenar máis valores.
Extras:
- LEDs: Engade un LED vermello e un verde coas súas resistencias ao programa do contador. Cando o número de pulsos está entre 1 e 5 acéndese o LED verde. Cando é maior que 5 pulsos apágase o LED verde e acéndese o vermello.
- Contador con escintileos: Fai un contador de maneira que cando premes nun pulsador suma 1 ao contador, e ademais un LED escintila tantas veces como valor teña o contador.