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
              }