Contador mellorado

contadorsenled_fluxo

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.

reboteAdemais, 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:

  1. Contador descendente: Fai un contador descendente, de maneira que empecemos por 10 e cada vez que prememos no pulsador se desconte un punto.
  2. 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:

  1. 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.
  2. 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.

Deixa un comentario