You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.1 KiB
91 lines
2.1 KiB
#include <Arduino.h> |
|
#include <esp_now.h> |
|
|
|
#include "connect.h" |
|
|
|
#define POWER_BUTTON_PIN 10 |
|
#define RESET_BUTTON_PIN 2 |
|
|
|
int previousPowerButtonState = HIGH; |
|
int previousResetButtonState = HIGH; |
|
|
|
bool need_power_ack = false; |
|
bool need_reset_ack = false; |
|
|
|
bool wait_power_ack = false; |
|
bool wait_reset_ack = false; |
|
|
|
void setup() |
|
{ |
|
Serial.begin(9600); |
|
Serial.setDebugOutput(true); |
|
|
|
pinMode(POWER_BUTTON_PIN, INPUT_PULLUP); |
|
pinMode(RESET_BUTTON_PIN, INPUT_PULLUP); |
|
|
|
pinMode(POWER_LED_PIN, OUTPUT); |
|
pinMode(RESET_LED_PIN, OUTPUT); |
|
|
|
delay(3000); |
|
Serial.println("Client booted!"); |
|
|
|
wifiSetup(); |
|
} |
|
|
|
void loop() |
|
{ |
|
delay(20); // used for button debounce |
|
|
|
// digitalWrite(POWER_LED_PIN, LOW); |
|
digitalWrite(RESET_LED_PIN, LOW); |
|
|
|
int powerButtonState = digitalRead(POWER_BUTTON_PIN); |
|
int resetButtonState = digitalRead(RESET_BUTTON_PIN); |
|
|
|
// Unsupported usecase |
|
if (powerButtonState == LOW && resetButtonState == LOW) { |
|
previousPowerButtonState = HIGH; |
|
previousResetButtonState = HIGH; |
|
return; |
|
} |
|
|
|
bool isButtonPressed = (previousPowerButtonState == LOW && powerButtonState == LOW) |
|
|| (previousResetButtonState == LOW && resetButtonState == LOW); |
|
previousPowerButtonState = powerButtonState; |
|
previousResetButtonState = resetButtonState; |
|
|
|
if (isButtonPressed) { |
|
digitalWrite(RESET_LED_PIN, HIGH); |
|
|
|
String button = (powerButtonState == LOW) ? "power" : "reset"; |
|
|
|
Serial.println("Pressed " + button + " button!"); |
|
|
|
String msg = button + "_pressed"; |
|
esp_now_send(server_mac, (const uint8_t*)msg.c_str(), msg.length()); |
|
Serial.println("Sent " + button + " button press"); |
|
|
|
need_power_ack = true; |
|
need_reset_ack = true; |
|
|
|
wait_power_ack = false; |
|
wait_reset_ack = false; |
|
|
|
return; |
|
} |
|
|
|
if (need_power_ack && !wait_power_ack) { |
|
String msg = "power_released"; |
|
esp_now_send(server_mac, (const uint8_t*)msg.c_str(), msg.length()); |
|
Serial.println("Sent power button release"); |
|
|
|
wait_power_ack = true; |
|
} |
|
if (need_reset_ack && !wait_reset_ack) { |
|
String msg = "reset_released"; |
|
esp_now_send(server_mac, (const uint8_t*)msg.c_str(), msg.length()); |
|
Serial.println("Sent reset button release"); |
|
|
|
wait_reset_ack = true; |
|
} |
|
}
|
|
|