//Panos Papazoglou, MICRODEV.GR #include #include #include #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_DC 8 #define OLED_CS 10 #define OLED_RESET 9 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC, OLED_RESET, OLED_CS); #define leftpin 3 #define rightpin 2 #define lights 5 int HIGHSCORE=0; int score=0; int cx=63; int cy=5; int dx=1, dy=1; int xmax,ymax; int rad=3; //raketa int rakW=25, rakH=2; int rakX=63; int rakY=63-rakH; void setup() { Serial.begin(9600); if(!oled.begin(SSD1306_SWITCHCAPVCC)) { Serial.println(F("OLED Error")); for(;;); } ymax=SCREEN_HEIGHT; xmax=SCREEN_WIDTH; pinMode(rightpin,INPUT_PULLUP);pinMode(leftpin,INPUT_PULLUP); pinMode(lights,OUTPUT); digitalWrite(lights,HIGH); start(); } void loop() { oled.clearDisplay(); oled.display(); cx+=dx; cy+=dy; if ((cx>xmax-rad) || (cx=rakX) && (cx<=rakX+rakW) && (cy+rad>rakY)) { dy=-dy; score++; if (score>HIGHSCORE) HIGHSCORE=score; } else if (cy+rad>ymax) { cx=63; cy=5; mytext("GAME",3,30,5); mytext("OVER",3,30,28); delay(2000); start(); } oled.fillCircle(cx,cy,rad,WHITE); draw_raketa(); draw_score(); oled.display(); if (digitalRead(leftpin)==LOW) rakX-=5; else if (digitalRead(rightpin)==LOW) rakX+=5; int a0=analogRead(0); if (a0<10) rakX-=2; else if (a0>900) rakX+=2; delay(10); } void draw_raketa() { if (rakX<0) rakX=0;if (rakX>SCREEN_WIDTH-rakW-1) rakX=SCREEN_WIDTH-rakW-1; oled.fillRect(rakX,rakY,rakW,rakH,WHITE); } void start() { oled.clearDisplay(); oled.display(); displayTITLES(); delay(3000); press2start(); score=0; } void displayTITLES() { mytext("MICRODEV.GR",1,30,0); mytext("High Score",2,5,15); mytext(String(HIGHSCORE),2,55,34); mytext("Loading...",1,35,55); } void press2start() { oled.clearDisplay(); oled.display(); mytext("Press",2,5,10); mytext("RIGHT",2,5,30); mytext("to start",2,5,50); while(digitalRead(rightpin)==HIGH); oled.clearDisplay(); oled.display(); for(int i=1;i<=4;i++) { oled.clearDisplay(); oled.display(); delay(200); mytext("Get Ready",2,5,30); delay(200); } mytext("Get Ready",2,5,30); delay(2000); } void draw_score() { mytext(String(score),2,100,10); } void mytext(String text, int textsize, int x, int y) { oled.setTextSize(textsize); oled.setTextColor(WHITE); oled.setCursor(x,y); oled.print(text); oled.display(); }