diff --git a/oil_sensor/include/SonarSensor.h b/oil_sensor/include/SonarSensor.h index 850a628..f7fece9 100644 --- a/oil_sensor/include/SonarSensor.h +++ b/oil_sensor/include/SonarSensor.h @@ -10,20 +10,7 @@ private: public: SonarSensor(short id) : GenericSensor(id) {} - void setup() { - pinMode(VCC_PIN, OUTPUT); - turnOff(); - } - unsigned int scan() { return sonar.convert_cm(sonar.ping_median()); } - - void turnOn() { - digitalWrite(VCC_PIN, HIGH); - } - - void turnOff() { - digitalWrite(VCC_PIN, LOW); - } }; diff --git a/oil_sensor/platformio.ini b/oil_sensor/platformio.ini index 49f682b..a6e74fd 100644 --- a/oil_sensor/platformio.ini +++ b/oil_sensor/platformio.ini @@ -12,9 +12,7 @@ platform = atmelavr board = attiny85 framework = arduino -lib_deps = - teckel12/NewPing@^1.9.4 - sui77/rc-switch @ ^2.6.4 +build_src_filter = + lib_extra_dirs = ../libraries upload_protocol = stk500v1 @@ -23,3 +21,14 @@ upload_flags = -b$UPLOAD_SPEED upload_port = /dev/ttyACM0 upload_speed = 19200 + +[env:pro_mini] +platform = atmelavr +board = pro16MHzatmega168 +framework = arduino +build_src_filter = + +lib_deps = + teckel12/NewPing@^1.9.4 + sui77/rc-switch @ ^2.6.4 +lib_extra_dirs = + ../libraries diff --git a/oil_sensor/src/oil_sensor.cpp b/oil_sensor/src/oil_sensor.cpp index ccd193d..d9acdc4 100644 --- a/oil_sensor/src/oil_sensor.cpp +++ b/oil_sensor/src/oil_sensor.cpp @@ -1,55 +1,37 @@ #include -#include -#define SENDER_PIN PIN_B2 -#define TRIGGER_PIN PIN_B3 -#define ECHO_PIN PIN_B4 -#define VCC_PIN PIN_B1 +#define SENDER_GND 10 +#define SENDER_DATA 11 +#define SENDER_VCC 12 +#define TRIGGER_PIN 2 +#define ECHO_PIN 3 +#define NOTIFY_PIN 9 #define MAX_DISTANCE 200 // 2 meters #include "SonarSensor.h" -#define SEND_INTERVAL 450 // 450*8s = ~1 hour -#define SEND_VCC_INTERVAL (SEND_INTERVAL*12) // ~12 hours - - SonarSensor oilSensor(OIL_SENSOR); -volatile int counter = 0; -volatile bool shouldSend = true; - void setup() { - oilSensor.setup(); - TinySwitch::setup(SENDER_PIN); - TinyPower::setup(); - TinyPower::enableWdt(WDTO_8S); + Serial.begin(9600); + Serial.println("starting..."); + + pinMode(SENDER_GND, OUTPUT); + digitalWrite(SENDER_GND, LOW); + pinMode(SENDER_VCC, OUTPUT); + digitalWrite(SENDER_VCC, HIGH); + TinySwitch::setup(SENDER_DATA); + + delay(300); + unsigned int distance = oilSensor.scan(); + Serial.println(distance); + if (distance) oilSensor.sendValueAndVoltage(distance); + delay(200); + pinMode(NOTIFY_PIN, OUTPUT); + digitalWrite(NOTIFY_PIN, LOW); + Serial.println("finished"); } void loop() { - if (shouldSend) { - shouldSend = false; - oilSensor.turnOn(); - delay(500); - unsigned int distance = oilSensor.scan(); - oilSensor.turnOff(); - if (distance) { - if (counter) { - oilSensor.sendValue(distance); - } else { - oilSensor.sendValueAndVoltage(distance); - } - } - } - TinyPower::sleep(); -} - -ISR(WDT_vect) { - counter++; - if ((counter % SEND_INTERVAL == 0)) { - shouldSend = true; - if ((counter % SEND_VCC_INTERVAL == 0)) { - counter = 0; - } - } } diff --git a/oil_sensor/src/switch.cpp b/oil_sensor/src/switch.cpp new file mode 100644 index 0000000..fcf4fb8 --- /dev/null +++ b/oil_sensor/src/switch.cpp @@ -0,0 +1,41 @@ +#include +#include + +#define CONTROLLER_PIN PIN_B4 +#define NOTIFICATION_PIN PIN_B0 + +#define HOUR_INTERVAL 450 // 450*8s = ~1 hour +#define WAKE_INTERVAL (HOUR_INTERVAL*12) // ~12 hours + + +volatile int counter = 0; +volatile bool wakeUp = true; + +void setup() { + pinMode(PIN_B3, INPUT); + pinMode(CONTROLLER_PIN, OUTPUT); + digitalWrite(CONTROLLER_PIN, LOW); + pinMode(NOTIFICATION_PIN, INPUT_PULLUP); + TinyPower::setup(); + TinyPower::enableWdt(WDTO_8S); +} + +void loop() { + if (wakeUp) { + wakeUp = false; + digitalWrite(CONTROLLER_PIN, HIGH); + } + TinyPower::sleep(NOTIFICATION_PIN); +} + +ISR(WDT_vect) { + counter++; + if ((counter % WAKE_INTERVAL == 0)) { + wakeUp = true; + } +} + +ISR(PCINT0_vect) { + if (!digitalRead(NOTIFICATION_PIN)) + digitalWrite(CONTROLLER_PIN, LOW); +} \ No newline at end of file