Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp
00001 00002 #include "mbed.h" 00003 00004 // 3 digitalna in-a za botune 00005 InterruptIn tipka1(D2); 00006 InterruptIn tipka2(PC_3); 00007 InterruptIn tipka3(PC_2); 00008 00009 // za generiranje nasumicnog broja 00010 AnalogIn analog (A1); 00011 00012 // print u tera term 00013 Serial pc(USBTX, USBRX); 00014 00015 // za pomoć pri programiranju 00016 DigitalOut led1(LED1); 00017 InterruptIn tester(PC_13); // B1 00018 00019 // PWM za buzzer 00020 PwmOut buzzer(PB_3); 00021 00022 // debounce timer za tipkala 00023 Timer debounce; 00024 00025 // 7 seg display bus i fja 00026 BusOut Seg1(D5,D6,D7,D8,D9,D10,D11,D12); 00027 char SegConvert(char SegValue); 00028 00029 00030 // varijable 00031 int r = 4; // nasumican broj 1-4 00032 int t = 4; 00033 int rp = 4; // varijabla za tipkalo 1-3 00034 int igra_li_se = 1; 00035 int c = 0; // counter pogodaka 00036 int kraj = 0; 00037 00038 00039 // interrupti za botune 00040 void zaustavi_igru(void); // tester 00041 void t1(void); 00042 void t2(void); 00043 void t3(void); 00044 00045 00046 // funkcije 00047 void start_sekvenca(){ // start fja 00048 // 7 seg spin 00049 int s; 00050 for (s = 0; s < 4; s++){ 00051 Seg1=SegConvert(10); 00052 00053 wait(0.05); 00054 Seg1=SegConvert(11); 00055 wait(0.05); 00056 Seg1=SegConvert(12); 00057 wait(0.05); 00058 Seg1=SegConvert(13); 00059 wait(0.05); 00060 Seg1=SegConvert(14); 00061 wait(0.05); 00062 Seg1=SegConvert(15); 00063 wait(0.05); 00064 } 00065 Seg1=SegConvert(10); 00066 wait(0.05); 00067 Seg1=SegConvert(99); 00068 wait(0.2); 00069 00070 Seg1=SegConvert(98); 00071 wait(0.1); 00072 Seg1=SegConvert(99); 00073 wait(0.1); 00074 Seg1=SegConvert(98); 00075 wait(0.1); 00076 Seg1=SegConvert(99); 00077 wait(0.1); 00078 00079 Seg1=SegConvert(99); 00080 wait(0.5); 00081 00082 // buzzer countdown 00083 buzzer.period(1/(349.2)); 00084 buzzer = 0.5; 00085 wait(0.5); 00086 buzzer = 0; 00087 wait(0.5); 00088 buzzer.period(1/(349.2)); 00089 buzzer = 0.5; 00090 wait(0.5); 00091 buzzer = 0; 00092 wait(0.5); 00093 buzzer.period(1/(349.2)); 00094 buzzer = 0.5; 00095 wait(0.5); 00096 buzzer = 0; 00097 wait(0.5); 00098 buzzer.period(1/(698.5)); 00099 buzzer = 0.5; 00100 wait(1); 00101 buzzer = 0; 00102 } 00103 00104 void end_sekvenca(){ 00105 buzzer.period(1/(698.5)); 00106 buzzer = 0.5; 00107 wait(0.5); 00108 buzzer.period(1/(659.3)); 00109 buzzer = 0.5; 00110 wait(0.5); 00111 buzzer.period(1/(622.2)); 00112 buzzer = 0.5; 00113 wait(0.5); 00114 buzzer.period(1/(587.3)); 00115 buzzer = 0.5; 00116 wait(0.5); 00117 buzzer.period(1/(554.4)); 00118 buzzer = 0.5; 00119 wait(1.5); 00120 buzzer = 0; 00121 } 00122 00123 // generira nasaumičan broj 00124 unsigned int nasumican (void){ 00125 unsigned int rd = 0; 00126 unsigned int dugi = 0; 00127 for (rd = 0; rd <= 32; rd += 2){ 00128 dugi += ((analog.read_u16() ) << rd); 00129 } 00130 return dugi; 00131 } 00132 00133 00134 // ticker za odbrojavanje vremena između generiranja krtica 00135 Ticker nova_krtica; 00136 00137 // generira nove krtice i uspoređuje 00138 void krtica(){ 00139 00140 if(r == t){ 00141 c++; 00142 if(t != 4){ 00143 buzzer.period(1/(587.3)); 00144 buzzer = 0.5; 00145 wait(0.05); 00146 buzzer = 0; 00147 } 00148 igra_li_se = 1; 00149 } 00150 00151 else if(r != t){ 00152 igra_li_se = 0; 00153 Seg1=SegConvert(99); 00154 } 00155 00156 rp = r; 00157 00158 r = nasumican() % 4 + 1; 00159 00160 if(r == rp){ 00161 r++; 00162 } 00163 if(r > 4){ 00164 r = 1; 00165 } 00166 00167 switch(r){ 00168 case 1 : Seg1=SegConvert(10);break; 00169 case 2 : Seg1=SegConvert(16);break; 00170 case 3 : Seg1=SegConvert(13);break; 00171 case 4 : Seg1=SegConvert(99);t=4;break; // t je 4, ako se stisne tipkalo ispadaš 00172 } 00173 00174 } 00175 00176 00177 // main 00178 int main() { 00179 00180 pc.printf("\n\r\n\r\n\r\n\r\n\r\n\r\n\r"); 00181 pc.printf("\n\r\n\r-----------\n\r\n\r NOVA IGRA\n\r\n\r-----------\n\r"); 00182 pc.printf("\n\r\n\r\n\r\n\r\n\r\n\r\n\r"); 00183 00184 start_sekvenca(); 00185 00186 debounce.start(); 00187 00188 tipka1.mode(PullUp); 00189 tipka2.mode(PullUp); 00190 tipka3.mode(PullUp); 00191 00192 nova_krtica.attach(&krtica,0.7); 00193 00194 while(1) { 00195 tester.rise(&zaustavi_igru); 00196 tipka1.rise(&t1); 00197 tipka2.rise(&t2); 00198 tipka3.rise(&t3); 00199 if(igra_li_se == 1){ 00200 // pc.printf("tipka %i segment%i\n\r", t, r); 00201 } 00202 else if(igra_li_se == 0){ 00203 Seg1=SegConvert(99); 00204 nova_krtica.detach(); 00205 if(kraj==0){ 00206 end_sekvenca(); 00207 kraj++; 00208 } 00209 led1 = !led1; 00210 t = 0; 00211 pc.printf("\n\r!!! GAME OVER !!!\n\r\n\rPOGODILI STE %i PUTA! WOW!\n\r\n\r??? IGRAJ OPET ???\n\r\n\r", (c-1)); 00212 wait(10); 00213 } 00214 00215 } 00216 } 00217 00218 00219 //prekidi 00220 00221 // prekid za B1 u svrhe testiranja 00222 void zaustavi_igru(void){ 00223 if(debounce.read_ms()>100){ 00224 led1 = !led1; 00225 // igra_li_se = 0; 00226 debounce.reset(); 00227 } 00228 } 00229 00230 //tipka1 00231 void t1(void){ 00232 if(debounce.read_ms()>100){ 00233 00234 t = 1; 00235 led1 = !led1; 00236 Seg1=SegConvert(99); 00237 00238 debounce.reset(); 00239 } 00240 } 00241 00242 //tipka2 00243 void t2(void){ 00244 if(debounce.read_ms()>100){ 00245 00246 t = 2; 00247 led1 = !led1; 00248 Seg1=SegConvert(99); 00249 00250 debounce.reset(); 00251 } 00252 } 00253 00254 //tipka3 00255 void t3(void){ 00256 if(debounce.read_ms()>100){ 00257 00258 t = 3; 00259 led1 = !led1; 00260 Seg1=SegConvert(99); 00261 00262 debounce.reset(); 00263 } 00264 } 00265 00266 00267 // 7 seg konverter 00268 char SegConvert(char SegValue) { // A 10 (D5), G 16 (D11), D 13 (D8) 00269 char SegByte=0x00; 00270 switch (SegValue) { //DPGFEDCBA 00271 case 0 : SegByte = 0x3F;break; // 00111111 binary 00272 case 1 : SegByte = 0x06;break; // 00000110 binary 00273 case 2 : SegByte = 0x5B;break; // 01011011 binary 00274 case 3 : SegByte = 0x4F;break; // 01001111 binary 00275 case 4 : SegByte = 0x66;break; // 01100110 binary 00276 case 5 : SegByte = 0x6D;break; // 01101101 binary 00277 case 6 : SegByte = 0x7D;break; // 01111101 binary 00278 case 7 : SegByte = 0x07;break; // 00000111 binary 00279 case 8 : SegByte = 0x7F;break; // 01111111 binary 00280 case 9 : SegByte = 0x6F;break; // 01101111 binary 00281 00282 case 10: SegByte = 0x01;break; // 00000001 A 00283 case 11: SegByte = 0x02;break; // 00000010 B 00284 case 12: SegByte = 0x04;break; // 00000100 C 00285 case 13: SegByte = 0x08;break; // 00001000 D 00286 case 14: SegByte = 0x10;break; // 00010000 E 00287 case 15: SegByte = 0x20;break; // 00100000 F 00288 case 16: SegByte = 0x40;break; // 01000000 G 00289 case 98: SegByte = 0x49;break; // 01001001 AGD 00290 case 99: SegByte = 0x00;break; // 00000000 / 00291 } 00292 return SegByte; 00293 }
Generated on Thu Dec 1 2022 20:36:51 by
1.7.2