#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define air1 9
#define air2 10
#define killout 3
#define buzzer 6
#define precharge 11
#define killswitch1 7
#define killswitch2 8
#define botswitch 2
#define green 12
#define red 5
#define blue 4
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
int kstate1 = 0;
int kstate2 = 0;
int botstate = 0;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
Serial.begin(9600);
pinMode(air1, OUTPUT);
pinMode(air2, OUTPUT);
pinMode(killout, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(precharge, OUTPUT);
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(killswitch1, INPUT);
pinMode(killswitch2, INPUT);
pinMode(botswitch, INPUT);
digitalWrite(air1, LOW);
digitalWrite(air2, LOW);
digitalWrite(killout, LOW);
digitalWrite(precharge, LOW);
displayMessage("*******************************");
displayMessage(" MITS_MOTORSPORTS_V2 ");
displayMessage("*******************************");
delay(1000);
kstate1 = digitalRead(killswitch1);
kstate2 = digitalRead(killswitch2);
botstate = digitalRead(botswitch);
if (kstate1 == LOW && kstate2 == LOW && botstate == LOW) {
digitalWrite(precharge, HIGH);
digitalWrite(blue, HIGH);
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
displayMessage("PreCharging..!");
Serial.println("PreCharging..!");
delay(2000);
digitalWrite(air1, HIGH);
digitalWrite(air2, HIGH);
digitalWrite(blue, HIGH);
digitalWrite(green, HIGH);
digitalWrite(red, LOW);
displayMessage("Accumulator Isolation Relays Activated!");
Serial.println("Accumulator Isolation Relays Activated!");
delay(800);
digitalWrite(precharge, LOW);
displayMessage("PreCharge cutoff");
Serial.println("PreCharge cutoff");
delay(800);
displayMessage("GoKart Ready to RACE!");
Serial.println("GoKart Ready to RACE!");
delay(800);
} else {
displayMessage("Warning: RESET ALL KILL SWITCHES!");
Serial.println("Warning: RESET ALL KILL SWITCHES!");
digitalWrite(killout, HIGH);
digitalWrite(green, HIGH);
digitalWrite(red, HIGH);
digitalWrite(blue, LOW);
delay(800);
}
}
void loop() {
kstate1 = digitalRead(killswitch1);
kstate2 = digitalRead(killswitch2);
botstate = digitalRead(botswitch);
if (kstate1 == HIGH || kstate2 == HIGH || botstate == HIGH) {
digitalWrite(air1, LOW);
digitalWrite(air2, LOW);
digitalWrite(killout, HIGH);
digitalWrite(green, HIGH);
digitalWrite(red, HIGH);
digitalWrite(blue, HIGH);
delay(150);
digitalWrite(green, HIGH);
digitalWrite(red, HIGH);
digitalWrite(blue, LOW);
delay(150);
displayMessage("EMERGENCY STOP TRIGGERED!");
Serial.println("EMERGENCY STOP TRIGGERED!");
displayMessage("Press RESET to Continue");
Serial.println("Press RESET to Continue");
} else {
displayMessage("Everything OK");
Serial.println("Everything OK");
}
delay(900);
}
void displayMessage(String msg) {
display.clearDisplay();
display.setCursor(0, 0);
display.println(msg);
display.display();
}
void soundBuzzer(int duration = 350) {
digitalWrite(buzzer, HIGH);
delay(duration);
digitalWrite(buzzer, LOW);
delay(170);
}
void flashBuzzer(int times) {
for (int i = 0; i < times; i++) {
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
delay(80);
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
relay1:NO2
relay1:NC2
relay1:P2
relay1:COIL2
relay1:NO1
relay1:NC1
relay1:P1
relay1:COIL1
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
bz1:1
bz1:2
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r
btn6:1.l
btn6:2.l
btn6:1.r
btn6:2.r
led4:A
led4:C
vcc1:VCC
gnd1:GND
led5:A
led5:C
led6:A
led6:C
led7:A
led7:C
led8:A
led8:C
oled2:GND
oled2:VCC
oled2:SCL
oled2:SDA