cronometro con lcd

4
/* Cronometro con LCD. Proyecto de cronometro con arduino. Usando la funcion millis(); que nos indica tiempo de funcionamiento del chip conseguimos rectificar el retardo de ejcucion del programa. El circutio: * LCD serial contectado a Tx del Arduino * 2 botones con divisor de 10K a los pines 9 y 10 * LED en pin 7 (opcional para indicar la pulsacion de los botones Creado en 2009 por LSDios http:// */ /* Definicion de Variables */ long time1=0; //Variable de tiempo para el inicio. long time2=0; //Variable de tiempo para el final. int buttonPin1 = 10; //pin para el boton 1 int buttonPin2 = 9; //pin para el boton 2 int ledPin = 13; //Pin àra el led int buttonState1 = 0; //Variable para leer boton1 int buttonState2 = 0; //Variable para leer boton2 int clock = 100; //retardo del reloj int hour = 0; //horas int min = 0; //minutos int sec = 0; //segundos int dcsec = 0; //decimas de segundo boolean run = true; //estado del cronometro void setup() { clearLCD(); //Borra el LCD pinMode(ledPin, OUTPUT); //Inicia el pin de LED como salida Serial.begin(9600); //Configura la velocida del puerto serie } void loop() { time1 = millis(); //comprueba el tiempo al inicio del loop buttonState1 = digitalRead(buttonPin1); //Lees estado boton1 buttonState2 = digitalRead(buttonPin2); //Lees estado boton2 if (buttonState1 == HIGH) { //Si el boton1 esta pulsado digitalWrite(ledPin, HIGH); //Enciende el led

Upload: andrea-trigo-flores

Post on 17-Dec-2015

23 views

Category:

Documents


0 download

TRANSCRIPT

/*Cronometro con LCD.

Proyecto de cronometro con arduino. Usando la funcion millis(); que nosindica tiempo de funcionamiento del chip conseguimos rectificar el retardode ejcucion del programa.

El circutio:

* LCD serial contectado a Tx del Arduino* 2 botones con divisor de 10K a los pines 9 y 10* LED en pin 7 (opcional para indicar la pulsacion de los botones

Creado en 2009por LSDios

http://

*/

/* Definicion de Variables*/long time1=0; //Variable de tiempo para el inicio.long time2=0; //Variable de tiempo para el final.

int buttonPin1 = 10; //pin para el boton 1int buttonPin2 = 9; //pin para el boton 2int ledPin = 13; //Pin ra el ledint buttonState1 = 0; //Variable para leer boton1int buttonState2 = 0; //Variable para leer boton2int clock = 100; //retardo del relojint hour = 0; //horasint min = 0; //minutosint sec = 0; //segundosint dcsec = 0; //decimas de segundo

boolean run = true; //estado del cronometro

void setup() { clearLCD(); //Borra el LCD pinMode(ledPin, OUTPUT); //Inicia el pin de LED como salida Serial.begin(9600); //Configura la velocida del puerto serie

}

void loop() { time1 = millis(); //comprueba el tiempo al inicio del loop buttonState1 = digitalRead(buttonPin1); //Lees estado boton1 buttonState2 = digitalRead(buttonPin2); //Lees estado boton2 if (buttonState1 == HIGH) { //Si el boton1 esta pulsado digitalWrite(ledPin, HIGH); //Enciende el led hour = 0; //Pone el contador a cero min = 0; sec = 0; dcsec = 0; run=false; //Para el cronometro delay(500); //pausa printtime(); selectLineTwo(); Serial.print("Parado"); digitalWrite(ledPin, LOW); //apaga el led } if (buttonState2 == HIGH) { //Si el boton1 esta pulsado digitalWrite(ledPin, HIGH); //Enciende el led if (run == true) { //Comprueba si el cronometro esta en marcha run=false; //Para el cronometro selectLineTwo(); Serial.print("Parado"); } else { //si esta parado run=true; //lo pone en marcha } delay(500); //pausa digitalWrite(ledPin, LOW); //apaga el led }if (run == true) { //Comrprueba el estado del cronometro (Marcha o paro) dcsec = dcsec + 1; //Suma una decisima de segundo

if (dcsec > 9) { //Contador de decimas a segundos a minutos y a horas dcsec = 0; sec = sec + 1; }

if (sec > 59) { sec = 0; min = min + 1; }

if (min > 59) { min = 0; hour = hour + 1; }

if (hour > 23) { hour = 0; }

time2 = millis(); //comprueba el tiempo al final del loop time2=time2 - time1; //calcula la diferencia if (time2 >=90 ){ time2=50; } clock=90-time2; //hace la rectificacion con delay delay(clock); printtime(); //Imrpime el tiempo en el LCD

}

else {}

}

/*

Definicion de funciones de control LCD

printtime();Escribe el tiempo

selectLineOne();Escribir en la 1 linea

selectLineTwo();Escribir en la 1 linea

clearLCD();Borrar el LCD

*/void printtime(){clearLCD(); Serial.print(hour); Serial.print(":"); Serial.print(min); Serial.print(":"); Serial.print(sec); Serial.print("."); Serial.print(dcsec); time2 = millis(); time2=time2 - time1; Serial.print(" "); Serial.print(time2);

}

void selectLineOne(){ //Seleccionar 1 linea Serial.print(0xFE, BYTE); //commando control Serial.print(128, BYTE); //posicion para la linea 1}

void selectLineTwo(){ //Seleccionar 2 linea Serial.print(0xFE, BYTE); //commando control Serial.print(192, BYTE); //posicion}

void clearLCD(){ //Borrar LCD Serial.print(0xFE, BYTE); Serial.print(0x01, BYTE); //comando de borrado}