optimise data sending

This commit is contained in:
Nicu Hodos 2021-12-28 19:06:16 +01:00
parent 2b414d3778
commit 0ce4ca5637
2 changed files with 22 additions and 21 deletions

View File

@ -1,17 +1,17 @@
#pragma once #pragma once
#define ID(value) (value & 0x1F) #define ID(value) (value & 0x1F)
#define STATE(value) ((value & 0x1) << 5) #define VCC(value) ((value & 0x1FFF) << 5)
#define VCC(value) ((value & 0x1FFF) << 6) #define TEMP(value) (((unsigned long)value & 0x2FF) << 18)
#define TEMP(value) (((unsigned long)value & 0x1FF) << 19) #define HUMIDITY(value) (((unsigned long)value & 0x2FF) << 18)
#define HUMIDITY(value) (((unsigned long)value & 0x7F) << 19) #define STATE(value) ((value & 0x1) << 27)
#define TYPE(value) (((unsigned long)value & 0xF) << 28) #define TYPE(value) (((unsigned long)value & 0xF) << 28)
#define GET_TYPE(value) (((unsigned long)value >> 28) & 0xF) #define GET_TYPE(value) (((unsigned long)value >> 28) & 0xF)
#define GET_TEMP(value) (((unsigned long)value >> 19) & 0x1FF) #define GET_STATE(value) ((value >> 27) & 0x1)
#define GET_HUMIDITY(value) (((unsigned long)value >> 19) & 0x7F) #define GET_TEMP(value) (((unsigned long)value >> 18) & 0x2FF)
#define GET_VCC(value) ((value >> 6) & 0x1FFF) #define GET_HUMIDITY(value) (((unsigned long)value >> 18) & 0x2FF)
#define GET_STATE(value) ((value >> 5) & 0x1) #define GET_VCC(value) ((value >> 5) & 0x1FFF)
enum SensorType { enum SensorType {
HUMIDITY = 5, HUMIDITY = 5,

View File

@ -29,6 +29,7 @@ void setup() {
pinMode(TEMP_POSITIVE, OUTPUT); pinMode(TEMP_POSITIVE, OUTPUT);
digitalWrite(TEMP_POSITIVE, HIGH); digitalWrite(TEMP_POSITIVE, HIGH);
dht.begin(); dht.begin();
delay(2000);
TinySwitch::setup(SENDER); TinySwitch::setup(SENDER);
TinyPower::setup(); TinyPower::setup();
@ -36,15 +37,14 @@ void setup() {
} }
void loop() { void loop() {
if (counter % SEND_VCC_INTERVAL == 0) { if (counter % SEND_INTERVAL == 0) {
DhtValues values = readTemp(); DhtValues values = readTemp();
tempSensor.sendTempAndVoltage(values.temperature); if (counter % SEND_VCC_INTERVAL == 0) {
delay(100); tempSensor.sendTempAndVoltage(values.temperature);
humidSensor.sendHumidity(values.humidity); counter = 0;
counter = 0; } else {
} else if (counter % SEND_INTERVAL == 0) { tempSensor.sendTemp(values.temperature);
DhtValues values = readTemp(); }
tempSensor.sendTemp(values.temperature);
delay(100); delay(100);
humidSensor.sendHumidity(values.humidity); humidSensor.sendHumidity(values.humidity);
} }
@ -52,18 +52,19 @@ void loop() {
} }
DhtValues readTemp() { DhtValues readTemp() {
digitalWrite(TEMP_POSITIVE, HIGH);
delay(10);
DhtValues dhtValues; DhtValues dhtValues;
dhtValues.temperature = roundf(dht.readTemperature() * 10); dhtValues.temperature = roundf(dht.readTemperature() * 10);
dhtValues.humidity = roundf(dht.readHumidity() * 10); dhtValues.humidity = roundf(dht.readHumidity() * 10);
digitalWrite(TEMP_POSITIVE, LOW); digitalWrite(TEMP_POSITIVE, LOW);
pinMode(DHT_PIN, OUTPUT);
digitalWrite(DHT_PIN, LOW);
return dhtValues; return dhtValues;
} }
ISR(PCINT0_vect) {
}
ISR(WDT_vect) { ISR(WDT_vect) {
counter++; counter++;
if (((counter + 1) % SEND_INTERVAL == 0) || ((counter + 1) % SEND_VCC_INTERVAL == 0)) {
pinMode(DHT_PIN, INPUT_PULLUP);
digitalWrite(TEMP_POSITIVE, HIGH);
}
} }