Virtuino istället för RemoteXY

Hittade detta alternativa program till Surfplattan.
Virtuino den har en liten annan uppbyggnad och med den fördelen att man kan använda bilder.

En första design.
Med och utan halvljuset på.
Dom vanliga tempvärdena och
la in dörrindikerings värden som
jag tänkte använda i version 2.
När man lägger i backen visas denna bild med avstånd och larm bild som ska dyka upp när den larmar.

Sen verkar den fungera bättre ihop med SID kommunikationen också.





Sitter med ett problem hur jag ska tolka dörr värdena, nivåerna är
Bagagelucka 4 ,  Höger bakdörr 8, Vänster bakdörr 16, Höger framdörr 32, Vänster framdörr 64
samt Olåst 128, Det blir en massa kombinationer.
T.ex 192 är olåst och vänster framdörr öppen med bagageluckan öppen blir det 196....osv.
Trir jag fixat det med denna lösning: (ny kod är upplagd)
    //------------------------     Checking door status DV10-15
if (DoorStatus-128 >= 0) { virtuino.vDigitalMemoryWrite(10,0); DoorStatus = DoorStatus-128; }  // door 128 = unlocked
           else { virtuino.vDigitalMemoryWrite(10,1); }          // door  = locked
if (DoorStatus-64 >= 0) { virtuino.vDigitalMemoryWrite(11,1); DoorStatus = DoorStatus-64; }  // Driversdoor 64 = open
           else { virtuino.vDigitalMemoryWrite(11,0); }        
if (DoorStatus-32 >= 0) { virtuino.vDigitalMemoryWrite(12,1); DoorStatus = DoorStatus-32; }  // Passangerdoor 32 = open
           else { virtuino.vDigitalMemoryWrite(12,0); }
if (DoorStatus-16 >= 0) { virtuino.vDigitalMemoryWrite(13,1); DoorStatus = DoorStatus-16; }  // LeftBacksdoor 16 = open
           else { virtuino.vDigitalMemoryWrite(13,0); }
if (DoorStatus-8 >= 0) { virtuino.vDigitalMemoryWrite(14,1); DoorStatus = DoorStatus-8; }  // RightBackdoor 8 = open
           else { virtuino.vDigitalMemoryWrite(14,0); }
if (DoorStatus-4 >= 0) { virtuino.vDigitalMemoryWrite(15,1); DoorStatus = DoorStatus-4; }  // Trunk 4 = open
           else { virtuino.vDigitalMemoryWrite(15,0); }

CanBus parametrar till Surfplattan via Blåtand.

Inspirerade av dessa "byggen": Car Dash Tablet och
Canbus-reverse-engineering-with-arduino-and-ios
Skaffade ett Blåtandskort (HC-06) till Canbus kortet för att kunna skicka parametrar till Surfplattan.
Tyvärr är man ingen Android programmerare så denna app RemoteXY får duga.
5 parametrer i den fria versionen så det blev 3 temp, långtext + batteri spänningen.

Man går in på RemoteXY hemsida och skapar sin design som man sedan kopierar in i Arduino
programmet (med lite modifikationer).
https://saab9000vector.blogspot.com/2018/12/remotexy-kod.html
Batterispänningen spänningsdelar jag ner till en analog ingång. (med 33k och ett 68 k motstånd)
Konverterar värdet i programet så att det stämmer hyfsat.

Det negativa är att SID meddelanderna inte funkar 100% försökt avlasta programet lite och
minus grader visas som 255 och under , får väl modifiera lite på koden...

RemoteXY kod.

// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>
// RemoteXY connection settings
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600


// RemoteXY configurate 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,0,0,44,0,80,0,8,13,0,
  67,4,9,11,20,5,134,26,11,67,
  4,38,11,20,5,134,26,11,67,4,
  66,11,20,5,134,26,11,67,4,64,
  44,20,5,134,26,11,129,0,10,22,
  18,6,17,73,110,110,101,45,32,32,
  32,32,32,32,32,32,32,75,121,108,
  97,114,45,32,32,32,32,32,32,85,
  116,101,116,101,109,112,0 };
 
// this structure defines all the variables of your control interface
struct {

    // output variable
  char INtemp[11];  // string UTF8 end zero
  char Coolant[11];  // string UTF8 end zero
  char OUTtemp[11];  // string UTF8 end zero
  char Voltage[11];  // string UTF8 end zero
    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)
//           END RemoteXY include          //
  double temp = 24;

void setup()
{
  RemoteXY_Init (); 
}

void loop()
{
  RemoteXY_Handler ();  
if(currentSek-rXYtime >= 4)   {   //uppdaterar rXY värderna vart 4dje sek.
  //      value, ? , decimals, rXY label   tillagt manuellt
  dtostrf(ITemp, 0, 0, RemoteXY.INtemp);  
  dtostrf(CTemp, 0, 0, RemoteXY.Coolant);
  dtostrf(OTemp, 0, 0, RemoteXY.OUTtemp);
  dtostrf(battVolt, 0, 1, RemoteXY.Voltage);
  rXYtime = currentSek;      }

//----------- batteri voltage
    battVolt = analogRead(battPin);     // 1024 = 5 volt = ca.15 volt
   //battVolt = 967 ;  // test
    battVolt = (5*battVolt)/1024 ;    // konverterar analoga värdet till volt 0-5 volt
    battVolt = ((33+68)/33 *battVolt)*10 ; // kontverterar 5 till 12 volt (analog in)
    battVolt = battVolt/10 ;
}

Styrning av Halvljus automatiken med ljussensorn för inst.panelen.

Tänkte rationalisera bort ljussensorena som styr halvljus automatiken.
Så tar ljussensorvärdet ifrån instrumentpanelen.
Det är 2 8bitars värden men jag använder bara ett,

case 0x410: //-------   Light Dimm Sensor values
                   // (Integer value is between about 1800h(6144 dec) to 2C00h(11264 dec))
value=3 ;CanbusRead(); LSensor0 = Rx;
value=4 ;CanbusRead(); LSensor1 = Rx;  // använder endast Lsensor1 värdet för styrning av halvljuset.

Sedan använder jag ganska grov hystres för att undvika flip-flopande lampor.

  if (LSensor1 <= 5  && lightOn == 0) {Status = 2; request = 1; lightOn = 1; digitalWrite(lightOnOUT,HIGH); }  // Halvljus På 01-05 hystres 
  if (LSensor1 >= 15 && lightOn == 1) {Status = 2; request = 1; lightOn = 0; digitalWrite(lightOnOUT,LOW); }  // Halvljus Av








Testningen går ju lite långsam eftersom det är kolsvart både till och från jobbet.
Och styrningen går via det gamla Arduino kortet tillsvidare. Ändringen i det gamla kortet.

pinMode(headLightPinCan, INPUT);    // halvljus Ingång, från Can-kortet
 //---------------------------- HALVLJUS AUTOMATIK
        headLightCan = digitalRead(headLightPinCan);
       if (headLightCan == 1 && lightOn == 0) {                                                          
                digitalWrite(headlightPin,HIGH);  // tänder halvljuset   
                delay(50); lightOn = 1; 
                headLightTimer = currentSekund ; // Sätter timer tid          
            } //{lightOn = 1;}
       if (headLightCan == 0 && lightOn == 1) {
                digitalWrite(headlightPin,LOW);
                delay(50); lightOn = 0; 
                headLightTimer = currentSekund ; // Sätter timer tid
              }

Grotta ner sig i CANbus med Arduino

Köpt på mig MCP2515 CANbus kort och ett Arduino Pro Micro kort.
Installtion av Arduino kortet hittar man här:
https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/all
och så här kopplar man inkl. 12 volts reg på RAW och GND.















Sen kan man krympa ner den mer än detta men som vanligt tar vi det senare......

Här är koden och tanken är att man filtrerar bort all information man inte vill ha med.
Det är ju mycket babbel på CANbusen.

// demo: CAN-BUS Shield, receive data
#include <mcp_can.h>
//#include <mcp_can_dfs.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
unsigned long OLDmilliSek;
MCP_CAN CAN0(10);                // Set CS to pin 9
#define CAN0_INT 2                  //tillagt

void setup()
{
  Serial.begin(9600);
  //CAN0.begin(MCP_ANY, CAN_33K3BPS, MCP_16MHZ);
  //CAN0.begin(CAN_47K619BPS,2);              // init can bus :CAN_33K3BPS baudrate = 33.3(GMLAN) with 8MHZ change 2 to 1 run with 16mhz oscilator
  //CAN0.begin(CAN_33K3BPS,1);                // CAN0.begin(CAN_47K619BPS,1);   CANbus-I
  CAN0.begin(CAN_500KBPS,1);                // CANBUS-P powertrain
  //pinMode(CAN0_INT, INPUT);                            // Configuring pin for /INT input
  pinMode(2, INPUT);                            // Setting pin 2 for /INT input
  Serial.println("MCP2515 Library Receive CAN BUS Example...");
}

void loop(){
  unsigned long currentmilliSek = millis(); // / 1000 ;  //unsigned long värde i sekunder
    if(digitalRead(CAN0_INT)== LOW)                         // 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 == 0x439 ){ //  290= steeringwheel || rxId == 0x530 om Id = ACC 520 eller 530 0x280 crusies byte 4
        //filtrerar bort 439h - SPA distance
      } else {
      Serial.print("ID: ");
      Serial.print(rxId, HEX);
      Serial.print("  Data: ");
      for(int i = 0; i<len; i++)                // Print each byte of the data
      {
       if(rxBuf[0] < 0x80) {                     // shows changed Status
        if(rxBuf[i] < 0x10)                     // If data byte is less than 0x10, add a leading zero
        {
          Serial.print("0");
        }
        Serial.print(rxBuf[i], HEX);
        Serial.print(" ");
      }                                 // satus change end
      }
      Serial.print("  ");Serial.print(currentmilliSek-OLDmilliSek);Serial.println();
      OLDmilliSek=currentmilliSek;    // tidstämpel
    }                                     // filter end
    }
}


Små irriterande fel....

Fukt och kondens i en av DRL lamporna. (inte bara bilden som är grumlig)
Tillslut så fick jag sprätta i sär den och torka ur den och sedan borra två hål för att
jämna ut fuktskillnaden.
Sen passade jag på att montera en slangklämma för att minska DRL spolningen.


SRS larm en hel dag är inte kul.

Men med Tech2 fick jag fram felkoden och kunde se att
en av rattkuddarna visde för högt ohm-tal.
Så bort med kudden och motionerade kontakterna även den
till kontaktrullen. Sen var det frid och fröjd ett tag.







Smattrande kupefläkt.....tydligen kan löv smita in i fläkten.
Försökte med både trycklufts pistol och dammsugarslang få bort
lövet (from hell). Men lyckade bara tillfälligt flytta det och inte vill jag mecka bort vindrute torkar armmarna mm. för ett löv.
Höjer volymen på stereon tills
den ruttnar bort eller nått.
Blev en tilltäppnigs projekt med skumplast och en kort plast skarv.
som blivit svart målad nu. Nu ska väl inte nya löv smita in.....

9000 nya Framlampor (Depo)

Fick en anmärkning på besiktningen på diffus ljusbild vilket var väntat.
Jag hade försökt fräscha upp reflektorerna med lite silver spray (får försöka med alu.folie nästagång)

Nya lyktor låg och väntade och med lite modifieringar så är dom redo för montering.
Den manuella höjdjusteringen byttes mot orginal motorjusteringen.

Bort med justerpinnen och bort med den manuella justeringen och lyktfästet lirkade
man loss åt sidan.
Stödfästet i botten fick också modifieras lite för att passa. Sågade 2 jack och satte dit skumplast
så att kroken hakar fast ordentligt i lyktan.
 















Sedan fick jag på en lykta tabort en extra isolering
på P-ljus lampan. Fjäder och isolering gjorde att
lampan inte bottnade efter det så passade allt.

Så nu är dom klara för montering. Varde ljus.