// Лабораторна робота №13
// Зеня Дмитра Андрійовича, ЕА-324
int ledLeft[5] = {6, 7, 8 , 9 ,10}; // піни світлодіодів лівого поворотника
int ledRight[5] = {5, 4, 3, 2, A1}; // піни світлодіодів правого поворотника
int buttonPin[3] = {13, 12, 11}; // піни кнопок
bool buttonFlag[3] = {0, 0, 0}; // прапорці кнопок
unsigned long lastPress[3] = {0, 0, 0}; // час останнього натискання
int pinPot = A0; // пін потенціометра
int flagPot = 0; // прапорець потенціометра
int cmd = 0; // номер команди
int flagCmd = 0; // прапорець команди
unsigned long lastTime = 0;
int k = 0;
bool on = 0;
void setup() {
for (int i = 0; i < 5; i++) {
pinMode(ledLeft[i], OUTPUT);
pinMode(ledRight[i], OUTPUT);
if (i < 3) pinMode(buttonPin[i], INPUT_PULLUP);
}
pinMode(pinPot, INPUT);
}
void loop() {
for (int i = 0; i < 3; i++) {
bool buttonState = !digitalRead(buttonPin[i]);
if (buttonState == 1 && buttonFlag[i] == 0 && millis() - lastPress[i] > 50) {
buttonFlag[i] = 1;
lastPress[i] = millis();
if (cmd == i + 1) cmd = 0;
else cmd = i + 1;
}
if (buttonState == 0 && buttonFlag[i] == 1) buttonFlag[i] = 0;
}
int pmnPot = map(analogRead(pinPot), 0, 1023, -1000, 1000);
if ((pmnPot < -400 || pmnPot > 400) && flagPot == 0) flagPot = 1;
if ((pmnPot >= -400 && pmnPot <= 400) && flagPot == 1) {
flagPot = 0;
if (cmd != 3) cmd = 0;
}
if (flagCmd != cmd) {
flagCmd = cmd;
on = 0;
lastTime = 0;
k = 0;
for (int i = 0; i < 5; i++) {
digitalWrite(ledLeft[i], 0);
digitalWrite(ledRight[i], 0);
}
}
switch(cmd) {
case 1: turnSignal(ledLeft); break;
case 2: turnSignal(ledRight); break;
case 3: hazartSignal(); break;
}
}
void turnSignal(int pinLed[]) {
if (millis() - lastTime >= 120) {
lastTime = millis();
if (k < 5) digitalWrite(pinLed[k], 1);
k++;
if (k >= 6) {
k = 0;
for (int i = 0; i < 5; i++) digitalWrite(pinLed[i], 0);
}
}
}
void hazartSignal() {
if (millis() - lastTime >= 500) {
lastTime = millis();
on = !on;
for (int i = 0; i < 5; i++) {
digitalWrite(ledLeft[i], on);
digitalWrite(ledRight[i], on);
}
}
}
/*
void turnSignal(int pinLed[]) {
for (int i = 0; i < 5; i++) {
digitalWrite(pinLed[i], 1);
delay(150);
}
for (int i = 0; i < 5; i++) {
digitalWrite(pinLed[i], 0);
}
delay(150);
}
void hazartSignal() {
for (int i = 0; i < 5; i++) {
digitalWrite(ledLeft[i], 1);
digitalWrite(ledRight[i], 1);
}
delay(500);
for (int i = 0; i < 5; i++) {
digitalWrite(ledLeft[i], 0);
digitalWrite(ledRight[i], 0);
}
delay(500);
}
*/