#include "TiretoolNew_GSLC.h"
#include <SD.h>
#include "TS-NTC-103_simple.h"
// Save some element references for direct access
//<Save_References !Start!>
gslc_tsElemRef* Close_Log_Pup = NULL;
gslc_tsElemRef* DATA_TEXT_1 = NULL;
gslc_tsElemRef* DATA_TEXT_10 = NULL;
gslc_tsElemRef* DATA_TEXT_11 = NULL;
gslc_tsElemRef* DATA_TEXT_12 = NULL;
gslc_tsElemRef* DATA_TEXT_2 = NULL;
gslc_tsElemRef* DATA_TEXT_3 = NULL;
gslc_tsElemRef* DATA_TEXT_4 = NULL;
gslc_tsElemRef* DATA_TEXT_5 = NULL;
gslc_tsElemRef* DATA_TEXT_6 = NULL;
gslc_tsElemRef* DATA_TEXT_7 = NULL;
gslc_tsElemRef* DATA_TEXT_8 = NULL;
gslc_tsElemRef* DATA_TEXT_9 = NULL;
gslc_tsElemRef* Front_Left = NULL;
gslc_tsElemRef* Front_Right = NULL;
gslc_tsElemRef* Log_Del_n = NULL;
gslc_tsElemRef* Log_Del_y = NULL;
gslc_tsElemRef* NEXT_DATA = NULL;
gslc_tsElemRef* Open_Log = NULL;
gslc_tsElemRef* PREV_DATA = NULL;
gslc_tsElemRef* RESET = NULL;
gslc_tsElemRef* Rear_Left = NULL;
gslc_tsElemRef* Rear_Right = NULL;
gslc_tsElemRef* SAVE_SD = NULL;
gslc_tsElemRef* Save_Log_btn = NULL;
gslc_tsElemRef* m_pElemListbox1 = NULL;
gslc_tsElemRef* m_pElemRadial1 = NULL;
gslc_tsElemRef* m_pElemXRingGauge1 = NULL;
//<Save_References !End!>
// Define debug message function
static int16_t DebugOut(char ch) {
if (ch == (char)'\n') Serial.println("");
else Serial.write(ch);
return 0;
}
int counter (-1);
char logTemp[5];
char nullVal[5];
char logName[8];
static char nullnullval[7] = "---.--";
// Common Button callback
bool CbBtnCommon(void* pvGui, void *pvElemRef, gslc_teTouch eTouch, int16_t nX, int16_t nY)
{
// Typecast the parameters to match the GUI and element types
gslc_tsGui* pGui = (gslc_tsGui*)(pvGui);
gslc_tsElemRef* pElemRef = (gslc_tsElemRef*)(pvElemRef);
gslc_tsElem* pElem = gslc_GetElemFromRef(pGui, pElemRef);
gslc_tsElemRef* textfield[] = {
DATA_TEXT_1,
DATA_TEXT_2,
DATA_TEXT_3,
DATA_TEXT_4,
DATA_TEXT_5,
DATA_TEXT_6,
DATA_TEXT_7,
DATA_TEXT_8,
DATA_TEXT_9,
DATA_TEXT_10,
DATA_TEXT_11,
DATA_TEXT_12,
};
TS_NTC_103 sensor (0.11, 10);
float Temp (sensor.getTemp(analogRead(36)));
if ( eTouch == GSLC_TOUCH_UP_IN ) {
// From the element's ID we can determine which button was pressed.
switch (pElem->nId) {
//<Button Enums !Start!>
case E_ELEM_IMAGEBTN3:
gslc_SetPageCur(&m_gui, E_PG2);
break;
case E_ELEM_IMAGEBTN4:
gslc_SetPageCur(&m_gui, E_PG4);
break;
case E_ELEM_IMAGEBTN1:
gslc_SetPageCur(&m_gui, E_PG3);
break;
case E_ELEM_IMAGEBTN2:
gslc_SetPageCur(&m_gui, E_PG5);
break;
case E_ELEM_IMAGEBTN6:
gslc_SetPageCur(&m_gui, E_PG_MAIN);
break;
case E_ELEM_IMAGEBTN7:
gslc_SetPageCur(&m_gui, E_PG_MAIN);
break;
case E_ELEM_IMAGEBTN8:
gslc_SetPageCur(&m_gui, E_PG_MAIN);
break;
case E_ELEM_IMAGEBTN9:
gslc_SetPageCur(&m_gui, E_PG_MAIN);
break;
case NEXT_DATA_BTN:
counter++;
if (counter > 11) {
counter = 0;
}
snprintf(logTemp, MAX_STR, "%.2f", Temp);
gslc_ElemSetTxtStr(&m_gui, (textfield[counter]) , logTemp);
break;
case PREV_DATA_BTN:
if (counter >= 0)
{
snprintf(nullVal, MAX_STR, "%.2f", nullnullval);
gslc_ElemSetTxtStr(&m_gui, (textfield[counter]) , nullnullval);
counter --;
}
break;
case RESET_DATA_BTN:
gslc_SetPageCur(&m_gui, Log_Delete);
break;
case SAVE_SD_BTN:
gslc_SetPageCur(&m_gui, E_PG_POPUP3);
break;
case LOG_DEL_Y:
for (int i = 0; i < 12; i++) {
snprintf(nullVal, MAX_STR, "%.2f", nullnullval);
gslc_ElemSetTxtStr(&m_gui, (textfield[i]) , nullnullval);
delay (10);
}
counter = -1;
gslc_SetPageCur(&m_gui, E_PG5);
break;
case LOG_DEL_N:
gslc_SetPageCur(&m_gui, E_PG5);
break;
case OPEN_LOG_BTN:
break;
case SAVE_LOG_BTN:
for (int i = 0; i < 11; i++) {
appendFile(SD, logName,gslc_ElemGetTxtStr(&m_gui, (textfield[i])));
delay(200);
}
break;
case CLOSE_LOG_PUP:
gslc_SetPageCur(&m_gui, E_PG5);
break;
//<Button Enums !End!>
default:
break;
}
}
return true;
}
bool CbListbox(void* pvGui, void* pvElemRef, int16_t nSelId)
{
gslc_tsGui* pGui = (gslc_tsGui*)(pvGui);
gslc_tsElemRef* pElemRef = (gslc_tsElemRef*)(pvElemRef);
gslc_tsElem* pElem = gslc_GetElemFromRef(pGui, pElemRef);
if (pElemRef == NULL) {
return false;
}
// From the element's ID we can determine which listbox was active.
switch (pElem->nId) {
//<Listbox Enums !Start!>
case E_ELEM_LISTBOX1:
if (nSelId != XLISTBOX_SEL_NONE) {
gslc_ElemXListboxGetItem(&m_gui, pElemRef, nSelId, logName, MAX_STR);
}
break;
//<Listbox Enums !End!>
default:
break;
}
return true;
}
void setup()
{
// ------------------------------------------------
// Initialize
// ------------------------------------------------
Serial.begin(9600);
// Wait for USB Serial
//delay(1000); // NOTE: Some devices require a delay after Serial.begin() before serial port can be used
gslc_InitDebug(&DebugOut);
// ------------------------------------------------
// Create graphic elements
// ------------------------------------------------
InitGUIslice_gen();
uint8_t cardType = SD.cardType();
}
void appendFile(fs::FS &fs, const char * path, const char * message) {
Serial.printf("Appending to file: %s\n", path);
File file = fs.open(path, FILE_APPEND);
if (!file) {
Serial.println("Failed to open file for appending");
return;
}
if (file.print(message)) {
Serial.println("Message appended");
} else {
Serial.println("Append failed");
}
file.close();
}
// -----------------------------------
// Main event loop
// -----------------------------------
void loop()
{
// ------------------------------------------------
// Update GUI Elements
// ------------------------------------------------
if (counter <= 1) {
gslc_ElemSetGlow(&m_gui, Front_Left , true);
}
else {
gslc_ElemSetGlow(&m_gui, Front_Left , false);
}
if (counter >= 2 && counter <= 4 ) {
gslc_ElemSetGlow(&m_gui, Rear_Left , true);
}
else {
gslc_ElemSetGlow(&m_gui, Rear_Left , false);
}
if (counter >= 5 && counter <= 7) {
gslc_ElemSetGlow(&m_gui, Rear_Right , true);
}
else {
gslc_ElemSetGlow(&m_gui, Rear_Right , false);
}
if (counter >= 8 && counter <= 10) {
gslc_ElemSetGlow(&m_gui, Front_Right , true);
}
else {
gslc_ElemSetGlow(&m_gui, Front_Right , false);
}
// ------------------------------------------------
// Periodically call GUIslice update function
// ------------------------------------------------
gslc_Update(&m_gui);
}