#include "Free_Fonts.h"
#include <TFT_eSPI.h>
#include <SPI.h> // this is needed for display
#include "tft_menu.h"
#include "zz_icons.h"
// The display also uses hardware SPI, plus #9 & #10
#define TFT_CS 15
#define TFT_DC 2
#define TFT_MOSI 23
#define TFT_SCLK 18
float dispTemp = 22.3;
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library with default width and height
ItemMenu MainMenu(&tft);
EditMenu OptionMenu(&tft);
EditMenu ColorMenu(&tft, false);
EditMenu WirelessMenu(&tft);
#define MENU_TEXT TFT_GREEN
#define MENU_BACKGROUND TFT_WHITE
#define MENU_HIGHLIGHTTEXT TFT_CYAN
#define MENU_HIGHLIGHT TFT_GREEN
#define MENU_SELECTTEXT TFT_YELLOW
// variables
int MenuOption1 = 0,
MenuOption2 = 0,
MenuOption3 = 0,
MenuOption4 = 0,
MenuOption5 = 0,
MenuOption6 = 0,
bone = 78;
void ksm(int start_x,int start_y,int tiltAngle,int len,int * xee, int * yee) {
float tiltAngleRad = tiltAngle * DEG_TO_RAD; // convert angle to radians
int end_x = start_x + (len * sin (tiltAngleRad)); // Ending x-coordinate offset & radius
int end_y = start_y - (len * cos (tiltAngleRad)); // Ending y-coordinate offset & radius
*xee = end_x;
*yee = end_y;
tft.drawLine(start_x ,start_y,end_x,end_y,TFT_WHITE);
//tft.drawLine(start_x+1 ,start_y+1,end_x,end_y,TFT_WHITE);
}
void setup(void) {
tft.begin();
tft.setRotation(1);
int start_x = 5;
int start_y = 20;
int width_ = tft.width() - (2*start_x) ;
int height_ = 100;
int radius_ = 5;
uint16_t rect_color = TFT_RED;
int rect_thickness = 3;
// print VIN
tft.setTextSize(2);
tft.setTextColor(TFT_WHITE);
tft.setCursor( 2, 2);
tft.println("Vin: --");
draw_rect(start_x,start_y,width_,height_,radius_,rect_color,rect_thickness);
// print RPM label
tft.setTextSize(2);
tft.setTextColor(TFT_WHITE);
tft.setCursor( tft.width()-90, start_y+(height_/2)-40);
tft.println("Engine");
// print RPM UNIT
tft.setTextSize(3);
tft.setTextColor(TFT_WHITE);
tft.setCursor( tft.width()-90, start_y+(height_/2)+20);
tft.println("RPM");
// print RPM value
tft.setTextSize(6);
tft.setTextColor(TFT_WHITE,TFT_BLACK);
tft.setCursor( (tft.width()/2)-30, start_y+(height_/2)-20);
tft.println(" 0 ");
int vertical_gap = 20+height_;
draw_rect(start_x,start_y+vertical_gap,width_,height_,radius_,rect_color,rect_thickness);
// print speed label
tft.setTextSize(2);
tft.setTextColor(TFT_WHITE);
tft.setCursor( tft.width()-90, start_y+vertical_gap+(height_/2)-40);
tft.println("Speed");
// print speedUNIT
tft.setTextSize(3);
tft.setTextColor(TFT_WHITE);
tft.setCursor( tft.width()-90, start_y+vertical_gap+(height_/2)+20);
tft.println("Km/H");
// print speed value
tft.setTextSize(6);
tft.setTextColor(TFT_WHITE,TFT_BLACK);
tft.setCursor( (tft.width()/2)-30, start_y+vertical_gap+(height_/2)-20);
tft.println(" 0 ");
return;
}
void draw_rect(int xx, int yy, int ww, int hh, int rad, uint16_t color, int thick) {
int startee = 0;
for ( byte x = 0; x < thick; x++ ) {
tft.drawRoundRect(xx+startee,yy+startee,ww-(2*startee),hh-(2*startee),rad,TFT_RED);
startee++;
}
}
void loop() {
}
void themeClockTFT(float value, const String& lable, const String& units, const String& valueSample, const String& valueType, unsigned int accuracy) {
int xpos = 10;
int ypos = 45;
int yPad = 0;
int padding = tft.textWidth(String(value, accuracy), FONT8);
tft.setTextDatum(TL_DATUM);
tft.drawString(lable, xpos, ypos, FONT4);
tft.setTextDatum(TR_DATUM);
tft.drawString(units, 240 - xpos, ypos, FONT4);
tft.setTextDatum(TL_DATUM);
tft.setTextPadding(padding);
ypos += tft.fontHeight(FONT8) / 2 + yPad;
tft.drawFloat(value, accuracy, (240 - padding) / 2, ypos, FONT8);
tft.setTextPadding(0);
}