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

// Skickar fråga till SID att skriva på rad 1. När man trycker på CLR knappen på ratten.
// Hämtar SID tiden konverterar till HEX och delar upp det per byte.
// Och skickar det till SIDen.

#include
#include
long requestTime =0 ;
int request = 0 ;
MCP_CAN CAN0(10); // Set CS to pin 10
//-----recive
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
byte Hour = 0; byte Min = 0; byte HourA = 0; byte MinA = 0; byte HourB = 0; byte MinB = 0;

#define CAN0_INT 2 //tillagt
byte dataA[8] = {0x11, 0x01, 0x03, 0x19, 0x00, 0x00, 0x00, 0x00}; //0x348 SID audio text requestTime from IHU
// rad * 19 //*FF=inget meddelande,prio.nivå 3(19=IHU 12=SPA 23=ACC)
//[2]: requestTime type: 1 = Engineering test; 2 = Emergency; 3 = Driver action; 4 = ECU action; 5 = Static text; 0xFF = We don't want to write on SID
//byte dataB[8] = {0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // SID beep just for test

void setup()
{
Serial.begin(9600);
if(CAN0.begin(CAN_47K619BPS,1) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!");
else Serial.println("Error Initializing MCP2515...");
pinMode(2, INPUT); // Setting pin 2 for /INT input
}
void loop()
{ //ordning från rad ascII-----------------------
byte data1[8] = {0x42, 0x96, 0x01, 0x54, 0x69, 0x6D, 0x65, 0x20}; //328 SID audio text 1 message 1 01 = rad 1 alt. 81= uppdaterad rad 1
byte data2[8] = {0x01, 0x96, 0x01, HourA, HourB, 0x3A, MinA, MinB}; //328 SID audio text 0 message 0 "SAAB" S=53 A=41 B=42 20=_
byte data3[8] = {0x00, 0x96, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}; //328 SID audio text 0 message 0 "SAAB" S=53 A=41 B=42 3 SISTA BYTE SYNS EJ PÅ sid
//order SID row ASCII-------------------
//------ send data: ID = 0x100, Standard CAN Frame, Data length = 8 bytes, 'data' = array of data bytes to send
if (request == 1) { // if request is active
byte sndStat = CAN0.sendMsgBuf(0x348, 0, 8, dataA);delay(10); //0x348 SID audio text requestTime from IHU
// requestTime = currentSekund ; // nollar timer tid //0x337 fråga från SPA
// Serial.println("Request Sent Successfully!");
}
// -----receive SID okey
if(digitalRead(CAN0_INT)== LOW && request == 1) { // If pin 2 is low, read receive buffer
CAN0.readMsgBuf(&len, rxBuf); // Read data: len = data length, buf = data byte(s)
rxId = CAN0.getCanId(); // Get message ID
if(rxId == 0x368 ){ // får OK från SID att skicka
for(int i = 0; i898ms)
} } } }
if(digitalRead(CAN0_INT)== LOW && request == 0) { // read clock and CLR button If pin 2 is low, read receive buffer
CAN0.readMsgBuf(&len, rxBuf); // Read data: len = data length, buf = data byte(s)
rxId = CAN0.getCanId(); // Get message ID
//------------Reciving CLR button pressed
if(rxId == 0x290 ){ // CLR button is pressed
for(int i = 0; i898ms)
} } }
//--------------Reciving Time
// ID Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7
// 730h - SEC MIN HOUR DAY MONTH ENGCOLD -
if(rxId == 0x730 ){ // || rxId == 0x730 Klockan Id = 720 RDS clock
Serial.println("Time Recived Successfully!");
for(int i = 0; i=20) {HourA=0x32; HourB=Hour-20;}
if (Hour<20 hour="">= 10) {HourA=0x31; HourB=Hour-10;}
if (Hour<10 and="" characters="" convert="" hex="" hourb="Hour;}" if="" in="" into="" min="" oura="0x30;" ourb="=9)HourB=0x39;" splitt="" to="" two="">=50) {MinA=0x35; MinB=Min-50;}
if (Min<50 min="">= 40) {MinA=0x34; MinB=Min-40;}
if (Min<40 min="">= 30) {MinA=0x33; MinB=Min-30;}
if (Min<30 min="">= 20) {MinA=0x32; MinB=Min-20;}
if (Min<20 min="">= 10) {MinA=0x31; MinB=Min-10;}
if (Min<10 ina="0x30;" minb="Min;}<br"> if (MinB==0)MinB=0x30;if (MinB==1)MinB=0x31;if (MinB==2)MinB=0x32;if (MinB==3)MinB=0x33;if (MinB==4)MinB=0x34;
if (MinB==5)MinB=0x35;if (MinB==6)MinB=0x36;if (MinB==7)MinB=0x37;if (MinB==8)MinB=0x38;if (MinB==9)MinB=0x39;
Serial.print(HourA); Serial.print(HourB);Serial.print(" : ");Serial.print(MinA);Serial.println(MinB);
}}
}

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

Saab 9-5 ARC -06 Halvljus automatik.

Köpte ett par DRL lampor billigt på Tradera.
Nyttja dom kåporna som satt där dimljusen ska sitta och gjorde hål för DRLerna.
Modifierade kabeln som används för att göra "taxi" koppling den blå/vita (rosa för äldre modeller).
till att gå till ett relä som aktivterat, kopplar ihop kabeln och då tänder xenon halvljusen vid mörker.
Annars går signalen från ljusomkopplaren till stift 7 (BN/GY kabel) på den gröna dimljuskontakten som då
aktiverar dimljus reläet som jag fick montera i reläboxen i motorutrymmet.
(ändra 50k till 5-10k för stabilare relä styrning)
Allt för att slippa kabeldragning genom torpedväggen. Från dimljusreläet så kopplade jag in DRL lamporna.
Och så här ser DRLerna ut aktiva.
Och dom 2 ljussensorerna för styrningen gömde jag där mitthögtalaren satt.
Får se om jag hittar någon ny dold placering på dom...
Fick lite problem med automatiken när jag började använda den efter vinter.
Den började leva sitt eget liv och sedan tröttnad den helt.
Konstaterade att strömmen inte gick igenom ljusomkopplaren så det var bara att börja plocka isär den. Rengjorde kontakt ytorna på släpskorna och banorna och flyttade tillbaks kontakt fettet.
När jag ändå hade den isär så monterade jag en lysdiod för att bättre hålla koll på när halvljuset är aktiverat.

Saab 9-5 ARC -06 Baksätesvärme

Köpte in en sätesvärmare ifrån Biltema istället för att göra en själv som jag gjorde till 9000 Vector.
http://www.biltema.se/sv/Bil---MC/Bil-tillbehor/Styling/Bilkladsel/Varmesits-2000033358/
Delade den i 2 delar (finns en skarv i mitten) och som passade perfekt i sittdynorna.
Kontakt under sätet.













Kompletterad den delade sätesvärmaren med en termistor som extra övervak./kontroll.
Sedan måste något vara orginal så jag kostade på mig en orginal Heatknapp.Det enda orginal i detta bygget.
http://webshop.saabparts.com/900-9-3/esystem-9003/stolsvarme-reglage3
(fast man hittar den inte under 9-5 när man letar...)
Men den skarpögde ser att den inte är monterad på orginalplatsen.
Kopplade in reostat belysning och ström ifrån cigg.uttaget + reläet för baksätesvärmen.
(ändra 50k till 5-10k för stabilare relä styrning)
 











Arduino kortet placerade jag framme vid ACC panelen (de ska kopplas in mer på det kortet)
Och den värmer i 30 min vid aktivering och avbryter när den blivit varm och värmer om den kallnar
under dom 30min. Som det nu är kopplat så slocknar indikerings lampan när den temp.reglerar men
men det kan man stå ut med.....