Skip to content

Commit

Permalink
Merge pull request #73 from Dev-Cwsc/sleep-dim-implemented
Browse files Browse the repository at this point in the history
Sleep and screen dim added
  • Loading branch information
pr3y committed Jul 23, 2024
2 parents de50936 + c23093a commit 12ac901
Show file tree
Hide file tree
Showing 11 changed files with 186 additions and 27 deletions.
Binary file added Bruce3_Cardputer.bin
Binary file not shown.
Binary file added Bruce3_cplus1_1.bin
Binary file not shown.
Binary file added Bruce3_cplus2.bin
Binary file not shown.
2 changes: 1 addition & 1 deletion platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ default_envs =

[common]
build_flags =
-DBRUCE_VERSION='"1.1.2"'
-DBRUCE_VERSION='"1.2.0"'
-DMAXFILES=256
-DEEPROMSIZE=128
-DLH=8
Expand Down
6 changes: 6 additions & 0 deletions src/core/globals.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ extern int RfTx;

extern int RfRx;

// Screen sleep control variables
extern unsigned long previousMillis;
extern bool isSleeping;
extern bool isScreenOff;
extern bool dimmer;
extern int dimmerSet;

void readFGCOLORFromEEPROM();

Expand Down
37 changes: 31 additions & 6 deletions src/core/mykeyboard.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "mykeyboard.h"
#include "powerSave.h"


/* Verifies Upper Btn to go to previous item */
Expand All @@ -10,7 +11,13 @@ bool checkNextPress(){
#else
if(digitalRead(DW_BTN)==LOW)
#endif
{ return true; }
{
if(wakeUpScreen()){
delay(200);
return false;
}
return true;
}

else return false;
}
Expand All @@ -25,20 +32,33 @@ bool checkPrevPress() {
Keyboard.update();
if(Keyboard.isKeyPressed(',') || Keyboard.isKeyPressed(';'))
#endif
{ return true; }
{
if(wakeUpScreen()){
delay(200);
return false;
}
return true;
}

else return false;
}

/* Verifies if Select or OK was pressed */
bool checkSelPress(){
checkPowerSaveTime();
#if defined (CARDPUTER)
Keyboard.update();
if(Keyboard.isKeyPressed(KEY_ENTER) || digitalRead(0)==LOW)
#else
if(digitalRead(SEL_BTN)==LOW)
#endif
{ return true; }
{
if(wakeUpScreen()){
delay(200);
return false;
}
return true;
}

else return false;
}
Expand All @@ -52,9 +72,13 @@ bool checkEscPress(){
Keyboard.update();
if(Keyboard.isKeyPressed('`'))
#endif
{
returnToMenu=true;
return true;
{
if(wakeUpScreen()){
delay(200);
return false;
}
returnToMenu=true;
return true;
}
else { return false; }
}
Expand Down Expand Up @@ -244,6 +268,7 @@ String keyboard(String mytext, int maxSize, String msg) {

Keyboard.update();
if (Keyboard.isPressed()) {
wakeUpScreen();
tft.setCursor(cX,cY);
Keyboard_Class::KeysState status = Keyboard.keysState();
for (auto i : status.word) {
Expand Down
58 changes: 58 additions & 0 deletions src/core/powerSave.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#include "powerSave.h"
#include "settings.h"

/* Turn off the display */
void turnOffDisplay() {
#if !defined(STICK_C_PLUS)
analogWrite(BACKLIGHT, 0);
#else
axp192.ScreenBreath(0);
#endif
}

/* If the device screen is off, turn on, else just refresh sleep timer */
bool wakeUpScreen(){
previousMillis = millis();
if(isScreenOff){
isScreenOff = false;
dimmer = false;
getBrightness();
delay(200);
return true;
}else if(dimmer){
dimmer = false;
getBrightness();
delay(200);
return true;
}
return false;
}

/* Check if it's time to put the device to sleep */
void checkPowerSaveTime(){
if(dimmerSet!=0){
if((millis() - previousMillis) >= (dimmerSet * 1000) && dimmer == false && isSleeping == false){
dimmer = true;
setBrightness(5, false);
}else if((millis() - previousMillis) >= ((dimmerSet * 1000) + 5000) && isScreenOff == false && isSleeping == false){
isScreenOff = true;
turnOffDisplay();
}
}
}

/* Put device on sleep mode */
void sleepModeOn(){
isSleeping = true;
setCpuFrequencyMhz(80);
turnOffDisplay();
delay(200);
}

/* Wake up device */
void sleepModeOff(){
isSleeping = false;
setCpuFrequencyMhz(240);
getBrightness();
delay(200);
}
13 changes: 13 additions & 0 deletions src/core/powerSave.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#include "globals.h"
#include "display.h"

//It is here to not create a new set of files just to use AXP192 library again
void turnOffDisplay();

bool wakeUpScreen();

void checkPowerSaveTime();

void sleepModeOn();

void sleepModeOff();
75 changes: 60 additions & 15 deletions src/core/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "wifi_common.h"
#include "mykeyboard.h"
#include "sd_functions.h"
#include "powerSave.h"
#include <EEPROM.h>
/*
EEPROM ADDRESSES MAP
Expand Down Expand Up @@ -49,11 +50,13 @@ void setBrightness(int brightval, bool save) {
axp192.ScreenBreath(brightval);
#endif

bright=brightval;
EEPROM.begin(EEPROMSIZE); // open eeprom
EEPROM.write(2, brightval); //set the byte
EEPROM.commit(); // Store data to EEPROM
EEPROM.end(); // Free EEPROM memory
if(save){
bright=brightval;
EEPROM.begin(EEPROMSIZE); // open eeprom
EEPROM.write(2, brightval); //set the byte
EEPROM.commit(); // Store data to EEPROM
EEPROM.end(); // Free EEPROM memory
}
}

/*********************************************************************
Expand Down Expand Up @@ -111,6 +114,30 @@ int gsetRotation(bool set){
return result;
}

/*********************************************************************
** Function: setDimmerTime
** Set a timer for screen dimmer
**********************************************************************/
void setDimmerTime(int dimmerTime) {
if(dimmerTime>60 || dimmerTime<0) dimmerTime = 0;

dimmerSet=dimmerTime;
EEPROM.begin(EEPROMSIZE); // open eeprom
EEPROM.write(1, dimmerSet); //set the byte
EEPROM.commit(); // Store data to EEPROM
EEPROM.end(); // Free EEPROM memory
}

/*********************************************************************
** Function: getDimmerSet
** Get dimmerSet value from EEPROM
**********************************************************************/
void getDimmerSet() {
EEPROM.begin(EEPROMSIZE);
dimmerSet = EEPROM.read(1);
EEPROM.end(); // Free EEPROM memory
if(dimmerSet>60 || dimmerSet<0) setDimmerTime(0);
}

/*********************************************************************
** Function: setBrightnessMenu
Expand All @@ -131,24 +158,42 @@ void setBrightnessMenu() {


/*********************************************************************
** Function: setScreenOff
** Turn screen off for charging
** Function: setSleepMode
** Turn screen off and reduces cpu clock
**********************************************************************/
void setScreenOff() {
tft.setDisplayOff();
setBrightness(1);
delay(500);
void setSleepMode() {
sleepModeOn();
while (1) {
if (checkEscPress() || checkSelPress()) {
setBrightness(100);
tft.setDisplayOn();
#if defined(CARDPUTER)
if (checkEscPress() || checkSelPress())
#else
if (checkSelPress())
#endif
{
sleepModeOff();
returnToMenu = true;
break;
}
delay(100);
}
}

/*********************************************************************
** Function: setDimmerTimeMenu
** Handles Menu to set dimmer time
**********************************************************************/
void setDimmerTimeMenu() {
options = {
{"10s", [=]() { setDimmerTime(10); }},
{"20s", [=]() { setDimmerTime(20); }},
{"30s", [=]() { setDimmerTime(30); }},
{"60s", [=]() { setDimmerTime(60); }},
{"Disabled", [=]() { setDimmerTime(0); }},
};
delay(200);
loopOptions(options);
delay(200);
}

/*********************************************************************
** Function: setClock
** Handles Menu to set timezone to NTP
Expand Down
8 changes: 7 additions & 1 deletion src/core/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,17 @@ void getBrightness();

int gsetRotation(bool set = false);

void setDimmerTime(int dimmerTime);

void getDimmerSet();

void setBrightnessMenu();

void setUIColor();

void setScreenOff();
void setSleepMode();

void setDimmerTimeMenu();

void setClock();

Expand Down
14 changes: 10 additions & 4 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,23 @@
#include "esp32-hal-psram.h"

// Public Globals Variables
unsigned long previousMillis = millis();
int prog_handler; // 0 - Flash, 1 - LittleFS, 3 - Download
int rotation;
int IrTx;
int IrRx;
int RfTx;
int RfRx;
int dimmerSet=10;
int dimmerSet;
int bright=100;
int tmz=3;
bool sdcardMounted;
bool wifiConnected;
bool BLEConnected;
bool returnToMenu;
bool isSleeping = false;
bool isScreenOff = false;
bool dimmer = false;
char timeStr[10];
time_t localTime;
struct tm* timeInfo;
Expand Down Expand Up @@ -133,6 +137,7 @@ void setup() {
gsetRfTxPin();
gsetRfRxPin();
readFGCOLORFromEEPROM();
getDimmerSet();

//Start Bootscreen timer

Expand Down Expand Up @@ -174,7 +179,7 @@ void setup() {
// If M5 or Enter button is pressed, continue from here
Program:
delay(200);

previousMillis = millis();
}

/**********************************************************************
Expand Down Expand Up @@ -298,7 +303,8 @@ void loop() {
break;
case 5: //Config
options = {
{"Brightness", [=]() { setBrightnessMenu(); saveConfigs();}}, //settings.h
{"Brightness", [=]() { setBrightnessMenu(); saveConfigs();}}, //settings.h
{"Dim Time", [=]() { setDimmerTimeMenu();}},
{"Clock", [=]() { setClock(); saveConfigs();}}, //settings.h
{"Orientation", [=]() { gsetRotation(true); saveConfigs();}}, //settings.h
{"UI Color", [=]() { setUIColor(); saveConfigs();}},
Expand All @@ -308,7 +314,7 @@ void loop() {
{"RF TX Pin", [=]() { gsetRfTxPin(true); saveConfigs();}}, //settings.h
{"RF RX Pin", [=]() { gsetRfRxPin(true); saveConfigs();}}, //settings.h
#endif
{"Screen Off", [=]() { setScreenOff(); }},
{"Sleep", [=]() { setSleepMode(); }},
{"Restart", [=]() { ESP.restart(); }},
{"Main Menu", [=]() { backToMenu(); }},
};
Expand Down

0 comments on commit 12ac901

Please sign in to comment.