Skip to content

Commit

Permalink
Send 1Wire data to NMEA2000
Browse files Browse the repository at this point in the history
  • Loading branch information
norbert-walter committed Apr 22, 2024
1 parent bf6b2dd commit 404824c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 15 deletions.
37 changes: 25 additions & 12 deletions lib/obp60task/OBPSensorTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ void sensorTask(void *param){
RTC_DS1388 ds1388; // RTC DS1388
OneWire oneWire(OBP_1WIRE); // 1Wire bus
DallasTemperature ds18b20(&oneWire);// Sensors for DS18B20
DeviceAddress tempDeviceAddress;// Table for DS18B20 device addresses

// Init sensor stuff
bool oneWire_ready = false; // 1Wire initialized and ready to use
Expand Down Expand Up @@ -138,13 +139,13 @@ void sensorTask(void *param){
api->getLogger()->logDebug(GwLog::ERROR,"Modul DS18B20 not found, check wiring");
}
else{
api->getLogger()->logDebug(GwLog::LOG,"Modul DS18B20 found at:");
api->getLogger()->logDebug(GwLog::LOG,"1Wire modul found at:");
for(int i=0;i<numberOfDevices; i++){
// Search the wire for address
if(ds18b20.getAddress(tempDeviceAddress, i)){
api->getLogger()->logDebug(GwLog::LOG,"Device-%01d: %10d", i, tempDeviceAddress);
api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%01d: %12d", i, tempDeviceAddress[i]);
} else {
api->getLogger()->logDebug(GwLog::LOG,"Device-%01d: Is ghost with errors", i);
api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%01d: Sensor with errors, check wiring!", i);
}
}
oneWire_ready = true;
Expand Down Expand Up @@ -209,15 +210,6 @@ void sensorTask(void *param){
GPS_ready = true;
}
}

// Settings for temperature sensors
String tempSensor = api->getConfig()->getConfigItem(api->getConfig()->useTempSensor,true)->asString();
if(String(tempSensor) == "DS18B20"){
api->getLogger()->logDebug(GwLog::LOG,"1Wire Mode is On");
}
else{
api->getLogger()->logDebug(GwLog::LOG,"1Wire Mode is Off");
}

// Settings for environment sensors on I2C bus
String envSensors=api->getConfig()->getConfigItem(api->getConfig()->useEnvSensor,true)->asString();
Expand Down Expand Up @@ -381,6 +373,7 @@ void sensorTask(void *param){
long starttime10 = millis(); // Generator power sensor update all 1s
long starttime11 = millis(); // Copy GPS data to RTC all 5min
long starttime12 = millis(); // Get RTC data all 500ms
long starttime13 = millis(); // Get 1Wire sensor data all 1s

tN2kMsg N2kMsg;
shared->setSensorData(sensors); //set initially read values
Expand Down Expand Up @@ -410,6 +403,7 @@ void sensorTask(void *param){
}

}

// If RTC DS1388 ready, then copy GPS data to RTC all 5min
if(millis() > starttime11 + 5*60*1000){
starttime11 = millis();
Expand All @@ -427,6 +421,25 @@ void sensorTask(void *param){
}
}

// Send 1Wire data for all temperature sensors all 1s
if(millis() > starttime13 + 1000 && String(oneWireOn) == "DS18B20" && oneWire_ready == true){
starttime13 = millis();
float tempC;
ds18b20.requestTemperatures(); // Collect all temperature values
for(int i=0;i<numberOfDevices; i++){
if(ds18b20.getAddress(tempDeviceAddress, i)){
// Read temperature value in Celsius
tempC = ds18b20.getTempC(tempDeviceAddress);
}
// Send to NMEA200 bus for each sensor with instance number
if(!isnan(tempC)){
SetN2kPGN130316(N2kMsg, 0, i, N2kts_OutsideTemperature, CToKelvin(tempC), N2kDoubleNA);
api->sendN2kMessage(N2kMsg);
api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%1d Temp: %.1f",i,tempC);
}
}
}

// If GPS not ready or installed then send RTC time on bus all 500ms
if(millis() > starttime12 + 500){
starttime12 = millis();
Expand Down
6 changes: 3 additions & 3 deletions lib/obp60task/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@
"label": "GPS Sensor",
"type": "list",
"default": "ATGM336H",
"description": "Use internal GPS module type [off|NEO-6M|NEO-M8N]",
"description": "Use internal GPS module type [off|NEO-6M|NEO-M8N|ATGM336H]",
"list": [
"off",
"NEO-6M",
Expand All @@ -299,7 +299,7 @@
"label": "Env. Sensor",
"type": "list",
"default": "BMP280",
"description": "Use internal or external environment sensor via I2C bus [off|BME280|BMP280|SHT21]",
"description": "Use internal or external environment sensor via I2C bus [off|BME280|BMP280|BMP180|BMP085|HTU21|SHT21]",
"list": [
"off",
"BME280",
Expand Down Expand Up @@ -518,7 +518,7 @@
"label": "Temp. Sensor",
"type": "boolean",
"default": "off",
"description": "Use external 1Wire device [off|DS18B20]",
"description": "Use max. 8 external 1Wire devices [off|DS18B20]",
"list": [
"off",
"DS18B20"
Expand Down

0 comments on commit 404824c

Please sign in to comment.