Implement Ad Hoc Sending on Button Press
Added MH-Z19C Calibration
This commit is contained in:
parent
cf71223c30
commit
715e2fe22d
2 changed files with 56 additions and 4 deletions
|
@ -13,6 +13,11 @@
|
||||||
// #define WS2812B_NUM 2
|
// #define WS2812B_NUM 2
|
||||||
// #define WS2812B_BRIGHT 32
|
// #define WS2812B_BRIGHT 32
|
||||||
|
|
||||||
|
// Enable Sending on Button Press, as well as Calibration by Pressing Button for 4s with MH-Z19C Addon
|
||||||
|
// The Button has to be connected to a pin that is capable of Fully Asynchronus Interrupts.
|
||||||
|
// For The ATTNode this means Pin PC2 if you don't want to block any other Interfaces
|
||||||
|
// #define BTN_PIN PIN_PC2
|
||||||
|
|
||||||
// Enable Serial Debugging. Parameters for the Serial Port are 115200
|
// Enable Serial Debugging. Parameters for the Serial Port are 115200
|
||||||
// Please be aware that the SG112A/B CO2 Sensor uses the HW-UART, so
|
// Please be aware that the SG112A/B CO2 Sensor uses the HW-UART, so
|
||||||
// Serial Debug Output is not available with this Sensor.
|
// Serial Debug Output is not available with this Sensor.
|
||||||
|
|
49
src/main.cpp
49
src/main.cpp
|
@ -94,6 +94,18 @@ const int disabledPins[] = {PIN_PB5, PIN_PB4, PIN_PB1, PIN_PB0, PIN_PC3, PIN_PC2
|
||||||
const int disabledPins[] = {PIN_PB5, PIN_PB4, PIN_PB3, PIN_PB2, PIN_PB1, PIN_PB0, PIN_PC3, PIN_PC2, PIN_PC1, PIN_PC0};
|
const int disabledPins[] = {PIN_PB5, PIN_PB4, PIN_PB3, PIN_PB2, PIN_PB1, PIN_PB0, PIN_PC3, PIN_PC2, PIN_PC1, PIN_PC0};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BTN_PIN
|
||||||
|
volatile bool btn_pressed = 0;
|
||||||
|
volatile unsigned long btn_millis = 0;
|
||||||
|
|
||||||
|
// ISR Routine for Button
|
||||||
|
void btn_press() {
|
||||||
|
btn_pressed = 1;
|
||||||
|
btn_millis = millis();
|
||||||
|
delayMicroseconds(250000);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// ISR Routine for Sleep
|
// ISR Routine for Sleep
|
||||||
ISR(RTC_PIT_vect)
|
ISR(RTC_PIT_vect)
|
||||||
{
|
{
|
||||||
|
@ -143,8 +155,18 @@ void onEvent(ev_t ev) {
|
||||||
|
|
||||||
// Got to sleep for specified Time
|
// Got to sleep for specified Time
|
||||||
DEBUG_PRINTLN("Going to Sleep");
|
DEBUG_PRINTLN("Going to Sleep");
|
||||||
for (uint16_t i = 0; i < sleep_time*2; i++)
|
for (uint16_t i = 0; i < sleep_time*2; i++) {
|
||||||
|
#ifdef BTN_PIN
|
||||||
|
if (btn_pressed) {
|
||||||
|
i = sleep_time*2;
|
||||||
|
btn_pressed = 0;
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
sleep_32s();
|
sleep_32s();
|
||||||
|
#ifdef BTN_PIN
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// Schedule Next Transmit
|
// Schedule Next Transmit
|
||||||
do_send(&sendjob);
|
do_send(&sendjob);
|
||||||
|
@ -231,6 +253,11 @@ void setup()
|
||||||
leds.setBrightness(WS2812B_BRIGHT);
|
leds.setBrightness(WS2812B_BRIGHT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BTN_PIN
|
||||||
|
pinMode(BTN_PIN, INPUT_PULLUP);
|
||||||
|
attachInterrupt(digitalPinToInterrupt(BTN_PIN), btn_press, FALLING);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Set RTC
|
// Set RTC
|
||||||
while (RTC.STATUS > 0) {}
|
while (RTC.STATUS > 0) {}
|
||||||
RTC.CLKSEL = RTC_CLKSEL_INT1K_gc;
|
RTC.CLKSEL = RTC_CLKSEL_INT1K_gc;
|
||||||
|
@ -272,6 +299,26 @@ void setup()
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
|
#if defined HAS_MHZ19C && defined BTN_PIN
|
||||||
|
if (digitalRead(BTN_PIN) == LOW) {
|
||||||
|
// Press Button longer than 4 Seconds -> Start MH-Z19C Calibration Routine
|
||||||
|
unsigned long loop_millis = millis();
|
||||||
|
if ((unsigned long)(loop_millis - btn_millis) >= 4000) {
|
||||||
|
WS2812B_SETLED(1,153,0,153);
|
||||||
|
pinMode(PIN_PB4, OUTPUT);
|
||||||
|
digitalWrite(PIN_PB4, LOW);
|
||||||
|
delay(7500);
|
||||||
|
digitalWrite(PIN_PB4, HIGH);
|
||||||
|
pinMode(PIN_PB4, INPUT_PULLUP);
|
||||||
|
WS2812B_SETLED(1,0,0,0);
|
||||||
|
} else {
|
||||||
|
delay(500);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
// Only Run the LMIC loop here. Actual Sending Code is in do_send()
|
// Only Run the LMIC loop here. Actual Sending Code is in do_send()
|
||||||
os_runloop_once();
|
os_runloop_once();
|
||||||
|
#if defined HAS_MHZ19C && defined BTN_PIN
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
Loading…
Reference in a new issue