Buenas, soy nuevo en este foro y me gustaría preguntaros acerca un par de dudas que me surgen en un nuevo proyecto en el que me he embarcado.
Compré una placa de Arduino UNO hace un año o así pero no me habías puesto con ella hasta ahora. Llevo un par de días dándole duro al tema pero me he estancado con algunos fallos.
Aviso de que apenas tengo idea de Arduino, por si acaso alguna parte de mi código es un insulto jajaja me disculpo.
Quiero hacer un cronómetro y cuentavueltas de slot pero únicamente para uso casero, por lo que quiero que sea rápido, sencillo y autónomo. Mi idea es que se encienda un semáforo, después inicie el cronómetro y detecte el paso de cada vuelta, mostrando en una pantalla LCD tanto el tiempo como la vuelta, registrando el tiempo de cada vuelta y el tiempo final en completar 10 vueltas, (en casa siempre solemos jugar a 10 vueltas).
Como no tengo apenas idea de Arduino, he copiado un poco de distintos hilos que he encontrado por internet, y de algunos de esta página, como este Gestor de carreras de Scalextric - Español - Arduino Forum. Una instalación así me valdría, el problema lo tengo en que en ese post falta la imagen del esquema eléctrico jeje.
Yo de momento, he elaborado un semáforo bastante sencillo, y un cronómetro que aún no se detiene al paso de cada vuelta pero porque quiero antes hacerlo funcionar a la perfección.
Mis dos principales problemas en este momento son:
-No se como conectar un pulsador a algún pin de Arduino de forma correcta para luego hacer que al pulsar marque el paso de vuelta. Aunque parece sencillo he intentado la instalación de muchas maneras y no consigo que funcione.
-El programa del semáforo funciona y el del cronometro también, pero al unir ambos en un loop, solo se está encendiendo constantemente el semáforo y no se activa el cronómetro.
Imagino que son fallos de principiante jaajja.
Os dejo el código que llevo y la instalación a ver si me podéis ayudar. Gracias de antemano.
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
int rojo1 = 13; //Pin led rojo1
int rojo2 = 6; //Pin led rojo2
int rojo3 = 5; //Pin led rojo3
int rojo4 = 4; //Pin led rojo4
int verde = 2; //Pin led verde
int intervalo = 1000; //Intervalo de la secuencia 1 segundo
int horas = 0;
int minutos = 0;
int segundos = 0;
int decimas = 0;
long milisegundos = 0;
void setup(){
pinMode(rojo1, OUTPUT);
pinMode(rojo2, OUTPUT);
pinMode(rojo3, OUTPUT);
pinMode(rojo4, OUTPUT);
pinMode(verde, OUTPUT);
Serial.begin(9600);
lcd.begin(16,2);
}
void semaforo(){
digitalWrite(rojo1, HIGH); //Encendido secuencial de los rojos
delay(intervalo);
digitalWrite(rojo2, HIGH);
delay(intervalo);
digitalWrite(rojo3, HIGH);
delay(intervalo);
digitalWrite(rojo4, HIGH);
delay(intervalo);
digitalWrite(rojo1, LOW); //Apagado de los rojos
digitalWrite(rojo2, LOW);
digitalWrite(rojo3, LOW);
digitalWrite(rojo4, LOW);
delay(intervalo);
digitalWrite(verde, HIGH); //Encendido del verde
delay(intervalo*2);
digitalWrite(verde, LOW); //Apagado del verde
}
void cronometro(){
milisegundos = millis();
if(milisegundos % 100 == 0){ //Only enter if it has passed tenth of a second
decimas++;
if(decimas == 10){ //When it has passed 10 tenths of a second it count one second
decimas = 0;
segundos++;
}
if(segundos == 60){ //When it has passed 60 seconds it count one minute
segundos = 0;
minutos++;
}
//Print Time
lcd.setCursor(0,0);
if(minutos < 10){
lcd.print("0");
}
lcd.print(minutos);
lcd.print(":");
lcd.setCursor(3,0);
if(segundos < 10){
lcd.print("0");
}
lcd.print(segundos);
lcd.print(":");
lcd.setCursor(6,0);
lcd.print(decimas);
}
}
void loop(){
lcd.clear();
lcd.print(" BUENA");
lcd.setCursor(0, 1);
lcd.print(" CARRERA!");
delay(2000);
semaforo();
lcd.clear();
cronometro();
}