#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define set_LOW(groop,pin) groop&=~(1<<pin)
#define set_HIGH(groop,pin) groop|=(1<<pin)
#define test(groop,pin) (groop&(1<<pin))
#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
int num_x=20;
int num_y=60;
int laststance=PIND;
void setup() {
tft.begin();
Serial.begin(9600);
draw_smile(num_x,num_y);
set_LOW(DDRD,5);
set_LOW(DDRD,4);
set_LOW(DDRD,3);
set_LOW(DDRD,2);
set_HIGH(PORTD,5);
set_HIGH(PORTD,4);
set_HIGH(PORTD,3);
set_HIGH(PORTD,2);
set_HIGH(PCICR,PCIE2);
set_HIGH(SREG,5);
set_HIGH(SREG,4);
set_HIGH(SREG,3);
set_HIGH(SREG,2);
set_HIGH(PCMSK2,PCINT21);
set_HIGH(PCMSK2,PCINT20);
set_HIGH(PCMSK2,PCINT19);
set_HIGH(PCMSK2,PCINT18);
}
void loop() {
delay(200);
}
void draw_smile(int cursor_x,int cursor_y) {
int polomer_r_1=50;
int polomer_r_2=10;
int polomer_r_3=10;
tft.fillCircle(cursor_x+polomer_r_1, cursor_y+polomer_r_1,polomer_r_1,ILI9341_YELLOW);
tft.fillCircle(cursor_x+polomer_r_2+20, cursor_y+polomer_r_2+20,polomer_r_2,ILI9341_BLACK);
tft.fillCircle(cursor_x+polomer_r_3+60, cursor_y+polomer_r_3+20,polomer_r_3,ILI9341_BLACK);
tft.fillRect(cursor_x+20, cursor_y+65,60,10,ILI9341_BLACK);
}
ISR(PCINT2_vect){
tft.fillCircle(num_x+50, num_y+50,50,ILI9341_BLACK);
if(test(PIND,5)==0&&test(laststance,5)!=test(PIND,5)){
num_y=num_y-10;
}
if(test(PIND,4)==0&&test(laststance,4)!=test(PIND,4)){
num_x=num_x-10;
}
if(test(PIND,3)==0&&test(laststance,3)!=test(PIND,3)){
num_x=num_x+10;
}
if(test(PIND,2)==0&&test(laststance,2)!=test(PIND,2)){
num_y=num_y+10;
}
Serial.println(num_y+num_x);
draw_smile(num_x,num_y);
laststance=PIND;
}