hola a todos!!
tengo un problemita y quisiera ver quien puede ayudarme
tengo un sketch que funciona muy bien en un carril o linea y necesito añadir otra línea.
como le hago para que sea 2 cronos en 2 carriles y una sola secuencia de luces osea
terminando la secuencia de luces (semaforo) inicien los 2 cronometros y al llegar a la meta cada cronometro marque su propio tiempo, espero alguien pueda ayudarme
// pin 9-11 valieron arduino mega
#define pinStageSensor 8
#define pinFinishSensor 10
#define pinLedStage 3
#define pinLedKuning1 4 //led amarillo
#define pinLedKuning2 5 //led amarillo
#define pinLedKuning3 6 //led amarillo
#define pinLedHijau 7 //led verde
#define pinLedMerah A0 //led rojo
#define photodiodaOn LOW
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
enum statusRace {
standby,
preStage,
stage,
kuning1, //led amarillo
kuning2, //led amarillo
kuning3, //led amarillo
hijau, //led verde
merah, //led rojo
};
LiquidCrystal_I2C lcd(0x27, 20, 4);
uint32_t microsWaktuReaction, microsWaktuFoot, microsWaktuFinish;
uint32_t microsPhotodioda;
uint32_t millisStage;
byte statusRace = standby;
bool statusStage;
void setup() {
//pinMode(pinPreStageSensor, INPUT_PULLUP);
pinMode(pinStageSensor, INPUT_PULLUP);
//pinMode(pinFootSensor, INPUT_PULLUP);
pinMode(pinFinishSensor, INPUT_PULLUP);
//pinMode(pinLedPreStage, OUTPUT);
pinMode(pinLedStage, OUTPUT);
pinMode(pinLedKuning1, OUTPUT);
pinMode(pinLedKuning2, OUTPUT);
pinMode(pinLedKuning3, OUTPUT);
pinMode(pinLedHijau, OUTPUT);
pinMode(pinLedMerah, OUTPUT);
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(0x27);
if (Wire.endTransmission())
{
lcd = LiquidCrystal_I2C(0x3F, 20, 4);
}
lcd.init();
lcd.backlight();
lcd.print("Pro Timer");
lcd.setCursor(0, 1);
lcd.print("V.2");
delay(3000);
lcd.clear();
lcd.print("ARMADO...");
}
void loop() {
if (digitalRead(pinStageSensor) == photodiodaOn)
{
digitalWrite(pinLedStage, HIGH);
if (statusRace <= preStage)
{
millisStage = millis() + 5000;
statusRace = stage;
statusStage = true;
lcd.clear();
lcd.print("ALINEADO");
}
}
else if (statusStage && (statusRace < hijau)) //led verde
{
statusRace = merah; //led rojo
digitalWrite(pinLedMerah, HIGH); //led rojo
lcd.clear();
lcd.print("FALTA");
}
else
{
digitalWrite(pinLedStage, LOW);
}
if (statusRace != merah) //led rojo
{
switch (statusRace)
{
case preStage:
case stage:
if (millisStage < millis())
{
lcd.clear();
lcd.print("1");
digitalWrite(pinLedKuning1, HIGH); //amarillo1
millisStage = millis() + 400;
statusRace++;
}
break;
case kuning1:
if (millisStage < millis())
{
lcd.clear();
lcd.print("2");
digitalWrite(pinLedKuning1, LOW); //amarillo1
digitalWrite(pinLedKuning2, HIGH); //amarillo2
millisStage = millis() + 400;
statusRace++;
}
break;
case kuning2:
if (millisStage < millis())
{
lcd.setCursor(0, 0);
lcd.print("3");
digitalWrite(pinLedKuning2, LOW); //amarillo2
digitalWrite(pinLedKuning3, HIGH); //amarillo 3
millisStage = millis() + 400;
statusRace++;
}
break;
case kuning3:
if (millisStage < millis())
{
lcd.setCursor(0, 0);
lcd.print("Start ");
digitalWrite(pinLedKuning3, LOW); //amarillo3
digitalWrite(pinLedHijau, HIGH); //verde
millisStage = millis() + 400;
statusRace++;
microsPhotodioda = micros();
}
break;
case hijau:
break;
case merah:
break;
}
if (statusRace == hijau) //verde
{
if (statusStage)
{
while (digitalRead(pinStageSensor) == photodiodaOn);
}
else
{
while (digitalRead(pinStageSensor) != photodiodaOn);
while (digitalRead(pinStageSensor) != photodiodaOn);
while (digitalRead(pinStageSensor) == photodiodaOn);
}
microsWaktuReaction = micros() - microsPhotodioda;
float waktuReaction = 1.0 * microsWaktuReaction / 1000000;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("R.Time : ");
lcd.print(waktuReaction);
lcd.print(" s");
Serial.print("waktuReaction =");
Serial.println(waktuReaction);
//waktu finish
while (digitalRead(pinFinishSensor) != photodiodaOn);
microsWaktuFinish = micros() - microsPhotodioda;
float waktuFinish = 1.0 * microsWaktuFinish / 1000000;
lcd.setCursor(0, 1);
lcd.print("F.Time : ");
lcd.print(waktuFinish);
lcd.print(" s");
Serial.print("waktuFinish =");
Serial.println(waktuFinish);
digitalWrite(pinLedHijau, LOW); //verde
statusStage = false;
statusRace = standby;
}
}
}



