#include <U8g2lib.h>
#include <TimerOne.h>
#include <avr/pgmspace.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C display(U8G2_R0);
unsigned long simdikiZaman;
unsigned long oncekiZaman;
static const unsigned char araba [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00,
0x80, 0x9B, 0x03, 0x00, 0xE0, 0x18, 0x0E, 0x00, 0x30, 0x18, 0x18, 0x00,
0x10, 0x18, 0x10, 0x00, 0x08, 0x18, 0x20, 0x00, 0x08, 0x18, 0x20, 0x00,
0x08, 0x18, 0x20, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x02, 0x10, 0x00, 0x0C,
0x02, 0xD0, 0x00, 0x18, 0x02, 0x10, 0x00, 0x18, 0x07, 0x10, 0x00, 0x08,
0xFF, 0xFF, 0xFF, 0x0F, 0xC0, 0x1A, 0x58, 0x03, 0xC0, 0x18, 0x18, 0x03,
0x80, 0x0F, 0xF0, 0x01, 0x00, 0x07, 0xE0, 0x00 };
class Dikdortgen{
public:
int kisa_kenar;
int uzun_kenar;
void alan(int x, int y){
kisa_kenar = x;
uzun_kenar = y;
display.setFont(u8g2_font_ncenB14_tr);
display.setCursor(0, 15);
display.print("x = ");
display.setCursor(20, 15);
display.print(kisa_kenar);
display.drawXBMP( kisa_kenar, uzun_kenar, 30, 20, araba);
}
int cevre(){
return 2*(uzun_kenar+kisa_kenar);
}
Dikdortgen(int kisak, int uzunk){
kisa_kenar = kisak;
uzun_kenar = uzunk;
}
};
#define do_ 261
#define re 294
#define mi 329
#define fa 349
#define sola 392
#define la 440
#define si 493
#define DO_ 523
const unsigned int sarki[] PROGMEM = {mi,mi,fa,sola,sola,fa,mi,re,do_,do_,re,
mi,mi,re,re,mi,mi,fa,sola,sola,fa, mi, re, do_, do_, re, mi, re, do_, do_, re,
re, mi, do_, re, mi, fa, mi, do_, re, mi, fa, mi, re, do_ , re, sola, mi, mi, mi,
fa, sola, sola, fa, mi, re, do_, do_, re, mi, re, do_, do_};
const unsigned int sarki2[] PROGMEM {do_, re,re,do_,si,la,do_,si,si,la,la,mi,re,mi,do_,re,do_,si,la,la,la,
re,mi,fa,sola,fa,sola,sola,fa,sola,fa,fa,mi,mi,sola,fa,fa,sola,mi,mi,re,fa,mi,mi,mi,re,re,do_,
mi,re,re,re,do_,si,la,re,si,do_};
int notano = 0;
#define yukaribtn 8
#define asagibtn 6
#define sagbtn 5
#define solbtn 4
#define selectbtn 2
#define resetbtn 3
#define analogbtn 7
#define abtn 9
#define bbtn 10
#define buzzer 11
#define deneme 13
#define jumpSound 700
#define blahSound 125
#define speedSound 1000
#define DBOUNCE 180
bool yukari = false;
bool asagi = false;
bool sag = false;
bool sol = false;
bool resetbuton = false;
bool selectbuton = false;
bool analogbuton = false;
bool kirmizibtn = false;
bool mavibtn = false;
int x;
int y;
Dikdortgen dortgen(25, 5);
void setup() {
Serial.begin(9600);
display.begin(2,5,48,6,9);
display.enableUTF8Print();
display.clearBuffer();
display.setFont(u8g2_font_ncenB14_tr);
display.setCursor(10, 20);
display.print("hadi");
display.sendBuffer();
pinMode(yukaribtn, INPUT_PULLUP);
pinMode(asagibtn, INPUT_PULLUP);
pinMode(sagbtn, INPUT_PULLUP);
pinMode(solbtn, INPUT_PULLUP);
pinMode(selectbtn, INPUT_PULLUP);
pinMode(resetbtn, INPUT_PULLUP);
pinMode(analogbtn, INPUT_PULLUP);
pinMode(abtn, INPUT_PULLUP);
pinMode(bbtn, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
pinMode(deneme, OUTPUT);
x = 0;
y = 20;
Timer1.initialize(500000);
Timer1.attachInterrupt(selectBas);
}
void loop() {
butonKontrol();
if(sag){
x += 5;
tone(buzzer, 200, 30);
}
if(sol){
tone(buzzer, 700, 20);
x-=10;
}
if(yukari){
y--;
}
if(asagi){
y++;
}
if(kirmizibtn){
tone(buzzer, 500, 60);
}
if(mavibtn){
tone(buzzer, 500, 50);
}
simdikiZaman = millis();
if(simdikiZaman - oncekiZaman > 50){
yazdir(x,y);
oncekiZaman = simdikiZaman;
}
butonReset();
}
void butonKontrol(){
if(!digitalRead(yukaribtn)) yukari = true;
if(!digitalRead(asagibtn)) asagi = true;
if(!digitalRead(sagbtn)) sag = true;
if(!digitalRead(solbtn)) sol = true;
if(!digitalRead(resetbtn)) resetbuton = true;
if(!digitalRead(selectbtn)) selectbuton = true;
if(!digitalRead(analogbtn)) analogbuton = true;
if(!digitalRead(abtn)) kirmizibtn = true;
if(!digitalRead(bbtn)) mavibtn = true;
delay(30);
}
void butonReset(){
yukari = false;
asagi = false;
sag = false;
sol = false;
resetbuton = false;
selectbuton = false;
analogbuton = false;
kirmizibtn = false;
mavibtn = false;
}
void yazdir(int x,int y){
display.clearBuffer();
display.setFont(u8g2_font_ncenB14_tr);
display.setCursor(60, 15);
display.print(simdikiZaman - oncekiZaman);
dortgen.alan(x,y+random(2));
display.sendBuffer();
}
void selectBas()
{
tone(buzzer,pgm_read_word(&sarki[notano]),200);
if(notano < 50){
notano++;}
else{
notano = 0;
}
}