#include <SPI.h>
#include <Wire.h>
#include <Adafruit_LvGL_Glue.h> // Always include this BEFORE lvgl.h!
#include <lvgl.h>
#include <Adafruit_ILI9341.h>
#include "my_const.h"
unsigned long startTime;
unsigned long startTimeMcuData;
#define PIN_MCU_RX 4 // Receive data from MCU (e.g. RPM)
#define PIN_MCU_TX 16 // Send data to MCU
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
Adafruit_LvGL_Glue glue;
void lvgl_setup(void) {
// Create simple label centered on screen
lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Hello Adafruit + Wokwi lovers!");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
}
void setup() {
//Serial.begin(115200);
SerialMCU.begin(19200, SERIAL_8N1, PIN_MCU_RX, PIN_MCU_TX);
pinMode(PIN_IDLE_SWITCH, INPUT_PULLUP);
// Test for LVGL
// Initialize display BEFORE glue setup
tft.begin();
tft.setRotation(TFT_ROTATION);
//pinMode(TFT_BACKLIGHT, OUTPUT);
//digitalWrite(TFT_BACKLIGHT, HIGH);
// Initialize glue, passing in address of display & touchscreen
LvGLStatus status = glue.begin(&tft, false);//, &ctp);
if(status != LVGL_OK) {
for(;;);
}
lvgl_setup(); // Call UI-building function above
}
void getData(char* command, uint8_t response_length, char* response) {
// Clear serial buffer
if (SerialMCU.available()) { // clears out any junk
do {byte junk = SerialMCU.read();}
while (SerialMCU.available() > 0);
Serial.println(F("Serial buffer cleared"));
}
SerialMCU.write(command);
//if ((millis() - startTime) < MCU_TIMEOUT) {
startTime = millis();
while (!SerialMCU.available());
Serial.print(F("SerialMCU.available(): "));
Serial.println(SerialMCU.available());
if (SerialMCU.available() == response_length) {
char response[response_length];
SerialMCU.readBytes(response, response_length);
Serial.print(F("Response: "));
Serial.println(response);
} else {
Serial.println(F("Response length did not match"));
}
/* } else {
Serial.println(F("MCU Timeout"));
startTime = millis();
} */
}
void loop() {
lv_task_handler(); // Call LittleVGL task handler periodically
delay(5);
checkIdleSwitchState();
/* if (millis() - startTimeMcuData >= 500) {
char rpm_value[3];
getData("r00?", 3, rpm_value);
startTimeMcuData = millis();
} */
}