|
|
@ -1,30 +1,21 @@ |
|
|
|
#include <Arduino.h> |
|
|
|
#include <Arduino.h> |
|
|
|
#include <WiFi.h> |
|
|
|
|
|
|
|
#include <WiFiClient.h> |
|
|
|
|
|
|
|
#include <WiFiServer.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "secrets.h" |
|
|
|
#include "connect.h" |
|
|
|
|
|
|
|
|
|
|
|
// Default gateway = 192.168.4.1
|
|
|
|
|
|
|
|
// Default IP address = 192.168.4.2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PORT 1234 |
|
|
|
|
|
|
|
#define CHANNEL 11 |
|
|
|
|
|
|
|
#define HIDDEN true |
|
|
|
|
|
|
|
#define MAX_CONNECTION 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define POWER_BUTTON_PIN 10 |
|
|
|
#define POWER_BUTTON_PIN 10 |
|
|
|
#define RESET_BUTTON_PIN 2 |
|
|
|
#define RESET_BUTTON_PIN 2 |
|
|
|
|
|
|
|
|
|
|
|
#define POWER_LED_PIN 3 |
|
|
|
#define POWER_LED_PIN 3 |
|
|
|
#define RESET_LED_PIN 1 |
|
|
|
#define RESET_LED_PIN 1 |
|
|
|
|
|
|
|
|
|
|
|
#define POWER_GATE_PIN 6 |
|
|
|
#define POWER_GATE_PIN 6 |
|
|
|
#define RESET_GATE_PIN 7 |
|
|
|
#define RESET_GATE_PIN 7 |
|
|
|
|
|
|
|
|
|
|
|
WiFiServer server(PORT, MAX_CONNECTION); |
|
|
|
int previousPowerButtonState = HIGH; |
|
|
|
|
|
|
|
int previousResetButtonState = HIGH; |
|
|
|
|
|
|
|
|
|
|
|
bool powerPressed = false; |
|
|
|
bool powerButtonPressed = false; |
|
|
|
bool resetPressed = false; |
|
|
|
bool resetButtonPressed = false; |
|
|
|
|
|
|
|
|
|
|
|
void processButtons(); |
|
|
|
void processButtons(); |
|
|
|
void setPowerPin(bool enable); |
|
|
|
void setPowerPin(bool enable); |
|
|
@ -35,6 +26,9 @@ void setup() |
|
|
|
Serial.begin(9600); |
|
|
|
Serial.begin(9600); |
|
|
|
Serial.setDebugOutput(true); |
|
|
|
Serial.setDebugOutput(true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pinMode(POWER_BUTTON_PIN, INPUT_PULLUP); |
|
|
|
|
|
|
|
pinMode(RESET_BUTTON_PIN, INPUT_PULLUP); |
|
|
|
|
|
|
|
|
|
|
|
pinMode(POWER_GATE_PIN, OUTPUT); |
|
|
|
pinMode(POWER_GATE_PIN, OUTPUT); |
|
|
|
pinMode(POWER_LED_PIN, OUTPUT); |
|
|
|
pinMode(POWER_LED_PIN, OUTPUT); |
|
|
|
pinMode(RESET_GATE_PIN, OUTPUT); |
|
|
|
pinMode(RESET_GATE_PIN, OUTPUT); |
|
|
@ -43,85 +37,55 @@ void setup() |
|
|
|
delay(3000); |
|
|
|
delay(3000); |
|
|
|
Serial.println("Server booted!"); |
|
|
|
Serial.println("Server booted!"); |
|
|
|
|
|
|
|
|
|
|
|
// Start button server
|
|
|
|
wifiSetup(); |
|
|
|
WiFi.softAP(SSID, PASSWORD, CHANNEL, HIDDEN, MAX_CONNECTION); |
|
|
|
|
|
|
|
Serial.println("AP Started"); |
|
|
|
|
|
|
|
server.begin(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void loop() |
|
|
|
void loop() |
|
|
|
{ |
|
|
|
{ |
|
|
|
WiFiClient client = server.available(); |
|
|
|
delay(20); // used for button debounce
|
|
|
|
if (client) { |
|
|
|
|
|
|
|
Serial.println("Client connected"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long start = 0; |
|
|
|
|
|
|
|
while (client.connected()) { |
|
|
|
|
|
|
|
if (client.available()) { |
|
|
|
|
|
|
|
String msg = client.readStringUntil('\n'); |
|
|
|
|
|
|
|
Serial.print("Received: "); |
|
|
|
|
|
|
|
Serial.println(msg); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (msg == "power_pressed") { |
|
|
|
|
|
|
|
powerPressed = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (msg == "power_released") { |
|
|
|
|
|
|
|
powerPressed = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (msg == "reset_pressed") { |
|
|
|
|
|
|
|
resetPressed = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (msg == "reset_released") { |
|
|
|
|
|
|
|
resetPressed = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
client.print("ACK\n"); |
|
|
|
int powerButtonState = digitalRead(POWER_BUTTON_PIN); |
|
|
|
Serial.println("Sent ACK"); |
|
|
|
int resetButtonState = digitalRead(RESET_BUTTON_PIN); |
|
|
|
start = millis(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Kill lingering connections
|
|
|
|
// Unsupported usecase
|
|
|
|
if (start != 0 && millis() - start > 200) { |
|
|
|
if (powerButtonState == LOW && resetButtonState == LOW) { |
|
|
|
Serial.println("Client kill.."); |
|
|
|
previousPowerButtonState = HIGH; |
|
|
|
break; |
|
|
|
previousResetButtonState = HIGH; |
|
|
|
} |
|
|
|
powerButtonPressed = false; |
|
|
|
|
|
|
|
resetButtonPressed = false; |
|
|
|
processButtons(); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
setPowerPin(false); |
|
|
|
powerButtonPressed = powerButtonState == LOW; |
|
|
|
setResetPin(false); |
|
|
|
resetButtonPressed = resetButtonState == LOW; |
|
|
|
|
|
|
|
|
|
|
|
client.stop(); |
|
|
|
processButtons(); |
|
|
|
Serial.println("Client disconnected"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------
|
|
|
|
// -----------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
void processButtons() |
|
|
|
void processButtons() |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (powerPressed && resetPressed) { |
|
|
|
if ((powerRemotePressed && resetRemotePressed) |
|
|
|
|
|
|
|
|| (powerButtonPressed && resetButtonPressed)) { |
|
|
|
Serial.println("Double input.."); |
|
|
|
Serial.println("Double input.."); |
|
|
|
setPowerPin(false); |
|
|
|
setPowerPin(false); |
|
|
|
setResetPin(false); |
|
|
|
setResetPin(false); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
setPowerPin(powerPressed); |
|
|
|
setPowerPin(powerRemotePressed || powerButtonPressed); |
|
|
|
setResetPin(resetPressed); |
|
|
|
setResetPin(resetRemotePressed || resetButtonPressed); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void setPowerPin(bool enable) |
|
|
|
void setPowerPin(bool enable) |
|
|
|
{ |
|
|
|
{ |
|
|
|
powerPressed = enable; |
|
|
|
|
|
|
|
// digitalWrite(POWER_GATE_PIN, (enable) ? HIGH : LOW);
|
|
|
|
// digitalWrite(POWER_GATE_PIN, (enable) ? HIGH : LOW);
|
|
|
|
digitalWrite(POWER_LED_PIN, (enable) ? HIGH : LOW); |
|
|
|
digitalWrite(POWER_LED_PIN, (enable) ? HIGH : LOW); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void setResetPin(bool enable) |
|
|
|
void setResetPin(bool enable) |
|
|
|
{ |
|
|
|
{ |
|
|
|
resetPressed = enable; |
|
|
|
|
|
|
|
// digitalWrite(RESET_GATE_PIN, (enable) ? HIGH : LOW);
|
|
|
|
// digitalWrite(RESET_GATE_PIN, (enable) ? HIGH : LOW);
|
|
|
|
digitalWrite(RESET_LED_PIN, (enable) ? HIGH : LOW); |
|
|
|
digitalWrite(RESET_LED_PIN, (enable) ? HIGH : LOW); |
|
|
|
} |
|
|
|
} |
|
|
|