#define relayRight 8
#define relayLeft 9
#define relayLight 10
#define relayFlash 11
#define lockSignal A0
#define contactSignal A1
#define lightSignal A2
#define flashSignal A3
#define potentiometer A4
#define masterSignal 13
#define winkSignal 2
#define danceSignal 3
#define followSignal 4
#define followLed 5
#define buzzer 6
int relayStatus = 0;
int Lights = 0;
int Flash = 0;
int Contact = 0;
int Lock = 0;
int Master = 0;
int Wink = 0;
int Dance = 0;
int Follow = 0;
int Pot = 0;
unsigned int lightThreshold = 10;
unsigned int flashThreshold = 2;
unsigned int contactThreshold = 20;
unsigned int lockThreshold = 10;
unsigned long previousMillis = 0;
unsigned long currentTime = 0;
unsigned long Timer = 4500;
bool kapanma = false;
void setup() {
pinMode(relayLeft, OUTPUT);
pinMode(relayRight, OUTPUT);
pinMode(relayLight, OUTPUT);
pinMode(relayFlash, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(followLed, OUTPUT);
pinMode(masterSignal, INPUT_PULLUP);
pinMode(winkSignal, INPUT_PULLUP);
pinMode(danceSignal, INPUT_PULLUP);
pinMode(followSignal, INPUT_PULLUP);
digitalWrite(relayLeft, LOW);
digitalWrite(relayRight, LOW);
digitalWrite(relayLight, LOW);
digitalWrite(relayFlash, LOW);
Serial.begin(9600);
}
void loop() {
Lights = analogRead(lightSignal);
Flash = analogRead(flashSignal);
Contact = analogRead(contactSignal);
Lock = analogRead(lockSignal);
Pot = analogRead(potentiometer);
Master = digitalRead(masterSignal);
Wink = digitalRead(winkSignal);
Dance = digitalRead(danceSignal);
Follow = digitalRead(followSignal);
static bool headlightsAreUp = false; // current state
static unsigned long lastTimeLightsOn; // for timing
// Read the inputs and the current time.
bool masterSwitchIsOn = digitalRead(masterSignal) == LOW;
bool lightsAreOn = analogRead(lightSignal) >= lightThreshold
|| analogRead(flashSignal) >= flashThreshold;
unsigned long now = millis();
if (lightsAreOn) {
lastTimeLightsOn = now;
}
// Move the headlights up or down when needed.
if (headlightsAreUp) {
if (!masterSwitchIsOn && now - lastTimeLightsOn >= 5000) {
HeadsDown();
headlightsAreUp = false;
relayStatus = 0;
}
} else { // headlights are down
if (masterSwitchIsOn || lightsAreOn) {
HeadsUp();
headlightsAreUp = true;
relayStatus = 1;
}
}
/*
if (relayStatus == 0 && Flash >= flashThreshold) {
HeadsUp();
currentTime = millis();
if (currentTime - previousMillis >= Timer) {
HeadsDown();
relayStatus = 0;
}
}
*/
// Handle Wink and Dance actions based on digital signals
handleActions();
// Debugging output
/* Serial.print("Master Signal: ");
Serial.println(Master);
Serial.print("Light: ");
Serial.println(Lights);
Serial.print("Flash: ");
Serial.println(Flash);
Serial.print("Relay Status: ");
Serial.println(relayStatus);
Serial.print("Wink Signal: ");
Serial.println(Wink);
Serial.print("Dance Signal: ");
Serial.println(Dance);
Serial.println("-------------------");
*/
delay(1000);
}
// Function to handle Wink and Dance actions
void handleActions() {
if (relayStatus == 0) {
if (Wink == LOW) {
WinkClosed();
}
if (Dance == LOW) {
DanceClosed();
}
} else {
if (Wink == LOW) {
WinkOpen();
}
if (Dance == LOW) {
DanceOpen();
}
}
}
// Function to open both relays
void HeadsUp() {
digitalWrite(relayLeft, HIGH);
digitalWrite(relayRight, HIGH);
Serial.println("Relays opened (HeadsUp)");
}
// Function to close both relays
void HeadsDown() {
digitalWrite(relayLeft, LOW);
digitalWrite(relayRight, LOW);
Serial.println("Relays closed (HeadsDown)");
}
// Define Wink and Dance functions
void WinkClosed() {
Serial.println("WinkClosed activated!");
digitalWrite(relayLeft, HIGH);
digitalWrite(relayRight, HIGH);
delay(700);
digitalWrite(relayRight, LOW);
delay(500);
digitalWrite(relayRight, HIGH);
delay(700);
digitalWrite(relayLeft, LOW);
digitalWrite(relayRight, LOW);
delay(300);
}
void WinkOpen() {
Serial.println("WinkOpen activated!");
digitalWrite(relayRight, LOW);
delay(500);
digitalWrite(relayRight, HIGH);
delay(300);
}
void DanceClosed() {
Serial.println("DanceClosed activated!");
digitalWrite(relayLeft, HIGH);
delay(400);
digitalWrite(relayRight, HIGH);
delay(400);
digitalWrite(relayLeft, LOW);
delay(400);
digitalWrite(relayRight, LOW);
delay(300);
}
void DanceOpen() {
Serial.println("DanceOpen activated!");
digitalWrite(relayLeft, LOW);
delay(400);
digitalWrite(relayRight, LOW);
delay(400);
digitalWrite(relayLeft, HIGH);
delay(400);
digitalWrite(relayRight, HIGH);
delay(300);
}