mirror of
https://github.com/nacabaro/nacapet.git
synced 2026-01-28 00:15:32 +00:00
161 lines
4.3 KiB
C++
161 lines
4.3 KiB
C++
#include <Arduino.h>
|
|
#include "display/display.h"
|
|
#include "memory/memory.h"
|
|
#include "storage/storage.h"
|
|
#include "animations/animations.h"
|
|
#include "debug/debug.h"
|
|
#include "defs/defs.h"
|
|
#include "defs/chara_data.h"
|
|
#include "menu/menu.h"
|
|
#include "buttons/buttons.h"
|
|
#include "vpet/vpet.h"
|
|
#include "vpet/steps/steps.h"
|
|
|
|
const char* TAG = "[MAIN]";
|
|
|
|
TFT_eSPI tft = TFT_eSPI();
|
|
TFT_eSprite composite = TFT_eSprite(&tft);
|
|
TFT_eSprite sprite = TFT_eSprite(&tft);
|
|
TFT_eSprite bg = TFT_eSprite(&tft);
|
|
|
|
struct BackgroundData backgroundData;
|
|
struct SpriteData mainCharacterSprites;
|
|
struct SpriteData menuElementsData;
|
|
struct SpriteData uiElementsData;
|
|
|
|
struct CharacterData charaData;
|
|
|
|
int screenKey = TITLE_SCREEN;
|
|
int menuKey = STATUS_SCREEN_MENU;
|
|
int submenuKey = -1;
|
|
|
|
uint32_t dayUnixTime = 0;
|
|
uint16_t stepCounter = 0;
|
|
|
|
struct tm timeInfo;
|
|
|
|
MPU6050 mpu;
|
|
ESP32Time rtc(0);
|
|
TaskHandle_t secondLoop = NULL;
|
|
|
|
void loop2();
|
|
void secondCoreTask(void*);
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
delay(100); // Give MPU6050 and ESP32 time to power up
|
|
|
|
Wire.begin(MPU_SDA_PIN, MPU_SCL_PIN); // I2C init before MPU6050
|
|
mpu.initialize();
|
|
|
|
tft_initDisplay(tft, TFT_BLACK);
|
|
tft_initScreenBuffer(composite, TFT_BLACK);
|
|
|
|
storage_init();
|
|
|
|
storage_readFile("/sprite.bin", &mainCharacterSprites);
|
|
storage_readFile("/menu.bin", &menuElementsData);
|
|
storage_readFile("/ui.bin", &uiElementsData);
|
|
|
|
storage_initBackground("/bg.bin", bg);
|
|
|
|
debug_printFreeMemory();
|
|
|
|
pinMode(K1_PIN, INPUT_PULLUP);
|
|
pinMode(K2_PIN, INPUT_PULLUP);
|
|
pinMode(K3_PIN, INPUT_PULLUP);
|
|
pinMode(K4_PIN, INPUT_PULLUP);
|
|
|
|
charaData.hunger = 4;
|
|
charaData.strength = 4;
|
|
charaData.effort = 4;
|
|
|
|
charaData.evoLeftTimer = 60;
|
|
charaData.hungerCareMistakeTimer = 60;
|
|
charaData.strengthCareMistakeTimer = 60;
|
|
|
|
xTaskCreatePinnedToCore(secondCoreTask, "VPET_EVAL", 4096, NULL, 0, &secondLoop, 0);
|
|
}
|
|
|
|
|
|
void loop() {
|
|
switch (screenKey) {
|
|
case TITLE_SCREEN:
|
|
menu_drawTitle(composite, bg);
|
|
break;
|
|
|
|
case CLOCK_EDIT_SCREEN:
|
|
menu_drawClockEdit(composite, bg);
|
|
break;
|
|
|
|
case CLOCK_SCREEN:
|
|
menu_drawClock(composite, bg, menuKey);
|
|
break;
|
|
|
|
case IDLE_SCREEN:
|
|
menu_drawIdleScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
|
|
break;
|
|
|
|
case MENU_SCREEN:
|
|
menu_drawCurrentMenuOption(composite, bg, sprite, &menuElementsData);
|
|
break;
|
|
|
|
case STATUS_SCREEN:
|
|
menu_statusScreen(composite, bg, sprite, &uiElementsData, &charaData);
|
|
break;
|
|
|
|
case OFF_SCREEN:
|
|
menu_offScreen(composite);
|
|
break;
|
|
|
|
case TIMER_FINISHED_SCREEN:
|
|
menu_timerFinishedScreen(composite, bg, sprite, &mainCharacterSprites);
|
|
break;
|
|
|
|
case FOOD_SCREEN:
|
|
menu_foodScreen(composite, bg, sprite, &uiElementsData);
|
|
break;
|
|
|
|
case FEEDING_SCREEN:
|
|
menu_feedingScreen(composite, bg, sprite, &uiElementsData, &mainCharacterSprites, submenuKey);
|
|
break;
|
|
|
|
case REFUSING_SCREEN:
|
|
menu_refuseScreen(composite, bg, sprite, &mainCharacterSprites);
|
|
break;
|
|
|
|
case SLEEPY_SCREEN:
|
|
menu_sleepyScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData);
|
|
break;
|
|
|
|
case SLEEP_SCREEN:
|
|
menu_sleepingScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
|
|
break;
|
|
|
|
case CARE_MISTAKE_SCREEN:
|
|
menu_careMistakeScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData);
|
|
break;
|
|
|
|
case POOPING_SCREEN:
|
|
menu_poopScreen(composite, bg, sprite, &mainCharacterSprites, &uiElementsData, &menuElementsData);
|
|
break;
|
|
|
|
case CLEAR_POOP_SCREEN:
|
|
menu_clearPoopScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
|
|
break;
|
|
|
|
case HAPPY_SCREEN:
|
|
menu_drawHappyScreen(composite, bg, sprite, &mainCharacterSprites, &uiElementsData);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void loop2() {
|
|
steps_countSteps();
|
|
buttons_checkInactivity();
|
|
vpet_runVpetTasks();
|
|
}
|
|
|
|
void secondCoreTask(void*) {
|
|
for (;;) { loop2(); }
|
|
} |