#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <Adafruit_FT6206.h>
//#include <SPI.h>
#include <Wire.h>
#define TFT_DC 8
#define TFT_LED 9
#define TFT_CS 10
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_SCK 13
//#define TFT_SDA 14
//#define TFT_SCL 15
#define TFT_RST PD3
//#define TOUCH_INT value
#define TS_I2C_ADDRESS 0x38
#define Inter_ex_A PB8
#define Pin_B PB9
#define SW PA5
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
Adafruit_FT6206 ts = Adafruit_FT6206();
int j=5, counter=1, pos=0, k=10;
String value;
boolean change=0, press=0;
//STM32Timer ITimer(TIM1);
char hello[] = {"Hello World!"};
char key[4][4]={
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
void Hello() {
int lenght=strlen(hello);
for(int i = 0;i<lenght;i++){
tft.drawChar(j, 10, hello[i], ILI9341_GREEN, 10, 3);
j=j+20;
}
tft.drawLine(5, 40, 230, 40, ILI9341_GREEN);
}
void Frame(){
tft.drawRect(10, 100, 190, 30, ILI9341_WHITE);
tft.drawLine(110, 101, 110, 129, ILI9341_WHITE);
}
void Fill() {
pos=counter+110;
if(counter>0){
tft.drawLine(pos, 101, pos, 128, ILI9341_GREEN);
tft.drawLine(++pos, 101, pos, 128, ILI9341_BLACK);
}
else {
if(counter<0) {
tft.drawLine(pos, 101, pos, 128, ILI9341_RED);
tft.drawLine(--pos, 101, pos, 128, ILI9341_BLACK);
}
else {
tft.drawLine(pos, 101, pos, 128, ILI9341_WHITE);
tft.drawLine(++pos, 101, pos--, 128, ILI9341_BLACK);
tft.drawLine(--pos, 101, pos, 128, ILI9341_BLACK);
}
}
}
void handleInterrupt_Encoder() {
change=true;
}
/*
void timerHandler() {
press=true;
Serial.println("Interrupt ist da!");
}
*/
String Translate(int num){
String value = String(num);
return(value);
}
void Counter(){
tft.setTextSize(4);
tft.setCursor(10, 55);
if(digitalRead(Pin_B)==HIGH){
counter--;
value=Translate(counter);
tft.setTextColor(ILI9341_RED);
tft.fillRect(10, 55, 80, 30, ILI9341_BLACK);
tft.print(value);
}
else {
counter++;
value=Translate(counter);
tft.setTextColor(ILI9341_GREEN);
tft.fillRect(10, 55, 80, 30, ILI9341_BLACK);
tft.print(value);
}
change=false;
}
/*
void Search(){
Serial.println("Start Searching");
for(int i=0;i<4;i++){
digitalWrite(i, LOW);
for(int a=4;a<8;a++){
if(digitalRead(a)==LOW){
Serial.print(a);
Serial.println(i);
Write(a, i);
break;
}
}
digitalWrite(i, HIGH);
}
}
void Write(int r, int c){
if(k>220){
k=10;
tft.drawRect(10, 150, 230, 30, ILI9341_WHITE);
}
tft.drawChar(k, 150, key[r][c], ILI9341_PINK, 10, 3);
k=k+20;
}
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, STM32!");
tft.begin();
//ts.begin();
Hello();
Frame();
Counter();
if(!ts.begin(TS_I2C_ADDRESS)){
Serial.println("Touchscreen nicht gestartet!");
}
/*
for(int num=0;num<4;num++){
pinMode(num, OUTPUT);
digitalWrite(num, HIGH);
}
for(int num=4;num<8;num++){
pinMode(num, INPUT_PULLUP);
//attachInterrupt(digitalPinToInterrupt(num), handleInterrupt_Matrix, FALLING);
}
ITimer.setTimer(100);
ITimer.attachInterrupt(timerHandler);
*/
pinMode(Inter_ex_A, INPUT_PULLUP);
pinMode(Pin_B, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(Inter_ex_A), handleInterrupt_Encoder, CHANGE);
}
void loop() {
if(change){
Counter();
Fill();
}
if(ts.touched()){
TS_Point p=ts.getPoint();
if(p.z>0){
tft.fillCircle(p.x, p.y, 5, ILI9341_WHITE);
}
}
/*
if(press){
Search();
}
*/
delay(1); // this speeds up the simulation
}