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 ;
}
#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
}
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
}
Prenumerera på:
Inlägg (Atom)