steering-wheel-evo/lib/FT18e_STW_DISPLAY/FT18e_STW_DISPLAY.cpp
jvblanck 895280cb5a Don't send data if display is disconnected
Otherwise, we're waiting 1s on pretty much any call to the display. If
the display gets disconnected at the start of the `update_display()`
function, that can mean quite the delay.

It's possible that this delay triggers a watchdog timer that blinks the
LEDs, but there doesn't appear to be any watchdog timer configured.
2021-07-18 18:27:47 +02:00

171 lines
3.9 KiB
C++

#include "Arduino.h"
#include "EDIPTFT.h"
#include "FT_2018e_STW_CAN.h"
#include "FT18e_STW_INIT.h"
#include "FT18e_STW_DISPLAY.h"
EDIPTFT tft(true, false);
String bezeichnungen[] = {"Batterieleistung", "Moment", "Batterietemp"};
//"T_mot","T_oil","P_oil","% fa","U_batt","P_wat","T_air",
//"P_b_front","P_b_rear","Error Type","Speed_fl","Speed_fr","Speed"};
//"Drehzahl","P_fuel","Index"
int vergleichsindex;
int sizeaalt;
int sizeaneu;
int sizebalt;
int sizebneu;
int sizecalt;
int sizecneu;
int sizedalt;
int sizedneu;
int sizeealt;
int sizeeneu;
uint8_t clearcounter = 56;
uint8_t modealt = Stw_data.mode;
uint8_t trccounter; // = Stw_data.trc;
uint8_t modecounter; // = Stw_data.mode;
bool trctimer;
bool modetimer;
int led_s[] = {led1, led2, led3, led4, led5, led6, led7, led8, led9, led10, led11, led12, led13, led14, led15, led16};
unsigned long poiltimer;
unsigned long tmottimer;
unsigned long toiltimer;
bool poilbool = true;
bool tmotbool = true;
bool toilbool = true;
void init_display()
{
pinMode(writeprotect, OUTPUT);
digitalWrite(writeprotect, HIGH);
pinMode(reset, OUTPUT);
pinMode(disp_cs, OUTPUT);
pinMode(MOSI, OUTPUT);
pinMode(MISO, OUTPUT);
//pinMode(CLK, INPUT);
digitalWrite(disp_cs, HIGH);
digitalWrite(MOSI, HIGH);
digitalWrite(MISO, HIGH);
digitalWrite(reset, LOW);
//edip.smallProtoSelect(7);
//edip.setNewColor(EA_GREY, 0xe3, 0xe3,0xe3); // redefine r-g-b-values of EA_GREY
//edip.drawImage(0,50,FASTTUBE_LOGO_PNG);
digitalWrite(reset, HIGH);
tft.begin(115200); // start display communication
/*int h = 20;
char charh[2];
String strh = String(h);
strh.toCharArray(charh,2);
tft.DisplayLight(charh);*/
tft.cursorOn(false);
tft.terminalOn(false);
tft.setDisplayColor(EA_WHITE, EA_BLACK);
tft.setTextColor(EA_WHITE, EA_BLACK);
//tft.setTextFont('4');
tft.setTextSize(5, 8);
tft.clear();
//tft.displayLight('30');
tft.drawText(0, 14, 'C', "FaSTTUBe"); //draw some text
//tft.loadImage(0,0,1);
//delay(2000);
}
double get_value(int a)
{
return 0;
}
void update_display()
{
if (!tft.disconnected)
{
tft.cursorOn(false);
if (modealt != Stw_data.mode || modetimer == true)
{
display_mode();
}
else
{
if (clearcounter >= 56)
{
tft.clear();
clearcounter = 0;
}
clearcounter += 1;
}
}
}
void display_mode()
{
if (modealt != Stw_data.mode)
{
tft.clear();
tft.setTextSize(6, 8);
tft.setDisplayColor(EA_WHITE, EA_RED);
tft.setTextColor(EA_WHITE, EA_RED);
char modeanzeige[7];
String str = String("MODE:");
str += String(Stw_data.mode);
str.toCharArray(modeanzeige, 7);
tft.drawText(0, 0, 'L', " ");
tft.drawText(0, 60, 'L', " ");
tft.drawText(0, 120, 'L', " ");
tft.drawText(0, 180, 'L', " ");
tft.drawText(15, 68, 'L', modeanzeige);
modecounter = 0;
modealt = Stw_data.mode;
modetimer = true;
}
else if (modecounter >= 255)
{
tft.setDisplayColor(EA_WHITE, EA_BLACK);
tft.setTextColor(EA_WHITE, EA_BLACK);
tft.clear();
modetimer = false;
}
else
{
modecounter += 1;
delay(5);
}
}
void alarm(String textstr)
{
uint8_t x = 1;
;
char text[7];
textstr.toCharArray(text, 7);
tft.setTextSize(8, 8);
while (x == 1)
{
if (!tft.disconnected)
{
tft.setTextColor(EA_BLACK, EA_RED);
tft.fillDisplayColor(EA_RED);
tft.drawText(5, 68, 'L', text);
}
for (int j = 0; j < 16; j++)
{
digitalWrite(led_s[j], HIGH);
}
delay(100);
if (!tft.disconnected)
{
tft.setTextColor(EA_BLACK, EA_WHITE);
tft.fillDisplayColor(EA_WHITE);
tft.drawText(5, 68, 'L', text);
}
for (int j = 0; j < 16; j++)
{
digitalWrite(led_s[j], LOW);
}
delay(100);
if (Stw_data.button_ll & Stw_data.button_rr)
{
x = 0;
tft.setTextColor(EA_WHITE, EA_BLACK);
}
}
}