Remote power/reset button
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

#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;
}
}