Przebudowałem kod w oparciu o switch.
Wszystko wygląda / działa ok i jest zsynchronizowane.
Dziękuję za sugestie.
Poniżej wklejam kod na trochę nietypowe kierunkowskazy oraz światła awaryjne:
Wszystko wygląda / działa ok i jest zsynchronizowane.
Dziękuję za sugestie.
Poniżej wklejam kod na trochę nietypowe kierunkowskazy oraz światła awaryjne:
Kod:
#include <SoftwareSerial.h>
int turnSignalRearL = 5; //PWM 2x diode turn signal rear-left
int turnSignalRearR = 6; //PWM 2x diode turn signal rear-right
int turnSignalFrontL = 7; //2x diode turn signal front-left
int turnSignalFrontR = 8; //2x diode turn signal front-right
bool turnSignalIsOn = false;
bool turnSignalIsOn2 = false;
bool turnSignalIsOn3 = false;
bool ledIsOn = false;
unsigned long lastBlinkTime;
int currentFadeValue;
SoftwareSerial Bluetooth(0, 1);
char Data;
void sendData(String transmitData){
Bluetooth.println(transmitData);}
void setup() {
Bluetooth.begin(9600);
pinMode(turnSignalRearL,OUTPUT);
pinMode(turnSignalFrontL,OUTPUT);
pinMode(turnSignalRearR,OUTPUT);
pinMode(turnSignalFrontR,OUTPUT);
}
void loop() {
switch (Bluetooth.read()) {
//=== LEFT turn signal ===
case 'g':
analogWrite(turnSignalRearR, 0); // Right off
digitalWrite(turnSignalFrontR, 0); // Right off
turnSignalIsOn2 = false; // Right off
turnSignalIsOn3 = false; // Hazzard off
analogWrite(turnSignalRearL, 255);
digitalWrite(turnSignalFrontL, 1);
turnSignalIsOn = true;
lastBlinkTime = millis();
ledIsOn = true;
currentFadeValue = 255;
break;
case 'h':
analogWrite(turnSignalRearL, 0);
digitalWrite(turnSignalFrontL, 0);
turnSignalIsOn = false;
ledIsOn = false;
break;
//=== RIGHT turn signal ===
case 'i':
analogWrite(turnSignalRearL, 0); // Left off
digitalWrite(turnSignalFrontL, 0); // Left off
turnSignalIsOn = false; // Left off
turnSignalIsOn3 = false; // Hazzard off
analogWrite(turnSignalRearR, 255);
digitalWrite(turnSignalFrontR, 1);
turnSignalIsOn2 = true;
lastBlinkTime = millis();
ledIsOn = true;
currentFadeValue = 255;
break;
case 'j':
analogWrite(turnSignalRearR, 0);
digitalWrite(turnSignalFrontR,0);
turnSignalIsOn2 = false;
ledIsOn = false;
break;
//=== HAZZARD signal ===
case '9':
analogWrite(turnSignalRearL, 0); // Left off
digitalWrite(turnSignalFrontL, 0); // Left off
turnSignalIsOn = false; // Left off
analogWrite(turnSignalRearR, 0); // Right off
digitalWrite(turnSignalFrontR, 0); // Right off
turnSignalIsOn2 = false; // Right off
analogWrite(turnSignalRearL, 255);
digitalWrite(turnSignalFrontL, 1);
analogWrite(turnSignalRearR, 255);
digitalWrite(turnSignalFrontR, 1);
turnSignalIsOn3 = true;
lastBlinkTime = millis();
ledIsOn = true;
currentFadeValue = 255;
break;
case '0':
analogWrite(turnSignalRearL, 0);
digitalWrite(turnSignalFrontL, 0);
analogWrite(turnSignalRearR, 0);
digitalWrite(turnSignalFrontR, 0);
turnSignalIsOn3 = false;
ledIsOn = false;
break;
default: break;
}
//=== BLINKING / FADING code ===
//LEFT
if (turnSignalIsOn) {
if (millis() - lastBlinkTime >= 300) {
if (ledIsOn) {
analogWrite(turnSignalRearL, 50);
digitalWrite(turnSignalFrontL, 0);
if (currentFadeValue <= 50) turnSignalIsOn = false;
} else {
Serial.println(currentFadeValue);
analogWrite(turnSignalRearL, currentFadeValue);
digitalWrite(turnSignalFrontL, 1);
}
ledIsOn = ! ledIsOn;
lastBlinkTime = millis();
}
}
//RIGHT
if (turnSignalIsOn2) {
if (millis() - lastBlinkTime >= 300) {
if (ledIsOn) {
analogWrite(turnSignalRearR, 50);
digitalWrite(turnSignalFrontR, 0);
if (currentFadeValue <= 50) turnSignalIsOn2 = false;
} else {
Serial.println(currentFadeValue);
analogWrite(turnSignalRearR, currentFadeValue);
digitalWrite(turnSignalFrontR, 1);
}
ledIsOn = ! ledIsOn;
lastBlinkTime = millis();
}
}
//HAZZARD
if (turnSignalIsOn3) {
if (millis() - lastBlinkTime >= 300) {
if (ledIsOn) {
analogWrite(turnSignalRearL, 50);
digitalWrite(turnSignalFrontL, 0);
analogWrite(turnSignalRearR, 50);
digitalWrite(turnSignalFrontR, 0);
if (currentFadeValue <= 50) turnSignalIsOn3 = false;
} else {
Serial.println(currentFadeValue);
analogWrite(turnSignalRearL, currentFadeValue);
digitalWrite(turnSignalFrontL, 1);
analogWrite(turnSignalRearR, currentFadeValue);
digitalWrite(turnSignalFrontR, 1);
}
ledIsOn = ! ledIsOn;
lastBlinkTime = millis();
}
}
}