#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_CLK 13
#define TFT_MISO 12
#define TFT_MOSI 11
#define TFT_DC 9
#define TFT_CS 10
#define TFT_RST 8
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
#define ENCODER_CLK 2
#define ENCODER_DT 3
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define ORANGE 0xFAA1
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define GREY 0x2108
#define DARK_GREY 0x39C7
#define TEXT_COLOR 0xFFFF
#define DEG2RAD 0.0174532925
// note: all coordinates relative to center_x, center_y
float center_x = 160; // center x of tachometer - 240x240 TFT
float center_y = 120; // center y of tachometer - 240x240 TFT
float needletail_x = 100;
float needletail_y = 100;
float needletail_x_old = 100;
float needletail_y_old = 100;
int radius = 205;
float angle = 0;
float needle_x = 0; // needle pivot = center
float needle_y = 0; // needle pivot = center
float needle_x_old = 160;
float needle_y_old = 120;
int step = 0; // Offset Nadel bei Start
int stepx = 0;
void needle (){
//tft.drawLine (needle_x_old, needle_y_old, center_x, center_y, 0x0000); // line right
//tft.drawLine (center_x, center_y, needletail_x_old, needletail_y_old, 0x0000); // line right
angle = (((step)*DEG2RAD)-(3.14159265359));
needle_x = (center_x + ((radius)*cos(angle)));
needle_y = (center_y + ((radius)*sin(angle)));
needletail_x = (center_x - ((radius)*cos(angle)));
needletail_y = (center_y - ((radius)*sin(angle)));
needle_x_old = needle_x;
needle_y_old = needle_y;
needletail_x_old = needletail_x;
needletail_y_old = needletail_y;
tft.fillTriangle(needle_x, needle_y, needle_x, needle_y-50, center_x, center_y, 0x001F); // dreieck blau rechts
tft.fillTriangle(needle_x, needle_y+50, needle_x, needle_y, center_x, center_y, 0xFAA1); // dreieck braun recht
tft.fillTriangle(center_x, center_y, needletail_x, needletail_y-50, needletail_x, needletail_y, 0x001F); // dreieck blau rechts
tft.fillTriangle(center_x, center_y, needletail_x, needletail_y, needletail_x, needletail_y+50, 0xFAA1); // dreieck braun rechts
//tft.drawLine (center_x, center_y, needletail_x, needletail_y, 0xFFFF); // line right
//tft.drawLine (needle_x, needle_y, center_x, center_y, 0xFFFF); // line left
}
void setup(void) {
tft.begin ();
tft.setRotation (1);
tft.fillScreen (BLACK);
//needle ();
tft.fillRect(0, 0, 320, 120, 0x001F); // Background top
tft.fillRect(0, 120, 320, 120, 0xFAA1); // Background bottom
Serial.begin(115200);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}
void readEncoder() {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
step = step -1;
Serial.println(step); //Rotated ccw
}
if (dtValue == LOW) {
step = step +1;
Serial.println(step); //Rotated cw
}
}
void loop (){
needle ();
//delay(200);
}