//Cronometro Arduino
#include <LiquidCrystal_I2C.h> // Debe descargar la Libreria que controla el I2C
#include<Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2); // dependiendo del fabricante del LCD el codigo 0x27 puede cambiar
// por los codigos 0x3f , 0x20
float cronometro = 0;
int estado = 0;
float inicio_tiempo;
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(57600); // Inicializa el puerto serial
lcd.init(); // Inicializa el LCD
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print(".. Cronometro .."); // Mensaje a desplegar
delay(1000); // espera 1 segundos con el mensaje estatico
Serial.println(" OK");
Serial.println(" Cronometro Listo");
attachInterrupt(0,interrupcion0,FALLING); // configura Interrupcion 0 (pin2)
// LOW, CHANGE, RISING, FALLING
digitalWrite(12,1); // Secuencia de Inicio
analogWrite(6,100);
lcd.setCursor(11,1);
lcd.print(" 3... ");
delay(250);
analogWrite(6,0);
delay(250);
digitalWrite(12,0);
digitalWrite(11,1);
analogWrite(6,100);
lcd.setCursor(11,1);
lcd.print(" 32.. ");
delay(250);
analogWrite(6,0);
delay(250);
digitalWrite(11,0);
digitalWrite(10,1);
analogWrite(6,100);
lcd.setCursor(11,1);
lcd.print(" 321. ");
delay(250);
analogWrite(6,0);
delay(250);
digitalWrite(10,0);
digitalWrite(9,1);
analogWrite(6,255);
lcd.setCursor(11,1);
lcd.print(" 3210 ");
inicio_tiempo=millis(); // Iguala variable de inicio de tiempo, inicia el cronometro
delay(500);
analogWrite(6,0);
}
void loop() {
if(estado==0) {
cronometro = (millis()-inicio_tiempo)/1000; // Tiempo transcurrido
delayMicroseconds(10000); // Retardo para mostrar el tiempo en las pantallas
Serial.println(cronometro); // Muestra el tiempo transcurrido en el monitor serial
lcd.setCursor(1,1);
lcd.print(cronometro); // Muestra el tiempo transcurrido en el LCD
}
if(estado==2) { // Cuando se detiene el cronometro
analogWrite(6,255);
digitalWrite(13,1);
Serial.print(cronometro);
Serial.println(" segundos ");
lcd.setCursor(1,1);
lcd.print(cronometro);
lcd.setCursor(8,1);
lcd.print("segundos");
if(cronometro==0){ // Si el sensor estaba obstruido antes de iniciar el cronometro
Serial.println(" Falta *************** ");
lcd.setCursor(1,1);
lcd.print(cronometro);
lcd.setCursor(7,1);
lcd.print("**Falta**");
}
delay(1000);
analogWrite(6,0);
estado = 3;
}
}
void interrupcion0() // Funcion que se ejecuta durante la interrupcion del Pin2 (sensor obstaculos)
{
estado = 2;
}