Na oficjalnym forum arduino dostałem rozwiązanie odnośnie migania z 50 na 100%
Jednak pojawił się kolejny problem, a w zasadzie dwa:
1) Podczas "migania" prawymi lub lewymi kierunkowskazami przednie migają od 0 do 100% natomiast tylne od 50 do 100%, przy wyłączeniu migacza często ten przedni pozostaje włączony (50/50)
Kod odpowiedzialny za miganie:
2) podczas używania świateł awaryjnych występuje podobna sytuacja + jeżeli przejdę bezpośrednio z migacza na awaryjne te drugie nie są zsynchronizowane.
Kod na światła awaryjne:
Poniżej zamieszczam pełny kod odpowiedzialny za obsługę świateł w samochodzie:
Edit. Problem z wyłączeniem przednich kierunkowskazów rozwiązany, niestety problem z brakiem synchronizacji pozostaje
Jednak pojawił się kolejny problem, a w zasadzie dwa:
1) Podczas "migania" prawymi lub lewymi kierunkowskazami przednie migają od 0 do 100% natomiast tylne od 50 do 100%, przy wyłączeniu migacza często ten przedni pozostaje włączony (50/50)
Kod odpowiedzialny za miganie:
Kod:
//Left ON
if(Data==('g')){
turnSignalStateRearR = false;
turnSignalStateFrontR = false;
analogWrite(turnSignalRearR,constStateLed);
turnSignalStateRearL = true;
turnSignalStateFrontL = true;
sendData("turn signal left ON");
}
//Left OFF
if(Data==('h')){
turnSignalStateRearL = false;
turnSignalStateFrontL = false;
analogWrite(turnSignalRearL,constStateLed);
digitalWrite(turnSignalStateFrontL,0);
sendData("turn signal left ON");
}
//Right ON
if(Data==('i')){
turnSignalStateRearL = false;
turnSignalStateFrontL = false;
analogWrite(turnSignalRearL,constStateLed);
turnSignalStateRearR = true;
turnSignalStateFrontR = true;
sendData("turn signal right ON");
}
//Right OFF
if(Data==('j')){
turnSignalStateRearR = false;
turnSignalStateFrontR = false;
analogWrite(turnSignalRearR,constStateLed);
digitalWrite(turnSignalStateFrontR,0);
sendData("turn signal right OFF");
}
2) podczas używania świateł awaryjnych występuje podobna sytuacja + jeżeli przejdę bezpośrednio z migacza na awaryjne te drugie nie są zsynchronizowane.
Kod na światła awaryjne:
Kod:
if(Data==('9')){
turnSignalStateRearL = true;
turnSignalStateRearR = true;
turnSignalStateFrontL = true;
turnSignalStateFrontR = true;
sendData("HAZARD lights ON");
}
//Hazzard lights OFF
if(Data==('0')){
turnSignalStateRearL = false;
turnSignalStateRearR = false;
turnSignalStateFrontL = false;
turnSignalStateFrontR = false;
analogWrite(turnSignalRearL,constStateLed);
analogWrite(turnSignalRearR,constStateLed);
sendData("HAZARD lights OFF");
}
Poniżej zamieszczam pełny kod odpowiedzialny za obsługę świateł w samochodzie:
Kod:
#include <SoftwareSerial.h>
int mainLights = 2; // 2x diode front + 6x diode rear + 3x diode inside
int rearLights = 3; //PWM 2x diode rear
int reversingLight = 4; //2x diode reversing light
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
int frontLights = 9; //2x diode front lights
const int constStateLed = 50;
int stateLed = 50;
int stateLed2 = 50;
//BLINK / FADE
unsigned long currentTime1 = 0;
unsigned long currentTime2 = 0;
unsigned long currentTime3 = 0;
unsigned long currentTime4 = 0;
unsigned long savedTime1 = 0;
unsigned long savedTime2 = 0;
unsigned long savedTime3 = 0;
unsigned long savedTime4 = 0;
boolean turnSignalStateRearL = false; //turn signal rear left state
boolean turnSignalStateRearR = false; //turn signal rear right state
boolean turnSignalStateFrontL = false;//turn signal front left state
boolean turnSignalStateFrontR = false;//turn signal front right state
boolean hazardLights = false; //hazard lights
SoftwareSerial Bluetooth(0, 1);
char Data;
void sendData(String transmitData){
Bluetooth.println(transmitData);}
void setup(){
Bluetooth.begin(9600);
pinMode(mainLights,OUTPUT);
pinMode(rearLights,OUTPUT);
pinMode(reversingLight,OUTPUT);
pinMode(turnSignalRearL,OUTPUT);
pinMode(turnSignalRearR,OUTPUT);
pinMode(turnSignalFrontL,OUTPUT);
pinMode(turnSignalFrontR,OUTPUT);
pinMode(frontLights,OUTPUT);
}
void loop(){
currentTime1 = millis();
currentTime2 = millis();
currentTime3 = millis();
currentTime4 = millis();
//=== REAR turn signal ===
//REAR Left
if (turnSignalStateRearL && currentTime1 - savedTime1 >= 300UL) {
savedTime1 = currentTime1;
if (stateLed == 50)
stateLed = 255;
else
stateLed = 50;
analogWrite(turnSignalRearL, stateLed);
}
//REAR Right
if (turnSignalStateRearR && currentTime2 - savedTime2 >= 300UL) {
savedTime2 = currentTime2;
if (stateLed2 == 50)
stateLed2 = 255;
else
stateLed2 = 50;
analogWrite(turnSignalRearR, stateLed2);
}
//=== FRONT turn signal ===
//FRONT Left
if (turnSignalStateFrontL && currentTime3 - savedTime3 >= 300UL) {
savedTime3 = currentTime3;
digitalWrite(turnSignalFrontL, !digitalRead(turnSignalFrontL));
}
//FRONT Right
if (turnSignalStateFrontR && currentTime4 - savedTime4 >= 300UL) {
savedTime4 = currentTime4;
digitalWrite(turnSignalFrontR, !digitalRead(turnSignalFrontR));
}
//=== HAZARD lights ===
/*I tryed this:
if (hazardLights && currentTime - savedTime1 >= 300UL) {
savedTime1 = currentTime;
if (stateLed == 50)
stateLed = 255;
else
stateLed = 50;
analogWrite((turnSignalFrontL && turnSignalRearR), stateLed);
}
*/
//=== BLUETOOTH commands ===
if(Bluetooth.available()){
Data=Bluetooth.read();
if(Data==('a')){
digitalWrite(mainLights,1);
analogWrite(rearLights,constStateLed);
analogWrite(turnSignalRearL,constStateLed);
analogWrite(turnSignalRearR,constStateLed);
sendData("main lights ON");
}
if(Data==('b')){
digitalWrite(mainLights,0);
digitalWrite(rearLights,0);
digitalWrite(turnSignalRearL,0);
digitalWrite(turnSignalRearR,0);
sendData("main lights OFF");
}
if(Data==('c')){
digitalWrite(rearLights,1);
sendData("frontLights ON");
}
if(Data==('d')){
digitalWrite(rearLights,0);
sendData("frontLights OFF");
}
if(Data==('e')){
digitalWrite(reversingLight,1);
sendData("reversingLight ON");
}
if(Data==('f')){
digitalWrite(reversingLight,0);
sendData("reversingLight OFF");
}
//=== BLINKING / FADING ===
//Left ON
if(Data==('g')){
turnSignalStateRearR = false;
turnSignalStateFrontR = false;
analogWrite(turnSignalRearR,constStateLed);
turnSignalStateRearL = true;
turnSignalStateFrontL = true;
sendData("turn signal left ON");
}
//Left OFF
if(Data==('h')){
turnSignalStateRearL = false;
turnSignalStateFrontL = false;
analogWrite(turnSignalRearL,constStateLed);
digitalWrite(turnSignalStateFrontL,0);
sendData("turn signal left ON");
}
//Right ON
if(Data==('i')){
turnSignalStateRearL = false;
turnSignalStateFrontL = false;
analogWrite(turnSignalRearL,constStateLed);
turnSignalStateRearR = true;
turnSignalStateFrontR = true;
sendData("turn signal right ON");
}
//Right OFF
if(Data==('j')){
turnSignalStateRearR = false;
turnSignalStateFrontR = false;
analogWrite(turnSignalRearR,constStateLed);
digitalWrite(turnSignalStateFrontR,0);
sendData("turn signal right OFF");
}
//Hazzard lights ON
if(Data==('9')){
turnSignalStateRearL = true;
turnSignalStateRearR = true;
turnSignalStateFrontL = true;
turnSignalStateFrontR = true;
sendData("HAZARD lights ON");
}
//Hazzard lights OFF
if(Data==('0')){
turnSignalStateRearL = false;
turnSignalStateRearR = false;
turnSignalStateFrontL = false;
turnSignalStateFrontR = false;
analogWrite(turnSignalRearL,constStateLed);
analogWrite(turnSignalRearR,constStateLed);
sendData("HAZARD lights OFF");
}
}
}
Edit. Problem z wyłączeniem przednich kierunkowskazów rozwiązany, niestety problem z brakiem synchronizacji pozostaje