jueves, 5 de febrero de 2015

Arduino Tutorial 19: Contar hasta 10

Vamos a realizar un sencillo juego que consiste en contar mentalmente 10 segundos. Para ello solo vamos a necesitar una resistencia de 15K, un pulsador y un arduino.

El esquema ha realizar es el siguiente:


Antes de empezar el juego, hay que abrir el Monitor Serial. Después hay que pulsar el pulsador y empezar a contar mentalmente 10 segundos. Cuando conteis 10 segundos, hay que volver a pulsar el pulsador. En el Monitor Serial aparecerá si hemos contado menos, más o 10 segundos exactos.

El código ha insertar es el siguiente:


const int botonPin = 2;     // PIN para el botón

const int ledPin =  13;      // PIN para el LED

static int tiempo; // variable que recoge tiempo. Se define como static para poder utilizarla fuera de bucles

int estadoBoton = 0;         // Estado del botón

void setup() {

 Serial.begin(9600); // Conecta con el Serial Monitor

 Serial.println("Pulsa el boton, cuenta mentalmente 10 segundos y clica de nuevo!"); // Frase de inicio del juego

 pinMode(ledPin, OUTPUT);  // indica que el LED es salida     

 pinMode(botonPin, INPUT); // indica que el botón es entrada

}

void loop(){

 estadoBoton = digitalRead(botonPin); // lee el estado del botón

 if (estadoBoton == HIGH) {    // si el botón es apretado

   digitalWrite(ledPin, HIGH); // el LED se enciende

   Serial.println("CONTANDO!"); // se indica que comienza la cuenta
  
   for (tiempo=0;tiempo<10000;tiempo=tiempo+100) { // bucle contador en décimas de segundo
  
   int segundoClick = digitalRead(botonPin); // se define segundoClick

    if (segundoClick==1 && tiempo>1000) { // si hay segundoClick

     Serial.print("NO TE HAS PASADO DE 10, SOLO "); // si pulsa el botón antes de llegar a 10 segundos...

     break; // se rompe el bucle

     };

    delay(100);

   };
  
   Serial.print("PASARON "); // ultimas frases indicando segundos contados

   Serial.print(tiempo/1000);

   Serial.println(" SEGUNDOS");

   Serial.println("--------------------");

   delay(1000);

   digitalWrite(ledPin, LOW); // se apaga el LED

   estadoBoton = LOW; // se reinicia el estado del botón a 0
  
   }
    
}