mirror of
https://github.com/nacabaro/nacapet.git
synced 2026-01-27 16:05:32 +00:00
Funcionan los temporizadores
Buenas noches
This commit is contained in:
parent
70a7144d52
commit
ef52dba409
@ -150,6 +150,7 @@ extern bool k4_prev;
|
|||||||
|
|
||||||
extern bool inactive;
|
extern bool inactive;
|
||||||
extern bool screenOff;
|
extern bool screenOff;
|
||||||
|
extern bool skipSleep;
|
||||||
|
|
||||||
extern uint64_t lastPressedButtonTime;
|
extern uint64_t lastPressedButtonTime;
|
||||||
extern uint64_t lastUpdateTime;
|
extern uint64_t lastUpdateTime;
|
||||||
|
|||||||
@ -19,27 +19,30 @@ void energy_setUpLightSleep() {
|
|||||||
Serial.println("Failed to set EXT1 Wake-Up as wake-up source.");
|
Serial.println("Failed to set EXT1 Wake-Up as wake-up source.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//esp_sleep_enable_timer_wakeup(SLEEP_TIME_US);
|
esp_sleep_enable_timer_wakeup(SLEEP_TIME_US);
|
||||||
}
|
}
|
||||||
|
|
||||||
void energy_startLightSleep() {
|
void energy_startLightSleep() {
|
||||||
|
if (skipSleep) {
|
||||||
|
skipSleep = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
esp_light_sleep_start();
|
esp_light_sleep_start();
|
||||||
|
|
||||||
// 6) Figure out which woke you
|
// 6) Figure out which woke you
|
||||||
auto cause = esp_sleep_get_wakeup_cause();
|
auto cause = esp_sleep_get_wakeup_cause();
|
||||||
if (cause == ESP_SLEEP_WAKEUP_EXT1) {
|
if (cause == ESP_SLEEP_WAKEUP_EXT0) {
|
||||||
uint64_t mask = esp_sleep_get_ext1_wakeup_status();
|
Serial.println("Woke by button on GPIO");
|
||||||
int pin = mask ? __builtin_ctzll(mask) : -1;
|
|
||||||
Serial.printf("Woke by button on GPIO %d\n", pin);
|
|
||||||
} else if (cause == ESP_SLEEP_WAKEUP_TIMER) {
|
} else if (cause == ESP_SLEEP_WAKEUP_TIMER) {
|
||||||
Serial.println("Woke by timer");
|
Serial.println("Woke by timer");
|
||||||
} else {
|
} else {
|
||||||
Serial.printf("Other wakeup: %d\n", cause);
|
Serial.printf("Other wakeup: %d\n", cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
runVpetTasks = true;
|
||||||
|
|
||||||
byte pinValue = digitalRead(26);
|
byte pinValue = digitalRead(26);
|
||||||
Serial.println(pinValue);
|
Serial.println(pinValue);
|
||||||
|
|
||||||
// 7) Re-init your display (SPI.begin(), tft.init(), redraw…)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
17
src/main.cpp
17
src/main.cpp
@ -65,12 +65,14 @@ uint8_t eggNumber = 0;
|
|||||||
TaskHandle_t secondLoop = NULL;
|
TaskHandle_t secondLoop = NULL;
|
||||||
TaskHandle_t readSteps = NULL;
|
TaskHandle_t readSteps = NULL;
|
||||||
|
|
||||||
|
bool skipSleep = false;
|
||||||
|
|
||||||
void loop2();
|
void loop2();
|
||||||
void secondCoreTask(void*);
|
void secondCoreTask(void*);
|
||||||
void loop_readSteps(void*);
|
void loop_readSteps(void*);
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
//Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
delay(100); // Give MPU6050 and ESP32 time to power up
|
delay(100); // Give MPU6050 and ESP32 time to power up
|
||||||
|
|
||||||
Wire.begin(MPU_SDA_PIN, MPU_SCL_PIN); // I2C init before MPU6050
|
Wire.begin(MPU_SDA_PIN, MPU_SCL_PIN); // I2C init before MPU6050
|
||||||
@ -102,11 +104,6 @@ void setup() {
|
|||||||
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if (screenOff) {
|
|
||||||
printf("[TEST] Going to sleep\n");
|
|
||||||
energy_startLightSleep();
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (screenKey) {
|
switch (screenKey) {
|
||||||
case TITLE_SCREEN:
|
case TITLE_SCREEN:
|
||||||
menu_drawTitle(bg);
|
menu_drawTitle(bg);
|
||||||
@ -197,9 +194,15 @@ void loop() {
|
|||||||
void loop2() {
|
void loop2() {
|
||||||
buttons_checkInactivity();
|
buttons_checkInactivity();
|
||||||
vpet_runVpetTasks();
|
vpet_runVpetTasks();
|
||||||
|
|
||||||
getLocalTime(&timeInfo, 50);
|
getLocalTime(&timeInfo, 50);
|
||||||
dayUnixTime = mktime(&timeInfo) % SECONDS_IN_DAY;
|
dayUnixTime = mktime(&timeInfo) % SECONDS_IN_DAY;
|
||||||
|
|
||||||
|
if (screenOff && !skipSleep) {
|
||||||
|
energy_startLightSleep();
|
||||||
|
} else if (screenOff && skipSleep) {
|
||||||
|
skipSleep = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void secondCoreTask(void*) {
|
void secondCoreTask(void*) {
|
||||||
|
|||||||
@ -54,5 +54,7 @@ void menu_reloadEggs(uint8_t selectedEgg) {
|
|||||||
lines_getSingleLine(fileName);
|
lines_getSingleLine(fileName);
|
||||||
lines_getLineCareMistakes(fileName);
|
lines_getLineCareMistakes(fileName);
|
||||||
|
|
||||||
|
vpetLastEvaluationTime = esp_timer_get_time();
|
||||||
|
|
||||||
charaData.hatching = true;
|
charaData.hatching = true;
|
||||||
}
|
}
|
||||||
@ -3,12 +3,12 @@
|
|||||||
int interruptKey = -1;
|
int interruptKey = -1;
|
||||||
|
|
||||||
void menu_timerFinishedScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData) {
|
void menu_timerFinishedScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData) {
|
||||||
lastPressedButtonTime = esp_timer_get_time();
|
|
||||||
digitalWrite(BL_PIN, HIGH);
|
|
||||||
|
|
||||||
screenOff = false;
|
screenOff = false;
|
||||||
inactive = false;
|
inactive = false;
|
||||||
|
|
||||||
|
lastPressedButtonTime = esp_timer_get_time();
|
||||||
|
digitalWrite(BL_PIN, HIGH);
|
||||||
|
|
||||||
beepCounter = 0;
|
beepCounter = 0;
|
||||||
|
|
||||||
screenKey = interruptKey;
|
screenKey = interruptKey;
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
hw_timer_t *actionTimerDelta = NULL;
|
hw_timer_t *actionTimerDelta = NULL;
|
||||||
bool runVpetTasks = false;
|
bool runVpetTasks = false;
|
||||||
|
|
||||||
|
uint64_t vpetLastEvaluationTime = esp_timer_get_time();
|
||||||
|
|
||||||
void vpet_initTimer() {
|
void vpet_initTimer() {
|
||||||
printf("[TIMER] Timer Init.\n");
|
printf("[TIMER] Timer Init.\n");
|
||||||
actionTimerDelta = timerBegin(0, 80, true);
|
actionTimerDelta = timerBegin(0, 80, true);
|
||||||
@ -21,7 +23,7 @@ void vpet_computeCallLight() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool vpet_evalSleep() {
|
bool vpet_evalSleep(uint8_t diff_sec) {
|
||||||
// Se devuelve true si quieres pausar los otros contadores
|
// Se devuelve true si quieres pausar los otros contadores
|
||||||
// False ejecutara los contadores correspondientes
|
// False ejecutara los contadores correspondientes
|
||||||
if (
|
if (
|
||||||
@ -58,7 +60,10 @@ bool vpet_evalSleep() {
|
|||||||
// durante el dia.
|
// durante el dia.
|
||||||
// Resultado, el personaje deberia de dormir una siesta
|
// Resultado, el personaje deberia de dormir una siesta
|
||||||
) {
|
) {
|
||||||
charaData.sleepCareMistakeCounter++;
|
charaData.sleepCareMistakeCounter += diff_sec;
|
||||||
|
if (charaData.hungerCareMistakeTimer <= 0) {
|
||||||
|
skipSleep = true;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -103,7 +108,7 @@ bool vpet_evalSleep() {
|
|||||||
// pero no se le ha mandado a dormir, empieza a contar para pasar
|
// pero no se le ha mandado a dormir, empieza a contar para pasar
|
||||||
// un care mistake
|
// un care mistake
|
||||||
) {
|
) {
|
||||||
charaData.sleepCareMistakeCounter++;
|
charaData.sleepCareMistakeCounter += diff_sec;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -124,7 +129,7 @@ bool vpet_evalSleep() {
|
|||||||
|
|
||||||
} else if (
|
} else if (
|
||||||
!charaData.gotLifeYearAdded &&
|
!charaData.gotLifeYearAdded &&
|
||||||
dayUnixTime < 1 // This stinks
|
dayUnixTime < 60 // This stinks
|
||||||
// Esto se ejecuta cuando es media noche.
|
// Esto se ejecuta cuando es media noche.
|
||||||
// Resultado: se incrementa la edad por 1
|
// Resultado: se incrementa la edad por 1
|
||||||
) {
|
) {
|
||||||
@ -148,11 +153,18 @@ void vpet_evalTimers() {
|
|||||||
vpet_evalStrengthTimer();
|
vpet_evalStrengthTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void vpet_evalHungerTimer() {
|
void vpet_reduceTimers(uint8_t diff_sec) {
|
||||||
if (charaData.hungerCareMistakeTimer > 0) {
|
if (charaData.hungerCareMistakeTimer > 0) {
|
||||||
charaData.hungerCareMistakeTimer--;
|
charaData.hungerCareMistakeTimer -= diff_sec;
|
||||||
|
}
|
||||||
|
|
||||||
} else if (
|
if (charaData.strengthCareMistakeTimer > 0) {
|
||||||
|
charaData.strengthCareMistakeTimer -= diff_sec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void vpet_evalHungerTimer() {
|
||||||
|
if (
|
||||||
charaData.hungerCareMistakeTimer <= 0 &&
|
charaData.hungerCareMistakeTimer <= 0 &&
|
||||||
charaData.hunger > 0
|
charaData.hunger > 0
|
||||||
) {
|
) {
|
||||||
@ -187,10 +199,7 @@ void vpet_evalHungerTimer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void vpet_evalStrengthTimer() {
|
void vpet_evalStrengthTimer() {
|
||||||
if (charaData.strengthCareMistakeTimer > 0) {
|
if (
|
||||||
charaData.strengthCareMistakeTimer--;
|
|
||||||
|
|
||||||
} else if (
|
|
||||||
charaData.strengthCareMistakeTimer <= 0 &&
|
charaData.strengthCareMistakeTimer <= 0 &&
|
||||||
charaData.strength > 0
|
charaData.strength > 0
|
||||||
) {
|
) {
|
||||||
@ -223,8 +232,16 @@ void IRAM_ATTR onActionTimerDelta() {
|
|||||||
|
|
||||||
void vpet_runVpetTasks() {
|
void vpet_runVpetTasks() {
|
||||||
if (runVpetTasks && charaData.hatched) {
|
if (runVpetTasks && charaData.hatched) {
|
||||||
|
uint64_t currentEvaluationTime = esp_timer_get_time();
|
||||||
|
uint64_t deltaUs = currentEvaluationTime - vpetLastEvaluationTime;
|
||||||
|
printf("[DELTA] deltaUpdate=%lu\n", deltaUs);
|
||||||
|
uint8_t diffSec = (deltaUs + 1000000 - 1000) / 1000000; // round up
|
||||||
|
|
||||||
|
printf("[DEBUG] diffSec=%i\n", diffSec);
|
||||||
|
|
||||||
vpet_computeCallLight();
|
vpet_computeCallLight();
|
||||||
if (!vpet_evalSleep()) {
|
if (!vpet_evalSleep(diffSec)) {
|
||||||
|
vpet_reduceTimers(diffSec);
|
||||||
vpet_evalTimers();
|
vpet_evalTimers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,10 +253,15 @@ void vpet_runVpetTasks() {
|
|||||||
printf("[MAIN]: Care mistake count is %d\n", charaData.careMistakes);
|
printf("[MAIN]: Care mistake count is %d\n", charaData.careMistakes);
|
||||||
printf("[MAIN]: Is sleep care mistake tripped? %d\n", charaData.sleepCareMistakeObtained);
|
printf("[MAIN]: Is sleep care mistake tripped? %d\n", charaData.sleepCareMistakeObtained);
|
||||||
|
|
||||||
|
vpetLastEvaluationTime = currentEvaluationTime;
|
||||||
runVpetTasks = false;
|
runVpetTasks = false;
|
||||||
|
|
||||||
} else if (runVpetTasks && !charaData.hatched && charaData.hatching) {
|
} else if (runVpetTasks && !charaData.hatched && charaData.hatching) {
|
||||||
charaData.hatchTimer++;
|
uint64_t currentEvaluationTime = esp_timer_get_time();
|
||||||
|
uint64_t deltaUs = currentEvaluationTime - vpetLastEvaluationTime;
|
||||||
|
uint8_t diffSec = (deltaUs + 1000000 - 1000) / 1000000; // round up
|
||||||
|
|
||||||
|
charaData.hatchTimer += diffSec;
|
||||||
printf("[DEBUG] hatchTimer=%i out of hatchTimer=%i\n", charaData.hatchTimer, currentLine[currentCharacter]->hatchTime);
|
printf("[DEBUG] hatchTimer=%i out of hatchTimer=%i\n", charaData.hatchTimer, currentLine[currentCharacter]->hatchTime);
|
||||||
if (charaData.hatchTimer > currentLine[currentCharacter]->hatchTime) {
|
if (charaData.hatchTimer > currentLine[currentCharacter]->hatchTime) {
|
||||||
interruptKey = EGG_HATCH_SCREEN;
|
interruptKey = EGG_HATCH_SCREEN;
|
||||||
@ -247,5 +269,7 @@ void vpet_runVpetTasks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
runVpetTasks = false;
|
runVpetTasks = false;
|
||||||
|
|
||||||
|
vpetLastEvaluationTime = currentEvaluationTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3,12 +3,15 @@
|
|||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
extern uint64_t vpetLastEvaluationTime;
|
||||||
|
|
||||||
void IRAM_ATTR onActionTimerDelta();
|
void IRAM_ATTR onActionTimerDelta();
|
||||||
void vpet_initTimer();
|
void vpet_initTimer();
|
||||||
void vpet_computeCallLight();
|
void vpet_computeCallLight();
|
||||||
bool vpet_evalSleep();
|
bool vpet_evalSleep(uint8_t diff_sec);
|
||||||
void vpet_evalTimers();
|
void vpet_evalTimers();
|
||||||
void vpet_runVpetTasks();
|
void vpet_runVpetTasks();
|
||||||
|
void vpet_reduceTimers(uint8_t diff_sec);
|
||||||
void vpet_evalHungerTimer();
|
void vpet_evalHungerTimer();
|
||||||
void vpet_evalStrengthTimer();
|
void vpet_evalStrengthTimer();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user