diff --git a/platformio.ini b/platformio.ini index e158da9..a3a2f67 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,5 +1,5 @@ [platformio] -default_envs = tiny85 +default_envs = nanoatmega328 [env:nanoatmega328] platform = atmelavr @@ -7,32 +7,10 @@ board = nanoatmega328 framework = arduino board_build.f_cpu = 16000000L lib_deps = - milesburton/DallasTemperature + #robtillaart/DHTStable + robtillaart/DHTNew + #https://github.com/adafruit/RadioHead targets = upload, monitor upload_port = /dev/ttyUSB0 momitor_speed = 9600 -monitor_port = /dev/ttyUSB1 - -[env:tiny85] -platform = atmelavr -framework = arduino -#board = digispark-tiny -board = attiny85 -board_build.f_cpu = 4000000L -build_flags = - -DRH_ASK_ATTINY_USE_TIMER1 - -DRH_ASK_TX_ONLY -lib_deps = - milesburton/DallasTemperature - https://github.com/vlastahajek/RH_ASKTiny -upload_protocol = stk500v1 -upload_flags = - -P$UPLOAD_PORT - -b$UPLOAD_SPEED - -V -targets = upload, monitor -#targets = upload -upload_speed = 19200 -upload_port = /dev/ttyUSB0 -momitor_speed = 9600 -monitor_port = /dev/ttyACM0 +monitor_port = /dev/ttyUSB0 diff --git a/src/config.h b/src/config.h index 499e15f..0a19f9d 100644 --- a/src/config.h +++ b/src/config.h @@ -1,3 +1,3 @@ -#define LOGGER 1 -#define SEND_DELAY 120 +#define LOGGER 0 +#define SEND_DELAY 180 #define SEND_DELAY_BATTERY 3600 diff --git a/src/main.ino b/src/main.ino index 1835f5c..16e4796 100644 --- a/src/main.ino +++ b/src/main.ino @@ -1,56 +1,25 @@ -#include -#include - #include +//#include +#include -#include -#include +#define SENSORID 102 +#define PIN_SEND 15 +#define PIN_RECEIVE 2 +#define PIN_DHT 14 -//#include +#define DELAYSEND 60000UL -#if defined(ARDUINO_AVR_NANO) - #include "pins-nano.h" -#elif defined(ARDUINO_AVR_ATTINYX5) - #include "pins-attiny85.h" -#else - #error "Pins undef for this core" -#endif +#define Log(l) Serial.print(l) +#define LogLn(l) Serial.println(l) -#include "config.h" +RH_ASK driver(2000, PIN_RECEIVE, PIN_SEND, 12, false); +//DHTStable DHT; +DHTNEW DHT(PIN_DHT); -#if LOGGER - #warning "Logger" - #define Log(l) Serial.print(l) - #define LogLn(l) Serial.println(l) -#else - #warning "No Logger" - #define Log(l) - #define LogLn(l) -#endif +//uint8_t rh_payload[4]; +uint8_t rh_payload[5]; - -OneWire oneWire(PIN_DS18B20); -DallasTemperature ds18b20(&oneWire); - -#if !defined(ARDUINO_AVR_ATTINYX5) || (defined(ARDUINO_AVR_ATTINYX5) && !LOGGER) - //RH_ASK driver(2000, -1, PIN_SEND, -1, false); - RH_ASK driver(2000, -1, PIN_SEND, -1, false, 8); -#endif - -uint8_t rh_payload[6]; - -unsigned long myTime; - -uint8_t sleeprepeat; -uint8_t sleeprepeatbat; -uint8_t sleepcount; - -bool temp_enabled = false; - -ISR(WDT_vect) { - // Nothing needs to be done, however interrupt handler must be defined to - // prevent a reset. -} +uint16_t lastsendrh = 0; void setSensorType(uint8_t stype) { @@ -60,160 +29,97 @@ void setSensorType(uint8_t stype) rh_payload[0] += payload0; } -void setBatteryStatus(uint8_t bstatus) +bool setTH() { - if(bstatus == 1) { - rh_payload[0] |= 0b00000001; + int errno; + //if(DHT.read22(PIN_DHT) == DHTLIB_OK) + errno = DHT.read(); + rh_payload[1] = (uint8_t) (errno*-1); + if(errno == 0) { + int16_t tempC = (int16_t) roundf(DHT.getTemperature()*100); + uint8_t humidity = (uint8_t) roundf(DHT.getHumidity()); + Log("Send "); + Log("Temperature: "); + Log(tempC); + //LogF(DHT.temperature); + Log(" Humidity: "); + LogLn(humidity); + //LogF(DHT.humidity); + //rh_payload[1] = tempC >> 8; + //rh_payload[2] = tempC; + //rh_payload[3] = humidity; + rh_payload[2] = tempC >> 8; + rh_payload[3] = tempC; + rh_payload[4] = humidity; + return true; } else { - rh_payload[0] &= 0b11111110; + rh_payload[2] = 0; + rh_payload[3] = 0; + rh_payload[4] = 0; + Log("DHT Error "); + LogLn(errno); + //return false; + return true; } } -void setBatteryVoltage(uint16_t bvoltage) -{ - uint16_t payloadbat = rh_payload[2]; - payloadbat += rh_payload[1] << 8; - payloadbat &= 0b0000000001111111; - payloadbat += bvoltage << 7; - //Serial.println(payloadbat); - rh_payload[1] = payloadbat >> 8; - rh_payload[2] = payloadbat; -} - -void setBatteryPercent(uint8_t bpercent) -{ - uint16_t payloadbat = rh_payload[2]; - payloadbat += rh_payload[1] << 8; - payloadbat &= 0b1111111110000000; - payloadbat += bpercent; - //Serial.println(payloadbat); - rh_payload[1] = payloadbat >> 8; - rh_payload[2] = payloadbat; -} - -void setTemperature() -{ - ds18b20.requestTemperaturesByIndex(0); - delay(500); - int16_t tempC = (int16_t) roundf(ds18b20.getTempCByIndex(0)*100); - if(tempC != DEVICE_DISCONNECTED_C) { - //int16_t tempC = (int16_t) (ds18b20.getTempCByIndex(0)*100.0); - LogLn(tempC); - rh_payload[3] = tempC >> 8; - rh_payload[4] = tempC; - } -} - -void setHumidity() -{ - rh_payload[5] = 33; -} - - - -void setupWatchDogTimer(int time) -{ - if (time > 9 ) - time = 9; //Limit incoming amount to legal settings - - cli(); - MCUSR &= ~(1< - sleep_bod_disable(); //disable Brown Out Detector (BOD) before going to sleep, saves mo> - #endif - sleep_enable(); - sleep_mode(); - sleep_disable(); -} - void setup() { - ADCSRA &= ~(1< 0) { temp_enabled = true; } + if (!driver.init()) { LogLn("RH init failed"); } + driver.setHeaderId(SENSORID); - //rh_payload[0]=10; + DHT.setType(22); + //DHT.setDisableIRQ(true); + TIMSK1 &= ~_BV(OCIE1A); // Temperature initial (-100) - rh_payload[3] = 0xff; - rh_payload[4] = 0x9c; + //rh_payload[1] = 0xff; + //rh_payload[2] = 0x9c; + rh_payload[2] = 0xff; + rh_payload[3] = 0x9c; - setSensorType(1); - setBatteryStatus(0); + setSensorType(2); - setBatteryVoltage(123); - setBatteryPercent(50); + sendTH(); + //driver.setModeRx(); - //if(temp_enabled == true) { setTemperature(); } - //setHumidity(); +} + +void sendTH() +{ + //Serial.println("Send"); + if(setTH()==true) { + TIMSK1 |= _BV(OCIE1A); + //driver.setModeTx(); + for(uint8_t i=0;i<4;i++) + { + driver.send(rh_payload, 5); + driver.waitPacketSent(); + delay(100); + } + TIMSK1 &= ~_BV(OCIE1A); + } } void loop() { - //Serial.println("Send"); - if(temp_enabled == true) { setTemperature(); } - setHumidity(); + //uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]; + //uint8_t buflen = sizeof(buf); - #if !defined(ARDUINO_AVR_ATTINYX5) || (defined(ARDUINO_AVR_ATTINYX5) && !LOGGER) - for(uint8_t i=0;i<3;i++) - { - driver.send(rh_payload, 6); - driver.waitPacketSent(); - } - #endif - LogLn("Before delay"); - delay(15000); - myTime = millis(); - LogLn(sleepcount); - LogLn(myTime); - if(sleepcount > sleeprepeatbat) + delay(60000+random(5000)); + //delay(15000); + sendTH(); + /*if(millis() < lastsendrh || millis() > lastsendrh+DELAYSEND) { - LogLn("Probe Battery"); - sleepcount = 0; - } else { - sleepcount = sleepcount + 1; + lastsendrh=millis(); + sendTH(); + //driver.setModeRx(); } - //setupWatchDogTimer(WDTO_8S); - for (uint8_t i=0; i