Send 1Wire data to NMEA2000
This commit is contained in:
parent
bf6b2dd922
commit
404824cc22
|
@ -83,6 +83,7 @@ void sensorTask(void *param){
|
||||||
RTC_DS1388 ds1388; // RTC DS1388
|
RTC_DS1388 ds1388; // RTC DS1388
|
||||||
OneWire oneWire(OBP_1WIRE); // 1Wire bus
|
OneWire oneWire(OBP_1WIRE); // 1Wire bus
|
||||||
DallasTemperature ds18b20(&oneWire);// Sensors for DS18B20
|
DallasTemperature ds18b20(&oneWire);// Sensors for DS18B20
|
||||||
|
DeviceAddress tempDeviceAddress;// Table for DS18B20 device addresses
|
||||||
|
|
||||||
// Init sensor stuff
|
// Init sensor stuff
|
||||||
bool oneWire_ready = false; // 1Wire initialized and ready to use
|
bool oneWire_ready = false; // 1Wire initialized and ready to use
|
||||||
|
@ -138,13 +139,13 @@ void sensorTask(void *param){
|
||||||
api->getLogger()->logDebug(GwLog::ERROR,"Modul DS18B20 not found, check wiring");
|
api->getLogger()->logDebug(GwLog::ERROR,"Modul DS18B20 not found, check wiring");
|
||||||
}
|
}
|
||||||
else{
|
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++){
|
for(int i=0;i<numberOfDevices; i++){
|
||||||
// Search the wire for address
|
// Search the wire for address
|
||||||
if(ds18b20.getAddress(tempDeviceAddress, i)){
|
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 {
|
} 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;
|
oneWire_ready = true;
|
||||||
|
@ -210,15 +211,6 @@ void sensorTask(void *param){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
// Settings for environment sensors on I2C bus
|
||||||
String envSensors=api->getConfig()->getConfigItem(api->getConfig()->useEnvSensor,true)->asString();
|
String envSensors=api->getConfig()->getConfigItem(api->getConfig()->useEnvSensor,true)->asString();
|
||||||
|
|
||||||
|
@ -381,6 +373,7 @@ void sensorTask(void *param){
|
||||||
long starttime10 = millis(); // Generator power sensor update all 1s
|
long starttime10 = millis(); // Generator power sensor update all 1s
|
||||||
long starttime11 = millis(); // Copy GPS data to RTC all 5min
|
long starttime11 = millis(); // Copy GPS data to RTC all 5min
|
||||||
long starttime12 = millis(); // Get RTC data all 500ms
|
long starttime12 = millis(); // Get RTC data all 500ms
|
||||||
|
long starttime13 = millis(); // Get 1Wire sensor data all 1s
|
||||||
|
|
||||||
tN2kMsg N2kMsg;
|
tN2kMsg N2kMsg;
|
||||||
shared->setSensorData(sensors); //set initially read values
|
shared->setSensorData(sensors); //set initially read values
|
||||||
|
@ -410,6 +403,7 @@ void sensorTask(void *param){
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If RTC DS1388 ready, then copy GPS data to RTC all 5min
|
// If RTC DS1388 ready, then copy GPS data to RTC all 5min
|
||||||
if(millis() > starttime11 + 5*60*1000){
|
if(millis() > starttime11 + 5*60*1000){
|
||||||
starttime11 = millis();
|
starttime11 = millis();
|
||||||
|
@ -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 GPS not ready or installed then send RTC time on bus all 500ms
|
||||||
if(millis() > starttime12 + 500){
|
if(millis() > starttime12 + 500){
|
||||||
starttime12 = millis();
|
starttime12 = millis();
|
||||||
|
|
|
@ -282,7 +282,7 @@
|
||||||
"label": "GPS Sensor",
|
"label": "GPS Sensor",
|
||||||
"type": "list",
|
"type": "list",
|
||||||
"default": "ATGM336H",
|
"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": [
|
"list": [
|
||||||
"off",
|
"off",
|
||||||
"NEO-6M",
|
"NEO-6M",
|
||||||
|
@ -299,7 +299,7 @@
|
||||||
"label": "Env. Sensor",
|
"label": "Env. Sensor",
|
||||||
"type": "list",
|
"type": "list",
|
||||||
"default": "BMP280",
|
"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": [
|
"list": [
|
||||||
"off",
|
"off",
|
||||||
"BME280",
|
"BME280",
|
||||||
|
@ -518,7 +518,7 @@
|
||||||
"label": "Temp. Sensor",
|
"label": "Temp. Sensor",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": "off",
|
"default": "off",
|
||||||
"description": "Use external 1Wire device [off|DS18B20]",
|
"description": "Use max. 8 external 1Wire devices [off|DS18B20]",
|
||||||
"list": [
|
"list": [
|
||||||
"off",
|
"off",
|
||||||
"DS18B20"
|
"DS18B20"
|
||||||
|
|
Loading…
Reference in New Issue