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

Rattknappsbelysning

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.

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

// Skickar fråga till SID att skriva på 2 rader. När man trycker på CLR knappen på ratten.
// Hämtar SID tid och datum, kylvatten temp och inne temp. konverterar till HEX och delar upp det per byte.
// Och skickar det till SIDen. 3 ingångar från det andra UNO kortet för att indikera för ändringar
// för AQS, Halvljus och Baksätes värmen.

#include <mcp_can.h>
#include <SPI.h>
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];
int value=0 ; byte Rx=0; byte RxA = 0; byte RxB = 0;byte RxC = 0;byte RxP = 0; 
       
byte Hour = 0;  byte HourA = 0;  byte HourB = 0; byte MinA = 0;  byte MinB = 0;
byte Day = 0; byte Month = 0; byte DayA = 0; byte MonthA = 0; byte DayB = 0; byte MonthB = 0;
byte CTemp = 0; byte CTempA = 0; byte CTempB = 0;
byte ITemp = 0; byte ITempA = 0; byte ITempB = 0;       
//---------------AQS-sensorn
int airSensorIN = 6;    //ok 6,7,8,9,12 ingång AQS ej 10, 11, 13
int AQSstatus = 0;
int Smell = 0;           // 0=  low 1 = High 2 = normal ,25, värde för dålig luft normal 15-17
int lightOn = 0; 
int bHeat = 0;
int Status = 0;  // display status
#define CAN0_INT 2  //tillagt
byte dataA[8] = {0x11, 0x00, 0x03, 0x19, 0x00, 0x00, 0x00, 0x00};  //0x348 SID audio text request from "IHU"
              //       rad    *     19                              //*FF=inget meddelande,prio.nivå  b3(19=IHU 12=SPA 23=ACC)
//[2]: request 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
//----AQS
pinMode(airSensorIN, INPUT);    // AQS ingång INPUT_PULLUP
}
void loop()
{               //ordning från  rad  ascII-----------------------
byte data1[8] = {0x45, 0x96, 0x01, HourB, HourA, 0x3A, MinB, MinA};  //  1 message 1    01 = rad 1 alt. 81= uppdaterad rad 1
byte data2[8] = {0x04, 0x96, 0x01, 0x20, 0x20, DayB, DayA, 0x2F};  //  day/  "SAAB" S=53 A=41 B=42 20=_
byte data3[8] = {0x03, 0x96, 0x01, MonthB, MonthA, 0x20, 0x20, 0x20};  //Month "SAAB" S=53 A=41 B=42 3 SISTA BYTE SYNS EJ PÅ sid

byte dataA1[8]= {0x02, 0x96, 0x02, 0x41, 0x51, 0x53, 0x20, 0x52};  //  AQS_R 
byte dataA2[8]= {0x01, 0x96, 0x02, 0x63, 0x69, 0x72, 0x6B, 0x20};  //  cirk_ 

byte dataB1[8]= {0x02, 0x96, 0x02, 0x48, 0x61, 0x6C, 0x76, 0x6C};  //  Halvl
byte dataB2[8]= {0x01, 0x96, 0x02, 0x6A, 0x75, 0x73, 0x20, 0x20};  //  jus__

byte dataC1[8]= {0x02, 0x96, 0x02, 0x42, 0x61, 0x6B, 0x73, 0x2E};  //  Baks.  
byte dataC2[8]= {0x01, 0x96, 0x02, 0x76, 0x61, 0x72, 0x6D, 0x20};  //  varm_   D1=å ?

byte dataL[8] = {0x00, 0x96, 0x02, 0x41, 0x56, 0x00, 0x00, 0x00};  //328 Av  SID text
byte dataH[8] = {0x00, 0x96, 0x02, 0x50, 0xE1, 0x00, 0x00, 0x00};  //328 På SID text   E1=Å D7=Ö (D1=Ä)

byte data4[8] = {0x02, 0x96, 0x02, 0x49, 0x6E, ITemp, ITempB, ITempA};  //   In CTemp+- message 0 "SAAB" S=53 A=41 B=42 20=_
byte data5[8] = {0x01, 0x96, 0x02, 0x20, 0x4B, 0x79, 0x6C, CTemp};  //  Kyl 328 SID audio text   0 message 0 "SAAB" S=53 A=41 B=42 3 SISTA BYTE SYNS EJ PÅ sid
byte data6[8] = {0x00, 0x96, 0x02, CTempB, CTempA, 0x20, 0x20};  //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-------------------
   unsigned long currentSekund = millis()/ 1000 ;  //unsigned long värde i sekunder
//----------Kontrollerar vad digi-ingångarna för AQS,bHeat och Halvljus
      AQSstatus = digitalRead(airSensorIN);
      if (AQSstatus == 1 && Smell == 0) {request = 1; Smell = 1; Status=1;  // AQS hög  Status = 1;  ingång 6
     
              sndStat = CAN0.sendMsgBuf(0x430, 0, 8, dataB);delay(30);}     // send Beep 430 when AQS go High
     
if (AQSstatus == 0 && Smell == 1) {request = 1; Smell = 0; Status=1;}  // AQS låg  Status = 11;
      if (digitalRead(7) == 1 && lightOn == 0) {Status = 2; request = 1; lightOn = 1;}  // Halvljus På ingång 7
      if (digitalRead(7) == 0 && lightOn == 1) {Status = 2; request = 1;lightOn = 0;}  // Halvljus Av
      if (digitalRead(8) == 1 && bHeat == 0)   {Status = 3; request = 1; bHeat = 1;}  // BaksätesVärme På ingång 8
      if (digitalRead(8) == 0 && bHeat == 1)   {Status = 3; request = 1; bHeat = 0;}  // BaksätesVärme Av
     
            // Serial.print("\t");                // print a tab character   
             
//------ 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
     // 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; i<len; i++)                // Print each byte of the data
       {
       if ((rxBuf[0] == 0x00) && (rxBuf[1] == 0x19)) {    //rad 0=1+2 ledig 0x19 IHU får ok 0x12 SPA
//--------------skickar SID texter
   byte sndStat = CAN0.sendMsgBuf(0x328, 0, 8, data1);delay(30);      //0x328 SID audio text skickas //0x357 SPA
        sndStat = CAN0.sendMsgBuf(0x328, 0, 8, data2);delay(30);      //0x328 SID audio text skickas
        sndStat = CAN0.sendMsgBuf(0x328, 0, 8, data3);delay(30);      //0x328 SID audio text skickas
                //sndStat = CAN0.sendMsgBuf(0x328, 0, 8, data3);delay(30);      //0x328 SID audio text skickas
      if (Smell == 0&&Status==1) {sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataA1);delay(30);
                                  sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataA2);delay(30);
                                  sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataL);delay(30);  }    //0x328 SID audio text skickas
      if (Smell == 1&&Status==1) {sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataA1);delay(30);
                                  sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataA2);delay(30);
                                  sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataH);delay(30);
}      //0x328 SID audio text skickas
     if (lightOn == 0&&Status==2){sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataB1);delay(30);   
                                 sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataB2);delay(30);
                                 sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataL);delay(30);  }      // Halvljus AV
    if (lightOn == 1&&Status==2){sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataB1);delay(30);   
                                 sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataB2);delay(30);
                                 sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataH);delay(30);  }      // Halvljus På
      if (bHeat == 0&&Status==3){sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataC1);delay(30);
                                 sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataC2);delay(30);   // BaksätesVärme   
                                 sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataL);delay(30); }     //0x328 SID audio text skickas
      if (bHeat == 1&&Status==3){sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataC1);delay(30);
                                 sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataC2);delay(30);   // BaksätesVärme   
                                 sndStat = CAN0.sendMsgBuf(0x328, 0, 8, dataH);delay(30); }     //0x328 SID audio text skickas

      if (Status==0)     {sndStat = CAN0.sendMsgBuf(0x328, 0, 8, data4);delay(30);      //0x328 SID audio text skickas
                          sndStat = CAN0.sendMsgBuf(0x328, 0, 8, data5);delay(30);      //0x328 SID audio text skickas
                          sndStat = CAN0.sendMsgBuf(0x328, 0, 8, data6);delay(30);      //0x328 SID audio text skickas
          }
          request = 0;  // message sent new requste needs
          Serial.println("Message Sent Successfully!");Serial.print(request);
          delay(850);  // 1 sek mellan medellandet skickas (alt.1000-3*34(102)=>898ms)    
        } } } } 
///-----------läser av CAnbusen
           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       
switch (rxId) {
case 0x290: //clr button pressed
value=3 ;   //// 80 = vol-   && (rxBuf[5] == 0x80)
CanbusRead();
   if (Rx == 0x80) {request = 1; Status=0;}   // åiergå till normal status


break; 
case 0x5C0: // ECU coolant Temp 5C0h   -   COOLANT   PRES1   PRES0
value=1 ;   // vilken byte som ska läsas av
CanbusRead();
CTemp=Rx;
    Rx = CTemp-40 ;  //0x28=40dec 40 ;
//   Serial.print("Coolant Temp Recived Successfully! ");Serial.println(Rx);
Convert();
CTempA=RxA; CTempB=RxB; CTemp=RxP;   Serial.print(RxA);Serial.println(RxB);
break;
case 0x520 : //-------Reciving ACC Inside Temp 520h  -   ACC   -   -   -   TEMP
  value=5 ;   // vilken byte som ska läsas av
CanbusRead();//  byte 5
  ITemp=Rx;
   Rx = ITemp-40 ;  //28=40dec
//   Serial.print("Inside Temp Recived Successfully! ");Serial.println(Rx);
Convert();       
ITempA = RxA; ITempB = RxB; ITemp=RxP;        Serial.print(RxA);Serial.println(RxB);
break;
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();//  byte 3 Hour
Convert(); HourA=RxA; HourB=RxB;  // Serial.println("Time Recived Successfully!");
value=2 ;  CanbusRead();//  byte 2 Min
Convert(); MinA=RxA; MinB=RxB;
value=5 ;  CanbusRead();//  byte 5 Month
Convert(); MonthA=RxA; MonthB=RxB;
value=4 ;  CanbusRead();//  byte 4 Day
Convert(); DayA=RxA; DayB=RxB;
// Serial.print(HourA); Serial.print(HourB);Serial.print(" : ");Serial.print(MinA);Serial.println(MinB);   
break;
}     } }
 void CanbusRead(){
        for(int i = 0; i<len; i++)   {              // Print each byte of the data
            Rx=(rxBuf[value]);         // läser 1  byte som är Tempen
       }    }
void Convert(){   //---------Convert and splitt value and with prefix +/-  C-A-B     
  if (Rx >= 0 ){RxP = 0x20;} else {RxP = 0x2D; Rx=-Rx;} // 2D Minus tecken 2B Plus tecken
            //--------hundratal
      if (Rx<900 && Rx >= 800) {RxC=0x38; Rx=Rx-800;} if (Rx >= 900)           {RxC=0x39; Rx=Rx-900;}
      if (Rx<700 && Rx >= 600) {RxC=0x36; Rx=Rx-600;} if (Rx<800 && Rx >= 700) {RxC=0x37; Rx=Rx-700;}
      if (Rx<500 && Rx >= 400) {RxC=0x34; Rx=Rx-400;} if (Rx<600 && Rx >= 500) {RxC=0x35; Rx=Rx-500;}
      if (Rx<300 && Rx >= 200) {RxC=0x32; Rx=Rx-200;} if (Rx<400 && Rx >= 300) {RxC=0x33; Rx=Rx-300;}     
      if (Rx<100)              {RxC=0x30; Rx=Rx;}     if (Rx<200 && Rx >= 100) {RxC=0x31; Rx=Rx-100;} 
      //--------tiotal
if (Rx<90 && Rx >= 80) {RxB=0x38; RxA=Rx-80;} if (Rx >= 90)          {RxB=0x39; RxA=Rx-90;}
      if (Rx<70 && Rx >= 60) {RxB=0x36; RxA=Rx-60;} if (Rx<80 && Rx >= 70) {RxB=0x37; RxA=Rx-70;}
      if (Rx<50 && Rx >= 40) {RxB=0x34; RxA=Rx-40;} if (Rx<60 && Rx >= 50) {RxB=0x35; RxA=Rx-50;}
      if (Rx<30 && Rx >= 20) {RxB=0x32; RxA=Rx-20;} if (Rx<40 && Rx >= 30) {RxB=0x33; RxA=Rx-30;}     
      if (Rx<10)             {RxB=0x30; RxA=Rx;}    if (Rx<20 && Rx >= 10) {RxB=0x31; RxA=Rx-10;} 
        //-----ental
        if (RxA==0)RxA=0x30;if (RxA==1)RxA=0x31;if (RxA==2)RxA=0x32;if (RxA==3)RxA=0x33;if (RxA==4)RxA=0x34;
        if (RxA==5)RxA=0x35;if (RxA==6)RxA=0x36;if (RxA==7)RxA=0x37;if (RxA==8)RxA=0x38;if (RxA==9)RxA=0x39;
             }
/*********************************************************************************************************
*********************************************************************************************************/

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.

AQS Arduino program 9-5

//---------------AQS-sensorn
int airSensorPin = A5;    // sensor för luftgivaren grön/gul/röd analog ingången
int recirkrelayPin = 5;      //aktiverar återcirkulation
int commonPin = 6;      // common för relät
int Smell = 0;           // aktiverad eller inte aktiv. "Smell" //25, värde för dålig luft normal 15-17
long AQStimer = 0; // AQS timer för calibrering
long AQSdelay = 0; // minimitid för AQS
int AQSreadA = 1000; int AQSreadB = 1000; int AQScalib = 1000; int AQSreading = 0; // 60 gör att AQS är inaktiv första minuten
int Rcirk = 0 ; int RcirkIN = 10 ; int FreshIN = 9 ; int RcirkCom = 8 ;   // ingång Rcirk aktiv eller Fresh aktiv
void setup() {
  Serial.begin(9600);
//---------------AQS-sensorn int Rcirk = 0 ; RcirkIN = 9 ; FreshIN = 10 ; RcirkCom = 8 ;
pinMode(recirkrelayPin, OUTPUT);    // recirkulations utgång, relä
digitalWrite(recirkrelayPin,LOW);    //reley utgång låg
pinMode(commonPin, OUTPUT);    // jord till relä utgången
digitalWrite(commonPin,LOW); 
pinMode(RcirkIN, INPUT);    // jord till Rcirk ingången
pinMode(FreshIN, INPUT);    // jord till Rcirk ingången
pinMode(RcirkCom, OUTPUT); digitalWrite(RcirkCom,LOW);   // jord till Rcirk ingången
}
void loop() {
   //delay(500); // för att hinna läsa av värderna på serieporten 
     unsigned long currentSekund = millis()/ 1000 ;  //unsigned long värde i sekunder
   // ---------------- AIR sensor AQS  -kontroll av AQS nivåerna. --------------------  
       if (digitalRead(RcirkIN) == 1) {Rcirk = 1; AQSdelay = currentSekund ; }  // läser av recirk motor signalen
       if (digitalRead(FreshIN) == 1) Rcirk = 0;                                // motorn i friskluftsläge
        if (currentSekund-AQStimer == 30 && Smell == 0)  {  // kalib vid 30 sek
           AQSreadA = analogRead(airSensorPin);  // första kalib.värdet
          }
        if (currentSekund-AQStimer == 30 && Smell == 0)  {  // kalib vid 30 sek
           AQSreadA = analogRead(airSensorPin);  // första kalib.värdet
          }
        if (currentSekund-AQStimer >= 60 && Smell == 0)  {  // kalib vid 60 sek
           AQSreadB = analogRead(airSensorPin);  // andra kalib.värdet
           AQStimer = currentSekund ; // nollar timer tid          
          }
        if (AQSreadB = AQSreadA)    {  // stabila, båda värdena lika => kalibrering
          AQScalib = (AQSreadA+AQSreadB)/2 ;
           }
       int AQSreading = analogRead(airSensorPin);     // läser av AQS sensorn kontinueligt
            // ------------ 3 värdet indikerar dålig luft, 180 = 3min fördröjning & Rcirk ej är aktiv
        if (currentSekund-AQSdelay >= 180 && AQSreading > AQScalib+3 && Smell == 0 && Rcirk == 0 ){ 
                Smell = 1 ; AQSdelay = currentSekund ; // nollar timer tid
                digitalWrite(recirkrelayPin,HIGH);      // aktiverar återcirkulation
                delay (200);
                digitalWrite(recirkrelayPin,LOW);                    }
           // --------AQS går tillbaks till friskluft, minimum 15 sek AQS aktiverad och Tcirk motorn står i recirk.läge
        if (currentSekund-AQSdelay >= 15 && AQSreading <= AQScalib+3 && Smell == 1 && Rcirk == 1 )  {
            Smell = 0 ; AQSdelay = currentSekund ; // nollar timer tid // 1= hystres 3 aktiverar AQS
                digitalWrite(recirkrelayPin,HIGH);      // aktiverar återcirkulation
                delay (200);
                digitalWrite(recirkrelayPin,LOW);        }   // -----------inaktiverar AQS efter 3 min (180 sek)
        if (currentSekund-AQSdelay >= 180 && Smell == 1 || currentSekund-AQSdelay >= 180 && Rcirk == 1 )  { 
                Smell = 0 ; AQSdelay = currentSekund ; // nollar timer tid // 1= hystres 3 aktiverar AQS
                digitalWrite(recirkrelayPin,HIGH);      // aktiverar återcirkulation
                delay (200);
                digitalWrite(recirkrelayPin,LOW);     }
}

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.