Merge pull request #289 from adam2872/RAK4631-user-button

Implement user button on RAK4631 using analogue pin 31 (same as MT)
This commit is contained in:
ripplebiz
2025-05-23 13:19:32 +10:00
committed by GitHub
3 changed files with 43 additions and 29 deletions

View File

@@ -232,15 +232,23 @@ void UITask::userLedHandler() {
} }
void UITask::buttonHandler() { void UITask::buttonHandler() {
#ifdef PIN_USER_BTN #if defined(PIN_USER_BTN) || defined(PIN_USER_BTN_ANA)
static int prev_btn_state = !USER_BTN_PRESSED; static int prev_btn_state = !USER_BTN_PRESSED;
static int prev_btn_state_ana = !USER_BTN_PRESSED;
static unsigned long btn_state_change_time = 0; static unsigned long btn_state_change_time = 0;
static unsigned long next_read = 0; static unsigned long next_read = 0;
int cur_time = millis(); int cur_time = millis();
if (cur_time >= next_read) { if (cur_time >= next_read) {
int btn_state = digitalRead(PIN_USER_BTN); int btn_state = 0;
if (btn_state != prev_btn_state) { int btn_state_ana = 0;
if (btn_state == USER_BTN_PRESSED) { // pressed? #ifdef PIN_USER_BTN
btn_state = digitalRead(PIN_USER_BTN);
#endif
#ifdef PIN_USER_BTN_ANA
btn_state_ana = (analogRead(PIN_USER_BTN_ANA) < 20); // analogRead returns a value hopefully below 20 when button is pressed.
#endif
if (btn_state != prev_btn_state || btn_state_ana != prev_btn_state_ana) { // check for either digital or analogue button change of state
if (btn_state == USER_BTN_PRESSED || btn_state_ana == USER_BTN_PRESSED) { // pressed?
if (_display != NULL) { if (_display != NULL) {
if (_display->isOn()) { if (_display->isOn()) {
clearMsgPreview(); clearMsgPreview();
@@ -261,11 +269,12 @@ void UITask::buttonHandler() {
} }
btn_state_change_time = millis(); btn_state_change_time = millis();
prev_btn_state = btn_state; prev_btn_state = btn_state;
prev_btn_state_ana = btn_state_ana;
} }
next_read = millis() + 100; // 10 reads per second next_read = millis() + 100; // 10 reads per second
} }
#endif #endif
} }
void UITask::loop() { void UITask::loop() {
buttonHandler(); buttonHandler();

View File

@@ -26,6 +26,10 @@ void RAK4631Board::begin() {
pinMode(PIN_USER_BTN, INPUT_PULLUP); pinMode(PIN_USER_BTN, INPUT_PULLUP);
#endif #endif
#ifdef PIN_USER_BTN_ANA
pinMode(PIN_USER_BTN_ANA, INPUT_PULLUP);
#endif
#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) #if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL)
Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL); Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL);
#endif #endif

View File

@@ -7,6 +7,7 @@ build_flags = ${nrf52840_base.build_flags}
-I variants/rak4631 -I variants/rak4631
-D RAK_4631 -D RAK_4631
-D PIN_USER_BTN=9 -D PIN_USER_BTN=9
-D PIN_USER_BTN_ANA=31
-D PIN_BOARD_SCL=14 -D PIN_BOARD_SCL=14
-D PIN_BOARD_SDA=13 -D PIN_BOARD_SDA=13
-D PIN_OLED_RESET=-1 -D PIN_OLED_RESET=-1