Igrica Marko Spremic 2020/0066

Dependencies:   mbed Adafruit_GFX

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002  *Marko Spremic 2020/0066
00003  *Igrica domaci iz pima
00004  * Pravila igre:
00005  *Pomocu potenciometara se krece tackica po ekranu. Cilj je da tackica skuplja "vockice" ( vece tackice po enranu).
00006  *Pritiskom na taster sw1 igra se zavrsava i prikazuje se rezultat na led displeju. Da bi se ponovo pokrenula igrica potrebno je opet kliknuti taster sw1.
00007  *Pritiskom na taster sw2 generise se nova vockica na ekranu.
00008 **/
00009 #include "mbed.h"
00010 #include "Adafruit_GFX.h"
00011 #include "Adafruit_GFX_Config.h"
00012 #include "Adafruit_SSD1306.h"
00013 
00014 
00015  //I2C bus:
00016 #define SCL PB_13
00017 #define SDA PB_14
00018 
00019 //I2C address:
00020 #define I2C_ADDRESS 0x3c
00021 #define I2C_ADD_MBED I2C_ADDRESS<<1
00022 #define I2C_freq 400000
00023 
00024 //oled dimensions:
00025 #define OLED_HEIGHT_PX 64
00026 #define OLED_WIDTH_PX 128
00027  
00028 //definisanje glavnih promenljivih
00029 BusOut led_dis(PA_10, PA_9, PA_8, PB_10, PB_5, PB_4, PB_3, PA_2);
00030 DigitalOut SEL2(PC_7);
00031 DigitalOut SEL1(PB_6);
00032 InterruptIn sw1(PC_9);
00033 InterruptIn sw2(PC_8);
00034 AnalogIn pot1(PA_0);
00035 AnalogIn pot2(PA_1);
00036 I2C i2c_obj(SDA, SCL);
00037 Adafruit_SSD1306_I2c myOLED(i2c_obj, PB_5, I2C_ADD_MBED, OLED_HEIGHT_PX, OLED_WIDTH_PX);
00038 //funkcija za generisanje random broja
00039 int random(int lower, int upper)
00040 {
00041 
00042     return (rand() % (upper - lower + 1)) + lower;
00043 }
00044 //definisanje funkcija
00045 void error(); 
00046 void write_num(int broj);
00047 void end_game();
00048 int x, y, x_obj, y_obj; char endgame = 0;
00049 
00050 //glavna funkcija
00051 int main()
00052 {
00053     sw2.fall(&error);
00054     sw1.fall(&end_game);
00055     myOLED.begin();
00056     i2c_obj.frequency(I2C_freq);
00057     myOLED.clearDisplay();
00058     myOLED.display();
00059     unsigned char count = 0;
00060     srand(time(0));
00061     x = 0, y = 0, x_obj = random(0, 127) , y_obj = random(0, 63); char check = 0, d1 = 0, d2 = 0;
00062     while(1)
00063     {
00064         //dok traje igra
00065         if(!endgame)
00066         {
00067             SEL2.write(1);
00068             SEL1.write(1);
00069             x = pot1 * 128; y = pot2 * 64;
00070             myOLED.clearDisplay();
00071             myOLED.fillRect(x, y, 2, 2, WHITE);
00072             myOLED.fillRect(x_obj, y_obj, 4, 4, WHITE);
00073             for(int i = 0; i < 4; i++)
00074                 for(int j = 0; j < 4; j++)
00075                     if( x == x_obj+i && y == y_obj+j)
00076                     {
00077                         check = 1;
00078                         break;
00079                     }
00080             myOLED.display();
00081             if(check)
00082             {
00083                 x_obj = random(0, 127) , y_obj = random(0, 63);
00084                 myOLED.display();
00085                 count++;
00086                 d1 = count/10; d2 = count%10;
00087                 d1 = (d1 == 0)? -1: d1;
00088                 check = 0;
00089             }
00090         }
00091         //prikazivanje prednosti u toku pauze izmedju dve igre
00092         else
00093         {
00094             SEL2.write(1);
00095             SEL1.write(0);
00096             write_num(d1);
00097             wait_ms(8);
00098         
00099             SEL2.write(0);
00100             SEL1.write(1);
00101             write_num(d2);
00102             wait_ms(8);
00103             count = 0;
00104         }
00105     }
00106     
00107 }
00108 //generisanje nove vockice
00109 void error()
00110 {
00111     x_obj = random(0, 127) , y_obj = random(0, 63);
00112 }
00113 //ispisivanje vrednosti na led displeju
00114 void write_num(int broj)
00115 {
00116     switch(broj)
00117     {
00118         case 0: led_dis = 0xC0; break;
00119         case 1: led_dis = 0xF9; break;
00120         case 2: led_dis = 0xA4; break;
00121         case 3: led_dis = 0xB0; break;
00122         case 4: led_dis = 0x99; break;
00123         case 5: led_dis = 0x92; break;
00124         case 6: led_dis = 0x82; break;
00125         case 7: led_dis = 0xF8; break;
00126         case 8: led_dis = 0x80; break;
00127         case 9: led_dis = 0x90; break;
00128         default: led_dis = 0xFF;
00129     }
00130 }
00131 //zavrsavanje igrice
00132 void end_game()
00133 {
00134     endgame++;
00135     endgame = (endgame > 1) ? 0 : endgame;
00136 }