SID text Canbus Del 2 +,+

Det har ju blivit vintertid så då måste man fixa SID tiden (med en snabb fix).
case 0x730 : //        ID   Byte 0  Byte 1  Byte 2  Byte 3  Byte 4  Byte 5  Byte 6  Byte 7
              //      730h   -       SEC     MIN     HOUR    DAY     MONTH   ENGCOLD   -
value=3 ;  CanbusRead(); Rx = Rx-1; //  byte 3 Hour  (Rx = Rx-1;) ger vintertid
Convert(); HourA=RxA; HourB=RxB;  // Serial.println("Time Recived! ");


Sedan passade jag på att lägga in en HalkVarning som ploppar upp vid nollgrader eller kallare.
Fungerar i Night Panel läget (man har ju ingen Temp. kontroll då).

Läser av Canbus och konv. värdet:

case 0x7A0:                                   //  Outside temp
value=2 ;CanbusRead(); OTemp0 = Rx;
value=1 ;CanbusRead(); OTemp1 = Rx;
OTemp = (OTemp1 * 256)+OTemp0 ;   // konv. 2 8bit till 16 bit och Decimal
OTemp = OTemp/10-40;  Serial.print("Outside Temp ");Serial.println(OTemp);
Rx=OTemp; Convert(); OTempA=RxA; OTempB=RxB;
break;

Kontrollerar om ute temp är noll eller lägre:
if (OTemp <= 0 && currentSekund >= 60 && Cold == 0) {request = 1; Status=4; Cold=1;      // Outside temp =< 0
                byte sndStat = CAN0.sendMsgBuf(0x430, 0, 8, dataB);delay(30);} // send Beep 430 when Outside temp =< 0
      if (OTemp > 1)  Cold = 0;  // liten hystres: +2 innan halk varning kan återkomma

SID texten:
byte dataD1[8]= {0x02, 0x96, 0x02, 0x48, 0x61, 0x6C, 0x6B, 0x2E};  //  Halk.  
byte dataD2[8]= {0x01, 0x96, 0x02, 0x61, 0x72, 0x6E, 0x56, 0x2D,};  //  Varn-
byte dataD3[8]= {0x00, 0x96, 0x02, OTempB, OTempA,0x20, 0x20, 0x20};  //  Outside temp. values


2017-12
Lite modifieringar så att man kan trycka på CLR knappen när Parkeringshjälpen varnar och om man tryckt på SET-knappen
och vill nolla något. Satt tiden  till 10 sek,

case 0x439:  //-------------------- SPA är aktiv
CLRtime = currentSek ;  // nollar CLR timer = inaktiverar request i 10 sek.
Serial.println("SPA aktiv  ");
break;


case 0x290: //-------------------set eller clr button pressed
  value=3 ;   //// 80 = vol-   && (rxBuf[5] == 0x80)
  CanbusRead();
     if (Rx == 0x40) CLRtime = currentSek ;  // vid SET nollar CLR timer = inaktiverar CLR request i 10 sek.  
     if (Rx == 0x80 && currentSek-CLRtime >= 10 && currentSek >= 40) {request = 1; Status=0;}   // inakriverar clr funktionen under 30 sek.
break;


Rattknappsbelysning v.2

Har ju tryckt in 2 gröna lysdioder på 2,5 volt som strömmatas ifrån pullup motståndet i SID enheten.
Man får dra en extra kabel emellan knappsatserna.
Placeringen på dioden försökte jag få så
centralt placerad som möjligt. Nackdelen är att den lyser igenom lite mellan knapp och ram.

 Försökte få lite bilder på resultatet.















Uppdatering 2018-08: Orginal knapparna fick dubbla ytmonterade dioder i sig. Det är lite knepigt med placeringen så att dom inte kommer ivägen för knapparna när man trycker. Lite epoxylim fixerar dom på plats. Och röd är jord och svart är 5 volt, självklart....och jorden finns tillgänglig på andra sidan så det är bara en extra kabel +5volt som måste dras över dit.







SID text Canbus Del 2

Nu har Canbus kortet fått 3 kopplingar till mitt andra kort som gör att om något förändras
på den så som Halvljus automatiken , AQS sensorn + SID pling när den aktiveras eller Baksätesvärmen så visas det i SIDen.
Tyvärr så har jag inte hittat å,ä,ö har provat en massa Hex värden men Saab verkar inte använt
den utökade ASCII standarden. Hittade en massa pilar och klocksymboler bara.
 


Sedan så tar Canbus kortet och läser av Inne temperaturen och Kylvätske temp.
Man skulle kunna visa något annat , försökt leta efter batterspänningen som jag saknar ifrån 9000.
Presenterar det ihop med tid och datum. (Som jag ställde in med orginal stereon.
behövde bara koppla 12 volt, jord och GMLAN1 för att sedan ställa in tid och datum.
Nästa gång får jag försöka sniffa trafiken.)
Den informationen visas när man trycker på CLR knappen på rattknapparna.


SID text Del 2 Arduino/Canbus mjukvaran

Senaste programvaran finns på Google Driven./2021-06-07 

AQS Arduino program 9-5

Senaste programvaran finns på Google Driven./2021-06-07

AQS (luftkvalite sensor) till 9-5an + ventilationknapparna.

Tillslut så har jag fått till AQS sensorn till ACC enheten. Köpte en beg. och plockade isär
den i molekyler. Sedan när jag skulle prova funktionen på orginal burken lyckades jag
paja lysdioden för recirkulationen :-(  men nu vet jag hur man plockar isär burken.
Här är inkopplingen av CanBus p5+6 kabeln och utgångarna till recirk.motorn p27+28.

 









Placering av AQS sensorn vid friskluft intaget.





 


Samt parallell kopplingen för recirk.knappen med ett relä.




















Sedan blev det lite bling bling (mera Vector) plockade ifrån NG9-3 och med lite modifikation och
med en liten klutt silikonlim så sitter dom på plats.

Tidsvisning på SIDen.

Ett litet ilands problem jag haft sedan jag plockade bort stereon är att jag inte haft någon klocka
i bilen mer än den i surfplattan. Och eftersom att jag snöat in på Canbus så försökte jag mig på detta problem.
Köpte mig ett Canbus shield kort till Arduino UNO kortet för att börja prata med bilen.
När jag nu trycker på CLR (den enda knapp som det inte händer något med när tändningen är på )så
skickas en förfrågan till SID att få skriva till Rad 1 på SIDen och när det är okey så skickas tiden
till SIDen som mjukvaran tidigare läst av ifrån SIDen (lite rundgång men det fungerar).

Problemet som jag har nu är att ändra på klockan i SIDen det ska tydligen gå med 0x720 enligt
det här inlägget.: UKSaab
Sedan har vi denna sida som är rena guldgruvan. I-Bus
Har inte kört med den installerad för långtids test ännu.

Tidsvisning på SIDen Arduino program

Senaste programvaran finns på Google Driven./2021-06-07

"Grillgaller" nu när det är grill säsong.

Har alltid försökt montera aluminiumnät i fronten för att skydda intercoolern mm från stenskott.

Passade på att byta en xenon lampa som lös dåligt blev en 147a. Provade även att
polera plastglasen med Biltemas polersats men är nog bättre att köra med autosol.
Har även monterat Luftkvalite sensorn AQS men det stora bekymret är att modifiera
ACC panelen som verkar inbrotts säker lutar åt att försöka med CANbus styrning....



Lite vår fin bil.

Måste bli lite vårfin också så monterade kromlist i nederkant av dörrarna.
Och Vector fälgarna från förra bilen.
Det blir merochmer en Vector av denna Arc....


















Har ju även täppt till hålet mellan alla plast delar i främre delen av bakre hjulhusen
och redan ser man hur mycket skit som samlat där och som tur ar
inte gått vidare ner i tröskeln.
http://forum.saabturboclub.com/showthread.php/148204-Svetsa-hundben-p%C3%A5-OG9-5

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);
      }
}