So, hier ist nun mein Code:
//Zeitronix Packet format, bytes[]
//[0] always 0
//[1] always 1
//[2] always 2
//[3] 0 AFR
//[4] 1 EGT Low
//[5] 2 EGT High
//[6] 3 RPM Low
//[7] 4 RPM High
//[8] 5 MAP Low
//[9] 6 MAP High
//[10] 7 TPS
//[11] 8 USER1
//[12] 9 Config Register1
//[13]10 Config Register2
// 00 01 02 | D2 C8 00 00 00 FF 80 43 19 FE FF
// LCD
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
// Touchscreen
#define XPT_CS 4
#define XPT_IRQ 255
#define TS_LEFT 3900
#define TS_RT 300
#define TS_TOP 360
#define TS_BOT 3800
#include <SPI.h>
#include "Adafruit_GFX.h" // Hardware-specific library
#include <HX8347D_kbv.h>
HX8347D_kbv tft;
#include <XPT2046_Touchscreen.h>
XPT2046_Touchscreen ts(XPT_CS, XPT_IRQ);
// Schriftarten
#include <Fonts/FreeSansBoldOblique18pt7b.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/FreeSansBold18pt7b.h>
// Farben
#define BLACK 0x0000
#define GREEN 0x07E0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
// Variablen deklarieren
int Gui1=0;
int Gui2=0;
int Gui3=1;
// Zeitronix Variablen Deklarieren:
int gotPacket = 0;
char packet[11];
//EGT
byte EGT;
int EGTold=150;
int EGTnew=150;
int EGTminNew=800;
int EGTmaxNew=0;
int EGTminOld=800;
int EGTmaxOld=0;
//Fuel pressure
byte FuelPr;
double FuPnew=2;
double FuPold=2;
double FuPminNew=5;
double FuPmaxNew=0;
double FuPminOld=5;
double FuPmaxOld=0;
//Lambda/AFR
byte Lambda;
double Lda;
double LdaminNew=2;
double LdamaxNew=0;
double LdaminOld=2;
double LdamaxOld=0;
// Funktionen definieren
void GUI1(void);
void GUI2(void);
void GUI3(void);
//*******************************
//*******************************
void setup()
{
Serial.begin(9600);
tft.begin();
ts.begin();
// Startup Sequenz 3 Sekunden
GUI3();
delay(3000); //3000
GUI2();
Gui2=1;
Gui3=0;
}
//*********************************
//*********************************
// Start GUI
void GUI3()
{
tft.setFont(&FreeSansBoldOblique18pt7b);
tft.setTextSize(1);
tft.fillScreen(WHITE);
tft.fillRect(3,3,50,314,RED);
tft.fillRect(55,3,70,314,DARKGREY);
tft.fillRect(127,3,110,314,BLACK);
tft.setCursor(20,300);
tft.setTextColor(WHITE);
tft.println("Audi Sport");
}
// GUI EGT+ FuP+ Min/Max
void GUI1()
{
tft.setFont(&FreeSansBold18pt7b);
tft.setTextSize(1);
tft.fillRect(0,0,240,160,BLACK);
tft.fillRect(0,160,240,320,DARKGREY);
tft.setCursor(5, 50);
tft.setTextColor(GREEN);
tft.println("EGT:");
tft.setCursor(5, 130);
tft.setTextColor(GREEN);
tft.println("FuP:");
tft.setFont(&FreeSansBold9pt7b);
tft.setCursor(5, 220);
tft.setTextColor(GREEN);
tft.println("EGT:");
tft.setCursor(5, 260);
tft.setTextColor(GREEN);
tft.println("FuP:");
tft.setCursor(5, 300);
tft.setTextColor(GREEN);
tft.println("Lda:");
tft.setFont(&FreeSansBold9pt7b);
tft.setCursor(90, 175);
tft.setTextColor(GREEN);
tft.println("Min: Max:");
}
// GUI EGT+FuP
void GUI2()
{
tft.setFont(&FreeSansBold18pt7b);
tft.fillScreen(BLACK);
tft.setCursor(80, 50);
tft.setTextColor(RED);
tft.println("EGT:");
tft.setCursor(60, 200);
tft.setTextColor(ORANGE);
tft.println("Fuel pr.:");
}
//*************************************************************
//*************************************************************
// Zeitronix Datenverarbeitung
void getZeitronixPacket(char* packetpointer)
{
gotPacket = 0;
char buffer[32] = {0xF}; // 32 bytes buffer um Startsequenz zu finden "0x00 0x01 0x02"
for (int i=0; i<32; i++){
Serial.readBytes(&buffer[i],1);
if (i > 1 && buffer[i] == 2 && buffer[i-1] == 1 && buffer[i-2] == 0) {
//gotPacket = 1;
Serial.readBytes(packetpointer,11);
gotPacket = 1;
return;
}
}
}
//*************************************************************
//*************************************************************
void loop()
{
//Zeitronix*************************************************************
if (Serial.available()){
getZeitronixPacket(packet);}
if (gotPacket == 1)
{
EGT = packet[2]*256 + packet [1];
EGTnew = EGT*2;
FuelPr = packet[8];
FuPnew = ((2.5*(FuelPr/50.0))-1.25+1.5); // bar=2,5*V-1.25 // V=Wert in Volt; 0 bar = 0,5V
Lambda = packet[0];
Lda = Lambda/10.0/14.7;
//Zeitronix**Min/Max***********************************************************
if (EGT<EGTminNew) {EGTminNew=EGTnew;}
if (EGT>EGTmaxNew) {EGTmaxNew=EGTnew;}
if (FuPnew<FuPminNew) {FuPminNew=FuPnew;}
if (FuPnew>FuPmaxNew) {FuPmaxNew=FuPnew;}
if (Lda<LdaminNew) {LdaminNew=Lda;}
if (Lda>LdamaxNew) {LdamaxNew=Lda;}
}
//Touch+Gui*************************************************************
if (ts.touched())
{
TS_Point p = ts.getPoint(); //XPT_2046_touchscreen returns in Landscape
uint16_t y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
uint16_t x = map(p.x, TS_LEFT, TS_RT, 0, tft.width());
uint16_t w = tft.width() - 100;
uint16_t h = tft.height() - 110;
if ((x>50) && y && Gui1==0)
{ Gui1=1;
Gui2=0;
Gui3=0;
GUI1(); }
else if ((x>50) && y && Gui2==0)
{ Gui1=0;
Gui2=1;
Gui3=0;
GUI2(); }
else if ((x<50) && y )
{ Gui1=0;
Gui2=0;
Gui3=1;
GUI3(); }
}
// GUI EGT+ FuP+ Min/Max
if (Gui1 ==1)
{
tft.setFont();
tft.setTextSize(5);
tft.setCursor(130, 20);
tft.setTextColor(GREEN,BLACK);
tft.println(EGTnew);
tft.setCursor(110, 100);
tft.setTextColor(GREEN,BLACK);
tft.println(FuPnew);
tft.setFont(&FreeSansBold18pt7b);
tft.setTextSize(1);
if (EGTminNew < EGTminOld) {tft.setCursor(80, 220); tft.setTextColor(DARKGREY); tft.println(EGTminOld); tft.setTextColor(GREEN); tft.setCursor(80, 220); tft.println(EGTminNew);}
else {tft.setCursor(80, 220); tft.println(EGTminOld);}
if (EGTmaxNew > EGTmaxOld) {tft.setCursor(170, 220); tft.setTextColor(DARKGREY); tft.println(EGTmaxOld); tft.setTextColor(GREEN); tft.setCursor(170, 220); tft.println(EGTmaxNew);}
else {tft.setCursor(170, 220); tft.println(EGTmaxOld);}
if (FuPminNew < FuPminOld) {tft.setCursor(70, 260); tft.setTextColor(DARKGREY); tft.println(FuPminOld); tft.setTextColor(GREEN); tft.setCursor(70, 260); tft.println(FuPminNew);}
else {tft.setCursor(70, 260); tft.println(FuPminOld);}
if (FuPmaxNew > FuPmaxOld) {tft.setCursor(160, 260); tft.setTextColor(DARKGREY); tft.println(FuPmaxOld); tft.setTextColor(GREEN); tft.setCursor(160, 260); tft.println(FuPmaxNew);}
else {tft.setCursor(160, 260); tft.println(FuPmaxOld);}
if (LdaminNew < LdaminOld) {tft.setCursor(70, 300); tft.setTextColor(DARKGREY); tft.println(LdaminOld); tft.setTextColor(GREEN); tft.setCursor(70, 300); tft.println(LdaminNew);}
else {tft.setCursor(70, 300); tft.println(LdaminOld);}
if (LdamaxNew > LdamaxOld) {tft.setCursor(160, 300); tft.setTextColor(DARKGREY); tft.println(LdamaxOld); tft.setTextColor(GREEN); tft.setCursor(160, 300); tft.println(LdamaxNew);}
else {tft.setCursor(160, 300); tft.println(LdamaxOld);}
}
// GUI EGT+ FuP
else if (Gui2 ==1)
{
tft.setFont();
tft.setTextSize(10);
tft.setCursor(25, 80);
tft.setTextColor(RED,BLACK);
tft.println(EGTnew);
tft.setCursor(30, 230);
tft.setTextColor(ORANGE,BLACK);
tft.println(FuPnew);
}
// Old = New
EGTold=EGTnew;
FuPold=FuPnew;
EGTminOld=EGTminNew;
EGTmaxOld=EGTmaxNew;
FuPminOld=FuPminNew;
FuPmaxOld=FuPmaxNew;
LdaminOld=LdaminNew;
LdamaxOld=LdamaxNew;
}
Den Teil "// Zeitronix Datenverarbeitung" habe ich aus einem bereits existierenden Projekt abgeschaut, nachdem ich mich jetzt einige Wochen eingearbeitet habe kann ich meinen Fehler dennoch nicht finden..
Wenn es funktioniert werde ich sicher noch einiges optimieren, auch mit den Datentypen etc,
allerdings wollte ich erstmal die generelle Funktion sicherstellen.