#include "owTerm.h" #include #include "utils.h" OneWire *net = NULL; // Pass our oneWire reference to Dallas Temperature. //DallasTemperature sensors(&net); DeviceAddress *term = NULL; //int *regs = NULL; uint16_t *wstat = NULL; DallasTemperature *sensors = NULL; short si=0; int t_count = 0; unsigned long owTimer=0; owChangedType owChanged; int owUpdate() { unsigned long finish = millis() + 5000; short sr; //net.setStrongPullup(); Serial.println(F("Searching")); if (net) net->reset_search(); for (short i=0;iwireSearch(term[t_count])>0 && (t_count millis ()) { short ifind=-1; if (net->crc8(term[t_count], 7) == term[t_count][7]) { for (short i=0;isetResolution(term[t_count], TEMPERATURE_PRECISION); net->setStrongPullup(); // sensors.requestTemperaturesByAddress(term[t_count]); } t_count++;} }//if } //while Serial.print(F("1-wire count: ")); Serial.println(t_count); } int owSetup(owChangedType owCh) { //// todo - move memory allocation to here #ifdef _2482 net = new OneWire; #else net = new OneWire (ONE_WIRE_BUS); #endif // Pass our oneWire reference to Dallas Temperature. sensors = new DallasTemperature (net); term = new DeviceAddress[t_max]; //regs = new int [t_max]; wstat = new uint16_t [t_max]; #ifdef _2482 Wire.begin(); if (net->checkPresence()) { Serial.println(F("DS2482-100 present")); net->deviceReset(); #ifdef APU_OFF Serial.println(F("APU off")); #else net->setActivePullup(); #endif Serial.println(F("\tChecking for 1-Wire devices...")); if (net->wireReset()) Serial.println(F("\tReset done")); sensors->begin(); owChanged=owCh; //owUpdate(); //Serial.println(F("\t1-w Updated")); sensors->setWaitForConversion(false); return true; } #endif return false; // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement delay(500); } int sensors_loop(void) { if (!sensors) return -1; if (si>=t_count) { owUpdate(); //every check circle - scan for new devices si=0; return 8000; } int t; switch (term[si][0]){ case 0x28: // Thermomerer t=sensors->getTempC(term[si]);//*10.0; //Serial.println("o"); if (owChanged) owChanged(si,term[si],t); sensors->requestTemperaturesByAddress(term[si]); si++; return 2500; // default // return sensors_ext(); } //switch si++; return check_circle; } void owLoop() { if (millis() >=owTimer) owTimer=millis()+sensors_loop(); } int owFind(DeviceAddress addr) { for (short i=0;isetResolution(term[t_count], TEMPERATURE_PRECISION); net->setStrongPullup(); // sensors.requestTemperaturesByAddress(term[t_count]); } t_count++; }