// C++ code
//
#include <LiquidCrystal.h>
#define red1 13
#define yellow1 12
#define red2 11
#define yellow2 10
#define red3 9
#define yellow3 8
#define red4 7
#define buttonApin 4
#define buttonBpin 22
#define ring1 6
#define ring2 5
unsigned long rate;
#define PIN_TRIG1 3
#define PIN_ECHO1 2
#define PIN_TRIG2 29
#define PIN_ECHO2 30
unsigned long startTime;
unsigned long duration;
bool firstTripped = false;
bool firstOff = false;
LiquidCrystal lcd(23, 24, 25, 26, 27, 28);
void setup()
{
pinMode(PIN_TRIG1, OUTPUT);
pinMode(PIN_ECHO1, INPUT);
pinMode(PIN_TRIG2, OUTPUT);
pinMode(PIN_ECHO2, INPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
pinMode(red1, OUTPUT);
pinMode(yellow1, OUTPUT);
pinMode(red2, OUTPUT);
pinMode(yellow2, OUTPUT);
pinMode(red3, OUTPUT);
pinMode(yellow3, OUTPUT);
pinMode(red4, OUTPUT);
pinMode(ring1, OUTPUT);
pinMode(ring2, OUTPUT);
lcd.begin(16, 2);
Serial.begin(115200);
}
void fireworkStick() {
digitalWrite(red1, HIGH);
delay(200);
digitalWrite(red1, LOW);
digitalWrite(yellow1, HIGH);
delay(150);
digitalWrite(yellow1, LOW);
digitalWrite(red2, HIGH);
delay(150);
digitalWrite(red2, LOW);
digitalWrite(yellow2, HIGH);
delay(150);
digitalWrite(yellow2, LOW);
digitalWrite(red3, HIGH);
delay(150);
digitalWrite(red3, LOW);
digitalWrite(yellow3, HIGH);
delay(150);
digitalWrite(yellow3, LOW);
digitalWrite(red4, HIGH);
delay(200);
digitalWrite(red4, LOW);
}
void fireworkRings() {
digitalWrite(ring1, HIGH);
delay(200);
digitalWrite(ring2, HIGH);
digitalWrite(ring1, LOW);
delay(200);
digitalWrite(ring2, LOW);
}
void speed()
{
// subtract end time from start time to get total time
elapsed_time = ((end_time - start_time));
// convert mm/s to mph
mph = ((106000 / elapsed_time) * 0.0022);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(mph);
lcd.print("mph");
lcd.setCursor(0, 0);
}
void yourSpeedWas() {
lcd.clear();
lcd.setCursor(0, 0);
String message = "Your speed was:";
for (byte i = 0; i < message.length(); i++) {
lcd.print(message[i]);
delay(50);
}
}
void sensor1 () {
// Start a new measurement on sensor 1:
digitalWrite(PIN_TRIG1, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG1, LOW);
// Read the result:
int duration1 = pulseIn(PIN_ECHO1, HIGH);
int one = (duration1 / 2) / 29;
}
void sensor2 () {
//start a new measurement on sensor 2:
digitalWrite(PIN_TRIG2, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG2, LOW);
// Read the result:
int duration2 = pulseIn(PIN_ECHO2, HIGH);
int two = (duration2 / 2) / 29;
}
void loop()
{
}
}
long end_time; // When Sensor 2 is triggered
long start_time; // When Sensor 1 is triggered
long elapsed_time; // End time minus start time
float mph; // Speed calculated
int trigger1 = 0; // Sensor 1
int trigger2 = 0; // Sensor 2
int sensor1State; // Sensor 1 status
int sensor2State; // Sensor 2 status
// Function to determine speed
void loop() {
// Read the state of the IR sensor 1:
sensor1State = digitalRead(SENSORPIN1);
// See if IR beam of sensor 1 has been broken
if (sensor1State == LOW) {
// Check to make sure both sensors have not triggered
if (trigger1 == 0 && trigger2 == 0) {
// Save time when sensor 1 was triggered
start_time = millis();
// Prevent sensor 1 from triggering again
trigger1 = 1;
}
}
// Read the state of the IR sensor 2:
sensor2State = digitalRead(SENSORPIN2);
// See if IR beam of sensor 2 has been broken
if (sensor2State == LOW) {
// Check to make sure sensor 1 has triggered but not sensor2
if (trigger2 == 0 && trigger1 == 1) {
// Save time when sensor 2 was triggered
end_time = millis();
// Run speed function
speed();
// Prevent sensor 2 from triggering again
trigger2 = 1;
}
delay(1000);
// Reset both sensors
trigger1 = 0;
trigger2 = 0;
}
}