#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Initialize LCD with address 0x27 (change to 0x3F if needed)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin Definitions
const int alcoholPin = A0;
const int ignitionInput = 2;
const int helmetInput = 3;
const int engineRelay = 4;
const int fuelRelay = 5;
const int alcoholThreshold = 200;
void setup() {
lcd.begin(16, 2);
lcd.backlight();
pinMode(ignitionInput, INPUT_PULLUP);
pinMode(helmetInput, INPUT_PULLUP);
pinMode(engineRelay, OUTPUT);
pinMode(fuelRelay, OUTPUT);
digitalWrite(engineRelay, LOW);
digitalWrite(fuelRelay, LOW);
lcd.setCursor(0, 0);
lcd.print("Bike Safety Init");
delay(2000);
lcd.clear();
}
void loop() {
int alcoholLevel = analogRead(alcoholPin);
bool ignitionOn = digitalRead(ignitionInput) == LOW;
bool helmetOn = digitalRead(helmetInput) == LOW;
if (ignitionOn) {
if (alcoholLevel > alcoholThreshold) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WARNING:");
lcd.setCursor(0, 1);
lcd.print("Alcohol Detected");
delay(5000);
engineOff();
}
else if (!helmetOn) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WARNING:");
lcd.setCursor(0, 1);
lcd.print("Wear Helmet");
delay(5000);
engineOff();
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Engine ON");
lcd.setCursor(0, 1);
lcd.print("Fuel Lock ON");
digitalWrite(engineRelay, HIGH);
digitalWrite(fuelRelay, HIGH);
}
} else {
engineOff();
}
delay(500);
}
void engineOff() {
digitalWrite(engineRelay, LOW);
digitalWrite(fuelRelay, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Engine OFF");
lcd.setCursor(0, 1);
lcd.print("Fuel Locked");
delay(2000);
}