You are on page 1of 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
int
int
int
int
int
int
int
int
int

buttonPin1 =
buttonPin2 =
ledPin = 13;
buttonState1
buttonState2
clock = 100;
hour = 0;
min = 0;
sec = 0;
dcsec = 0;

10; //pin para el boton 1


9; //pin para el boton 2
//Pin ra el led
= 0; //Variable para leer boton1
= 0; //Variable para leer boton2
//retardo del reloj
//horas
//minutos
//segundos
//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) {
dcsec = dcsec + 1;
if (dcsec > 9) {
dcsec = 0;
sec = sec + 1;
}

//Comrprueba el estado del cronometro (Marcha o paro)


//Suma una decisima de segundo
//Contador de decimas a segundos a minutos y a horas

if (sec > 59) {


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

time2 = millis();
time2=time2 - time1;
if (time2 >=90 ){
time2=50;
}
clock=90-time2;
delay(clock);
printtime();

//comprueba el tiempo al final del loop


//calcula la diferencia

//hace la rectificacion con delay

//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

You might also like