diff --git a/README.md b/README.md
@@ -32,6 +32,7 @@ This is being developed in my free time as a fun project. It is no where near be
5. Flash the device: `esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 write_flash -z 0x1000 firmware.bin`
# Roapmap
+- [X] Screen timeout on inactivity *(default 30 seconds)*
- [X] Wifi scanning & selection menu
- [ ] Saved wifi profiles
- [X] IRC Client
diff --git a/src/main.ino b/src/main.ino
@@ -54,6 +54,11 @@ bool readyToJoinChannel = false;
unsigned long lastStatusUpdateTime = 0;
const unsigned long STATUS_UPDATE_INTERVAL = 15000;
+unsigned long lastActivityTime = 0;
+const unsigned long INACTIVITY_TIMEOUT = 30000; // 30 seconds
+bool screenOn = true;
+
+
struct WiFiNetwork {
int index;
int channel;
@@ -72,6 +77,9 @@ void setup() {
pinMode(BOARD_POWERON, OUTPUT);
digitalWrite(BOARD_POWERON, HIGH);
+ pinMode(TFT_BL, OUTPUT);
+ digitalWrite(TFT_BL, HIGH); // Turn on the backlight initially
+
Wire.begin(BOARD_I2C_SDA, BOARD_I2C_SCL);
tft.begin();
tft.setRotation(1);
@@ -89,6 +97,7 @@ void setup() {
nick = "ACID_" + String(randomNum);
}
+
int renderFormattedMessage(String message, int cursorY, int lineHeight, bool highlightNick = false) {
uint16_t fgColor = TFT_WHITE;
uint16_t bgColor = TFT_BLACK;
@@ -166,6 +175,20 @@ int renderFormattedMessage(String message, int cursorY, int lineHeight, bool hig
return cursorY; // Return the new cursor Y position for the next line
}
+void turnOffScreen() {
+ tft.writecommand(TFT_DISPOFF); // Turn off display
+ tft.writecommand(TFT_SLPIN); // Put display into sleep mode
+ digitalWrite(TFT_BL, LOW); // Turn off the backlight (Assuming TFT_BL is the backlight pin)
+ screenOn = false;
+}
+
+void turnOnScreen() {
+ digitalWrite(TFT_BL, HIGH); // Turn on the backlight (Assuming TFT_BL is the backlight pin)
+ tft.writecommand(TFT_SLPOUT); // Wake up display from sleep mode
+ tft.writecommand(TFT_DISPON); // Turn on display
+ screenOn = true;
+}
+
void displayLines() {
tft.fillRect(0, STATUS_BAR_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT - STATUS_BAR_HEIGHT - INPUT_LINE_HEIGHT, TFT_BLACK);
@@ -312,6 +335,7 @@ void loop() {
char incoming = getKeyboardInput();
if (incoming != 0) {
handleWiFiSelection(incoming);
+ lastActivityTime = millis(); // Reset activity timer
}
} else {
if (millis() - lastStatusUpdateTime > STATUS_UPDATE_INTERVAL) {
@@ -348,10 +372,18 @@ void loop() {
char incoming = getKeyboardInput();
if (incoming != 0) {
handleKeyboardInput(incoming);
+ lastActivityTime = millis(); // Reset activity timer
+ }
+
+ // Check for inactivity
+ if (screenOn && millis() - lastActivityTime > INACTIVITY_TIMEOUT) {
+ turnOffScreen(); // Turn off screen and backlight
}
}
}
+
+
bool connectToIRC() {
if (useSSL) {
client.setInsecure();
@@ -407,10 +439,16 @@ void handleIRC() {
sendIRC(pingResponse);
} else {
parseAndDisplay(line);
+ lastActivityTime = millis(); // Reset activity timer
+ if (!screenOn) {
+ turnOnScreen(); // Turn on screen and backlight
+ }
}
}
}
+
+
void parseAndDisplay(String line) {
int firstSpace = line.indexOf(' ');
int secondSpace = line.indexOf(' ', firstSpace + 1);
@@ -457,7 +495,7 @@ void parseAndDisplay(String line) {
void handleKeyboardInput(char key) {
if (key == '\n' || key == '\r') { // Enter
if (inputBuffer.startsWith("/raw ")) {
- String rawCommand = inputBuffer.substring(5); // Remove "/raw "
+ String rawCommand = inputBuffer.substring(5);
sendRawCommand(rawCommand);
} else {
sendIRC("PRIVMSG " + String(channel) + " :" + inputBuffer);
@@ -465,17 +503,31 @@ void handleKeyboardInput(char key) {
}
inputBuffer = "";
displayInputLine();
+ lastActivityTime = millis(); // Reset activity timer
+ if (!screenOn) {
+ turnOnScreen(); // Turn on screen and backlight
+ }
} else if (key == '\b') { // Backspace
if (inputBuffer.length() > 0) {
inputBuffer.remove(inputBuffer.length() - 1);
displayInputLine();
+ lastActivityTime = millis(); // Reset activity timer
+ if (!screenOn) {
+ turnOnScreen(); // Turn on screen and backlight
+ }
}
} else {
inputBuffer += key;
displayInputLine();
+ lastActivityTime = millis(); // Reset activity timer
+ if (!screenOn) {
+ turnOnScreen(); // Turn on screen and backlight
+ }
}
}
+
+
void sendRawCommand(String command) {
if (client.connected()) {
sendIRC(command);
| |