Komfort blinkers eller 3-blink automatik

Slängde ihop ett litet Arduino program för att få funktionen med 3-blink så fort som man
kort blinkar åt ett håll. Version 2 lär dyka upp med bättre funktionalitet.
2 kablar för att koppla in höger och vänster blinkers (som jag antar styrs med 12-14 volt)

Med spännings delning så detekterar programmet om blinkern går hög och styr ut 12 volt
för att förlänga tiden så att 3 blinkningar sker (man kan ändra tiden så att den passar med andra antal)
Inga andra finesser det får komma i version 2.

Ingen version 2 en länk till ett färdigt bygge (varför uppfinna hjulet igen :) )
3 Blink Modification for SAAB 9-5 | Hackaday.io
Ny version med blinkers larm om man glömmer bort blinkersen och inaktiverar 3 blinkningar
om man blinkar kort åt andra hållet.

//---------------3-blink + blinkerslarm
int hBlink = 6;        //digigital Input Blinkers
int vBlink = 8;
int vBlinkON = 0;      // blinkers signal
int hBlinkON = 0;
int vBlinkHIGH = 0;      // Blinkers status
int hBlinkHIGH = 0;
int vBlinkPinOut = 13;    // utgång Blinkers
int hBlinkPinOut = 12;    // utgång Blinkers
int BlinkLarmPinOut = 11; //blink larmtuta
    long previousSekunder = 0;
    long BlinkTid = 4;  // tid för att ge 3 blink
    long LarmTid = 30;  // tid för att ge larm om man glömmer blinkersen på   
    long blinkTimer = 0;     //blinkers timer
    long LarmTimer = 0;  //larmtimern
int LarmHIGH = 0; // larmstatus  
    unsigned long currentSekund = millis();
  
void setup() {
Serial.begin(9600);
    previousSekunder = currentSekund ;   // 270 timern uppvärmningstid 30sek                
 //----------  Komfort blinkers
pinMode(vBlink, INPUT);    // Signal blinkers
pinMode(vBlinkPinOut, OUTPUT);    // utgång blinkers  
digitalWrite(vBlinkPinOut,LOW);
pinMode(hBlink, INPUT);   // Signal blinkers
pinMode(hBlinkPinOut, OUTPUT);    // utgång blinkers  
digitalWrite(hBlinkPinOut,LOW);  // bländar av helljuset
pinMode(BlinkLarmPinOut, OUTPUT);    // larm utgång   
digitalWrite(BlinkLarmPinOut,LOW);  //

}
void loop() {
 //----------  Komfort blinkers 
 unsigned long currentSekund = millis()/ 1000 ;  //unsigned long värde i sekunder

 //delay(200); // för att hinna läsa av värderna i serielport
 vBlinkON = digitalRead(vBlink);    // läser av Blinkers
 hBlinkON = digitalRead(hBlink); 
   Serial.print(vBlinkHIGH);Serial.print("   ");Serial.print(hBlinkHIGH);Serial.print(" LH ");Serial.println(LarmHIGH);        
   Serial.print(currentSekund);Serial.print(" B-timer ");Serial.println(blinkTimer);  
          // aktiverar högerblinkers
   if (hBlinkON == HIGH && hBlinkHIGH == LOW && vBlinkHIGH == LOW ) {   //
      digitalWrite(hBlinkPinOut,HIGH);  //aktiverar blinkers
      hBlinkHIGH = 1; blinkTimer = currentSekund + BlinkTid;
      }   // aktiverar vänsterblinkers
   if (vBlinkON == HIGH && vBlinkHIGH == LOW && hBlinkHIGH == LOW ) {   //
      digitalWrite(vBlinkPinOut,HIGH);  //aktiverar blinkers
      vBlinkHIGH = 1; blinkTimer = currentSekund + BlinkTid;
      }
      // inaktiverar högerblinkers om man blinkar åt vänster hållet
    if (vBlinkON == HIGH && hBlinkHIGH == HIGH ) {   //
      digitalWrite(hBlinkPinOut,LOW);  //inaktiverar blinkers
    }     // inaktiverar vänsterblinkers om man blinkar åt höger hållet
    if (hBlinkON == HIGH && vBlinkHIGH == HIGH ) {   //
       digitalWrite(vBlinkPinOut,LOW);  //inaktiverar blinkers
    }   
    delay(300); // för att hinna läsa av värderna i serielport
          // inaktiverar blinkers efter BlinkTid sek ca. 3 blink
if (hBlinkHIGH == HIGH && currentSekund >= blinkTimer || vBlinkHIGH == HIGH && currentSekund >= blinkTimer ){ // inaktiverar blinkers efter 3 sek
          digitalWrite(vBlinkPinOut,LOW);  vBlinkHIGH = 0 ;    //inaktiverar blinkersen
          digitalWrite(hBlinkPinOut,LOW);  hBlinkHIGH = 0 ;
          blinkTimer = currentSekund + BlinkTid;
         }
         // aktiverar blinkers larmet
   if (vBlinkON == HIGH && LarmHIGH == LOW || hBlinkON == HIGH && LarmHIGH == LOW ) {   
         LarmTimer = currentSekund; 
         LarmHIGH = 1 ;
       } // inaktiverar blinkers larmet
   if (vBlinkON == LOW && hBlinkON == LOW) {   //   
         LarmTimer = currentSekund ; 
         LarmHIGH = 0 ;
       }  // larmar om man glömmer blinkersen på
   if (vBlinkON == HIGH && currentSekund - LarmTimer >= LarmTid || hBlinkON == HIGH && currentSekund - LarmTimer >= LarmTid){ // larmar efter 10 sek
        if (LarmHIGH == HIGH){
           int var = 0;
           while (vBlinkON == HIGH && var < 3 || hBlinkON == HIGH && var < 3 ){   // antal gånger som den larmar (3)
                digitalWrite(BlinkLarmPinOut,HIGH);      //aktiverar
                  delay (800);
                digitalWrite(BlinkLarmPinOut,LOW);      //inaktiverar
                 delay (100); var++ ; LarmHIGH = 0 ; 
          }
          digitalWrite(vBlinkPinOut,LOW);     //inaktiverar blinkersen
          digitalWrite(hBlinkPinOut,LOW);
      }}
}  

Och här kommer programet:  (inget är provat i bilen, får vänta tills det blir vår.......så inga garantier)
//---------------3-blink
int vBlink = 7;  //digital Input Blinkers
int hBlink = 6;
int vBlinkON = 0;     
int hBlinkON = 0;
int vBlinkPinOut = 12;    // utgång Blinkers
int hBlinkPinOut = 13;    // utgång Blinkers
    int blinkTimer = 3000;  //delay för ca. 3 blink
   
void setup() {
Serial.begin(9600);
 //----------  3-blink
pinMode(vBlink, INPUT);    // vänster blinkers
pinMode(vBlinkPinOut, OUTPUT);    // vänster blinkers utgång  
digitalWrite(vBlinkPinOut,LOW);  // vänster blinkers
pinMode(hBlink, INPUT);    // höger blinkers
pinMode(hBlinkPinOut, OUTPUT);    // höger blinkers utgång  
digitalWrite(hBlinkPinOut,LOW);  // höger blinkers
}

void loop() {
 //----------  3-Blinkers funktion 
  delay(200); // för att hinna läsa av värderna i serielport
 vBlinkON = digitalRead(vBlink);    // läser av Blinkers
 hBlinkON = digitalRead(hBlink); 
   Serial.print(vBlinkON);Serial.print("   ");Serial.println(hBlinkON);        

   if (vBlinkON == HIGH && hBlinkON == LOW) {   // ...
      digitalWrite(vBlinkPinOut,HIGH);  //aktiverar blinkers
      delay (blinkTimer); //låter blinkersen vara aktiv under 1500 ms => ger ca. 3 blink ?
      digitalWrite(vBlinkPinOut,LOW);
      delay (100);
      }
  if (hBlinkON == HIGH && vBlinkON == LOW) {   // ...
      digitalWrite(hBlinkPinOut,HIGH);  //aktiverar blinkers
      delay (blinkTimer); //låter blinkersen vara aktiv under 1500 ms => ger ca. 3 blink ?
      digitalWrite(hBlinkPinOut,LOW); 
      delay (100);
      }
}        

Inga kommentarer:

Skicka en kommentar