Browse Source

Merge 3b98c4e243 into 6e39cff8a1

pull/3066/merge
Tesso Codemonkey 2 days ago
committed by GitHub
parent
commit
85df3b9eb3
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 19
      examples/simple_repeater/main.cpp
  2. 29
      examples/simple_room_server/main.cpp
  3. 14
      variants/thinknode_m6/ThinkNodeM6Board.cpp
  4. 6
      variants/thinknode_m6/ThinkNodeM6Board.h

19
examples/simple_repeater/main.cpp

@ -30,10 +30,14 @@ static char ethernet_command[160];
// For power saving // For power saving
unsigned long POWERSAVING_FIRSTSLEEP_SECS = 120; // The first sleep (if enabled) from boot unsigned long POWERSAVING_FIRSTSLEEP_SECS = 120; // The first sleep (if enabled) from boot
#if defined(PIN_USER_BTN) && defined(_SEEED_SENSECAP_SOLAR_H_) #if defined(PIN_USER_BTN) && (defined(_SEEED_SENSECAP_SOLAR_H_) || defined(THINKNODE_M6))
static unsigned long userBtnDownAt = 0; static unsigned long userBtnDownAt = 0;
#if defined(THINKNODE_M6)
#define USER_BTN_HOLD_OFF_MILLIS 5000 // matches Elecrow's stock firmware UX
#else
#define USER_BTN_HOLD_OFF_MILLIS 1500 #define USER_BTN_HOLD_OFF_MILLIS 1500
#endif #endif
#endif
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
@ -170,13 +174,22 @@ void loop() {
} }
#endif #endif
#if defined(PIN_USER_BTN) && defined(_SEEED_SENSECAP_SOLAR_H_) && !defined(DISPLAY_CLASS) #if defined(PIN_USER_BTN) && (defined(_SEEED_SENSECAP_SOLAR_H_) || defined(THINKNODE_M6)) && !defined(DISPLAY_CLASS)
// Hold the user button to power off the SenseCAP Solar repeater. // Hold the user button to power off the repeater.
int btnState = digitalRead(PIN_USER_BTN); int btnState = digitalRead(PIN_USER_BTN);
if (btnState == LOW) { if (btnState == LOW) {
if (userBtnDownAt == 0) { if (userBtnDownAt == 0) {
userBtnDownAt = millis(); userBtnDownAt = millis();
} else if ((unsigned long)(millis() - userBtnDownAt) >= USER_BTN_HOLD_OFF_MILLIS) { } else if ((unsigned long)(millis() - userBtnDownAt) >= USER_BTN_HOLD_OFF_MILLIS) {
#if defined(THINKNODE_M6) && defined(PIN_LED_RED)
// blink the power LED a few times to confirm the hold was registered
for (int i = 0; i < 3; i++) {
digitalWrite(PIN_LED_RED, HIGH);
delay(150);
digitalWrite(PIN_LED_RED, LOW);
delay(150);
}
#endif
Serial.println("Powering off..."); Serial.println("Powering off...");
board.powerOff(); // does not return board.powerOff(); // does not return
} }

29
examples/simple_room_server/main.cpp

@ -26,6 +26,11 @@ static char command[MAX_POST_TEXT_LEN+1];
static char ethernet_command[MAX_POST_TEXT_LEN+1]; static char ethernet_command[MAX_POST_TEXT_LEN+1];
#endif #endif
#if defined(PIN_USER_BTN) && defined(THINKNODE_M6)
static unsigned long userBtnDownAt = 0;
#define USER_BTN_HOLD_OFF_MILLIS 5000 // matches Elecrow's stock firmware UX
#endif
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
delay(1000); delay(1000);
@ -148,6 +153,30 @@ void loop() {
} }
#endif #endif
#if defined(PIN_USER_BTN) && defined(THINKNODE_M6) && !defined(DISPLAY_CLASS)
// Hold the user button to power off the room server.
int btnState = digitalRead(PIN_USER_BTN);
if (btnState == LOW) {
if (userBtnDownAt == 0) {
userBtnDownAt = millis();
} else if ((unsigned long)(millis() - userBtnDownAt) >= USER_BTN_HOLD_OFF_MILLIS) {
#ifdef PIN_LED_RED
// blink the power LED a few times to confirm the hold was registered
for (int i = 0; i < 3; i++) {
digitalWrite(PIN_LED_RED, HIGH);
delay(150);
digitalWrite(PIN_LED_RED, LOW);
delay(150);
}
#endif
Serial.println("Powering off...");
board.powerOff(); // does not return
}
} else {
userBtnDownAt = 0;
}
#endif
the_mesh.loop(); the_mesh.loop();
sensors.loop(); sensors.loop();
#ifdef DISPLAY_CLASS #ifdef DISPLAY_CLASS

14
variants/thinknode_m6/ThinkNodeM6Board.cpp

@ -15,6 +15,20 @@ void ThinkNodeM6Board::begin() {
digitalWrite(P_LORA_TX_LED, LOW); digitalWrite(P_LORA_TX_LED, LOW);
#endif #endif
#ifdef PIN_USER_BTN
pinMode(PIN_USER_BTN, INPUT_PULLUP);
#endif
#ifdef PIN_LED_RED
// blink the power LED a few times to confirm power-on/wake
for (int i = 0; i < 3; i++) {
digitalWrite(PIN_LED_RED, HIGH);
delay(150);
digitalWrite(PIN_LED_RED, LOW);
delay(150);
}
#endif
delay(10); // give sx1262 some time to power up delay(10); // give sx1262 some time to power up
} }

6
variants/thinknode_m6/ThinkNodeM6Board.h

@ -43,6 +43,12 @@ public:
digitalWrite(P_LORA_TX_LED, LOW); digitalWrite(P_LORA_TX_LED, LOW);
#endif #endif
#ifdef PIN_USER_BTN
while (digitalRead(PIN_USER_BTN) == LOW); // wait for release, avoid instant re-trigger
// keep pull-up enabled in system-off so the wake line doesn't float low
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(g_ADigitalPinMap[PIN_USER_BTN]), NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
#endif
// power off board // power off board
NRF52Board::powerOff(); NRF52Board::powerOff();
} }

Loading…
Cancel
Save