Arduino ds18b20 Temperature Sensor , Fastest reading sensors in a single loop, Sketch Code !
#include <OneWire.h> #define PIN_DS_SENSOR_TEMPERATURE 5 // senzorii de temperatura #define ledPin 13 OneWire ds(PIN_DS_SENSOR_TEMPERATURE); // ******************* uint8_t tHeatingBoiler[8] = {0X28, 0X05, 0XF6, 0XCD, 0X04, 0X00, 0X00, 0XF5}; uint8_t tSensorHeatWater[8] = {0x28, 0x5A, 0xD9, 0x65, 0x05, 0x00, 0x00, 0x76}; uint8_t* tSensorList[2] = {tHeatingBoiler, tSensorHeatWater}; float T_HeatingBoiler=0; float T_HeatingHeatWater=0; float* tSensorValue[2] ={&T_HeatingBoiler,&T_HeatingHeatWater} ; boolean SensorStat_HeatingBoiler=false; boolean SensorStat_HeatingHeatWater=false; boolean* tSensorStat[2] ={&SensorStat_HeatingBoiler,&SensorStat_HeatingHeatWater} ; // ******************* void setup() { Serial.begin(9600); } void loop() { DS_FastInit(); delay(550); DS_FastReadTemp(); Serial.println((String)T_HeatingBoiler+" | "+(String)T_HeatingHeatWater); Serial.println("================="); } void DS_FastInit() { byte ns = sizeof(tSensorList); for (int si=0; si<ns; si++) { ds.reset(); ds.select(tSensorList[si]); ds.write(0x44, 0); // start conversion, with no-parasite power on at the end ! } } void DS_FastReadTemp() { byte data[12]; boolean validtemp=false; byte ns = sizeof(tSensorList); for (int si=0; si<ns; si++) { ds.reset(); ds.select(tSensorList[si]); ds.write(0xBE); // Read Scratchpad for ( int i = 0; i < 9; i++) data[i] = ds.read(); int16_t raw = (data[1] << 8) | data[0]; byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; validtemp = (raw != -1); if (validtemp) *tSensorValue[si] = (float)raw / 16.0; *tSensorStat[si] = validtemp; } }
1-Wire digital temperature sensor tutorial for fast reading !!!
– initially all sensors are initialized with reading command: DS_FastInit()
– waiting for a while … max 750ms for 12 bit resolution: delay(750)
– then you can read the data from the sensors in a single loop : DS_FastReadTemp();
– … repeat and have fun with sensors !
*Note: sensors and results are type array/vectors ! … see the code: tSensorList, tSensorValue, tSensorStat
Be First to Comment