#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.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 Inter_ex_A PB8
#define Inter_ex_B PB9
#define SW PA5
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
int j=5, counter=1, pos=0, k=10;
String value;
boolean change=0, press=0;
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 handleInterrupt_Matrix() {
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(Inter_ex_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();
Hello();
Frame();
Counter();
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);
}
pinMode(Inter_ex_A, INPUT_PULLUP);
pinMode(Inter_ex_B, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(Inter_ex_A), handleInterrupt_Encoder, CHANGE);
}
void loop() {
if(change){
Counter();
Fill();
}
if(press){
Search();
}
delay(1); // this speeds up the simulation
}