Hola soy nuevo en esto de arduino, y comenzado con un control de tiempos para slot (scalextric), el sketch lo he sacado de un hilo del foro bastante antiguo, y el circuito lo he montado desde el sketch y fijándome en tutoriales y demás.-
El problema lo tengo en como me muestran los tiempos la lcd 16,2, me gustaría que mostraras minutos:segundos´decimas y centésimas (m:s,000) os ajunto el sketch, y el esquema del protoboard, gracias por adelantado.-
/*
Cuentavueltas y crono
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Nvueltas = 1; //Numero de vueltas
int control = 10; //Pin de control (Boton A)
int control2 = 5; //Pin ANALOGICO de control 2 (Boton B)
int rojo1 = 6; //Pin led rojo 1
int rojo2 = 7; //Pin led rojo 2
int rojo3 = 8; //Pin led rojo 3
int verde = 9; //Pin led verde
int intervalo = 1000; //Intervalo de la secuencia
int paso = 13; //Pin de paso de vuelta
int vuelta = 0; //Contador de vueltas
unsigned long tiempoF = 0; // Tiempo de fin de vuelta
unsigned long tiempoS = 0; //Tiempo de salida de vuelta
unsigned long tiempoV = 0; //Tiempo de vuelta
unsigned long tiempoR = 99999; //Vuelta rapida
void setup() {
pinMode(rojo1, OUTPUT);
pinMode(rojo2, OUTPUT);
pinMode(rojo3, OUTPUT);
pinMode(verde, OUTPUT);
pinMode (paso, INPUT);
pinMode (control, INPUT);
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);
lcd.print("Vuelta:");
lcd.setCursor(0, 1);
lcd.print("Tiempo:");
}
void semaforo()
{
digitalWrite(rojo1, HIGH); //Encendido secuencial de los rojos
delay(intervalo);
digitalWrite(rojo2, HIGH);
delay(intervalo);
digitalWrite(rojo3, HIGH);
delay(intervalo);
digitalWrite(rojo1, LOW); //Apaga los leds rojos
digitalWrite(rojo2, LOW);
digitalWrite(rojo3, LOW);
digitalWrite(verde, HIGH); // Enciende el verde
delay(intervalo*2);
digitalWrite(verde, LOW); //Apaga verde
tiempoS = millis();
}
void pasoDEvuelta(){
vuelta = vuelta + 1; //Conteo de vuelta
tiempoF = millis(); //Calculo de tiempo de vuelta
tiempoV = tiempoF - tiempoS;
tiempoS = tiempoF; //Pone el tiempo de salida nuevo
if (tiempoR > tiempoV) {
tiempoR = tiempoV;
}
delay(250); //Espera para para no contar varias veces por paso
}
void pantalla(){
//Mostrar el numero de vuelta y tiempo
lcd.clear();
lcd.print("Vuelta:");
lcd.setCursor(0, 1);
lcd.print("Tiempo:");
lcd.setCursor(10, 0); //Situar el cursor
lcd.print(vuelta);
lcd.setCursor(10, 1); //Situar el cursor
lcd.print(" ");
lcd.setCursor(10, 1); //Situar el cursor
lcd.print(tiempoV/1000);
}
void fin() {
//Muestra vuelta rapida
lcd.clear();
lcd.print("Vuelta rapida:");
lcd.setCursor(0, 1);
lcd.print(tiempoR / 1000);
delay(5000);
Nvueltas = 1;
}
void numeroDEvueltas() {
lcd.clear();
lcd.print("Cuantas vueltas?");
lcd.setCursor(0, 1);
lcd.print(Nvueltas);
//Definir el numero de vueltas de carrera
while(analogRead(control2) < 256) {
if (digitalRead(control) == HIGH ) {
++Nvueltas;
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(Nvueltas);
delay(250);
}
}
lcd.clear();
lcd.print("Preparados?");
lcd.setCursor(0,1);
lcd.print("A");
while(digitalRead(control) == 0) {
delay(5);
}
delay(5);
}
void loop() {
lcd.clear();
lcd.print(" BUENA");
lcd.setCursor(0, 1);
lcd.print(" CARRERA!");
delay(3000);
numeroDEvueltas();
semaforo();
vuelta = 0;
//Cuenteo de vueltas y tiempos
while(vuelta < Nvueltas){
if (digitalRead(paso) == HIGH ) {
pasoDEvuelta();
pantalla();
}
}
}