#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 9
#define TFT_CS 10
#define GREEN 0xDF96
#define RED 0xE2D4
#define BLUE 0x071B
#define BROWN 0xDB80
#define BACKGROUND_GREEN 0xBEF1
#define BLACK 0x0000
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
int potPin=5;
int potValue=0;
int currNumOfSegments=0;
short segmentAngle=3;
short greenStartAngle=0;
short redStartAngle=0;
void setup() {
tft.begin();
Serial.begin(9600);
}
void drawSegment(short startAngle, float numberOfSegments, uint16_t color, boolean forward){
float x0=0;
float y0=0;
float x1=0;
float y1=0;
short xCenter=150;
short yCenter=200;
short R0=70;
short R1=20;
float radianAngle=0;
for(byte count=0; count<numberOfSegments; count++){
if(forward){
radianAngle=(startAngle+segmentAngle*count)*0.0174533;
}else{
radianAngle=(startAngle-segmentAngle*count)*0.0174533;
}
x0=xCenter+R0*cos(radianAngle);
y0=yCenter+R0*sin(radianAngle);
x1=x0+R1*cos(radianAngle);
y1=y0+R1*sin(radianAngle);
tft.drawLine(x0, y0, x1, y1, color);
}
}
void loop() {
int newPotValue = analogRead(potPin);
if(potValue==0){
potValue=newPotValue;
}
if(potValue==newPotValue){
return;
}
potValue=newPotValue;
int newNumOfSegments=(potValue/1023.0)*45;
if(currNumOfSegments==0){
drawSegments(newNumOfSegments);
return;
}
int diff=newNumOfSegments-currNumOfSegments;
if(diff<0){
Serial.print("currNumOfSegments ");
Serial.println(currNumOfSegments);
short startFromAngle=180+currNumOfSegments*segmentAngle-segmentAngle;
Serial.print("startFromAngle ");
Serial.println(startFromAngle);
Serial.print("diff ");
Serial.println(diff);
drawSegment(startFromAngle,abs(diff),BLACK, false);
// tft.fillScreen(BLACK);
}else{
short continueFromAngle=180+currNumOfSegments*segmentAngle;
if(currNumOfSegments<=35){
Serial.print("currNumOfSegments ");
Serial.println(currNumOfSegments);
Serial.print("cont angle ");
Serial.println(continueFromAngle);
drawSegment(continueFromAngle,diff,GREEN, true);
}else{
// continueFromAngle+=+segmentAngle;
// Serial.print("currNumOfSegments ");
// Serial.println(currNumOfSegments);
// Serial.print("cont angle ");
// Serial.println(continueFromAngle);
// drawSegment(continueFromAngle,35-currNumOfSegments,GREEN, true);
// continueFromAngle+=diff*segmentAngle;
Serial.print("currNumOfSegments ");
Serial.println(currNumOfSegments);
Serial.print("red cont angle ");
Serial.println(continueFromAngle);
Serial.print("newNumOfSegments ");
Serial.println(newNumOfSegments);
drawSegment(continueFromAngle,newNumOfSegments-35,RED, true);
}
}
currNumOfSegments=newNumOfSegments;
delay(500);
}
void drawSegments(int newNumOfSegments){
if(newNumOfSegments<=35){
drawSegment(180,newNumOfSegments,GREEN, true);
}else{
drawSegment(180,35,GREEN, true);
drawSegment(285,newNumOfSegments-35,RED, true);
}
currNumOfSegments=newNumOfSegments;
}