Program koristi jedan 7 segmentni display, tri LED i tri ulaza koja predstavljaju žice za uspješno pogađanje kombinacije i -1x Integrirano tipkalo za Hardverski interrupt -1x NUCLEO-F072RB pločica mikroupravljača. Radnom broj koji se kreira na početku potrebno je pretvoriti u binarni oblik i iščupati ispravnu žicu kako bi pobijedili program i defusali bombu. Nakon što pobijedimo ili izgubimo program se počinje izvršavati od početka

Dependencies:   mbed On_Off SeeedShieldBot BluetoothSerial

Program simulira igru pogađanje točne žice kako bi zaustavili timer i kako timer ne bi došao na nulu. U početku će se generirati random broj i biti će prikazan na displayu 5 sekundi. Nakon što prođe početnih 5 sekundi počinje odbrojavanje od 9, kada timed dođe na 0 upali se Crvena LED što nam simulira da smo izgubili, nakon 3 sekunde ponovo nam se generira random broj i počinje odbrojavanje. Kako bi uspješno zaustavili timer moramo generirani random broj pretvoriti u binarni oblik i ako u binarnom obiku zbroj jedinica je jednak jedan onda moramo naći žicu koja nam predstavlja mjesto jedinice i iščupati tu žicu (npr. 2 = 010 i tu moramo iščupati žicu u sredini), ako nam je zbroj jedinica jednak dva onda moramo naći žicu koja nam se nalazi na mjestu nule (npr. 6 = 110 i tu moramo isčupati skroz desnu žicu), ako je stanje 7 (111) onda uvijek pobjeđujemo koju god žicu iščupali, ali ako je stanje 0 (000) onda uvijek gubimo. Ako smo prekinuli točnu žicu pali se zeleno svjetlo što znači pobjeda, ako smo iščupali krivu žicu onda se pali crvena žica što znači da smo izgubili. Kada vratimo žicu program se počinje izvršavati od početka (generira se random broj i počinje odbrojavanje)

Committer:
ekunovic
Date:
Sat Feb 20 16:21:09 2021 +0000
Revision:
0:10758db4c7ec
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ekunovic 0:10758db4c7ec 1 #include "mbed.h"
ekunovic 0:10758db4c7ec 2 #include "On_Off.h"
ekunovic 0:10758db4c7ec 3 Serial pc(USBTX, USBRX);
ekunovic 0:10758db4c7ec 4 DigitalOut led1(A0);
ekunovic 0:10758db4c7ec 5 LED led2(A1);
ekunovic 0:10758db4c7ec 6 DigitalOut led3(A2);
ekunovic 0:10758db4c7ec 7
ekunovic 0:10758db4c7ec 8 Ticker tiktok;
ekunovic 0:10758db4c7ec 9
ekunovic 0:10758db4c7ec 10 InterruptIn dugme(USER_BUTTON);
ekunovic 0:10758db4c7ec 11 Timer trajanje;
ekunovic 0:10758db4c7ec 12 Timer debounce;
ekunovic 0:10758db4c7ec 13
ekunovic 0:10758db4c7ec 14 BusInOut inputSW(D10, D11, D12);
ekunovic 0:10758db4c7ec 15
ekunovic 0:10758db4c7ec 16
ekunovic 0:10758db4c7ec 17 BusOut Seg1(D2,D3,D4,D5,D6,D7,D8,D9);
ekunovic 0:10758db4c7ec 18 char SegConvert(int SegValue);
ekunovic 0:10758db4c7ec 19
ekunovic 0:10758db4c7ec 20 int *RNGf (int g);
ekunovic 0:10758db4c7ec 21 int RNG;
ekunovic 0:10758db4c7ec 22
ekunovic 0:10758db4c7ec 23 int *defuse (int d);
ekunovic 0:10758db4c7ec 24
ekunovic 0:10758db4c7ec 25
ekunovic 0:10758db4c7ec 26 void Blink ()
ekunovic 0:10758db4c7ec 27 {
ekunovic 0:10758db4c7ec 28 led2.flip();
ekunovic 0:10758db4c7ec 29 }
ekunovic 0:10758db4c7ec 30
ekunovic 0:10758db4c7ec 31 void stop()
ekunovic 0:10758db4c7ec 32 {
ekunovic 0:10758db4c7ec 33 if(debounce.read_ms()>200) {
ekunovic 0:10758db4c7ec 34 while (trajanje.read_ms()<10000)
ekunovic 0:10758db4c7ec 35 {
ekunovic 0:10758db4c7ec 36 trajanje.start();
ekunovic 0:10758db4c7ec 37 led1=1;
ekunovic 0:10758db4c7ec 38 led3=1;
ekunovic 0:10758db4c7ec 39 }
ekunovic 0:10758db4c7ec 40 led1=0;
ekunovic 0:10758db4c7ec 41 led3=0;
ekunovic 0:10758db4c7ec 42 trajanje.stop();
ekunovic 0:10758db4c7ec 43 trajanje.reset();
ekunovic 0:10758db4c7ec 44 }
ekunovic 0:10758db4c7ec 45 debounce.reset();
ekunovic 0:10758db4c7ec 46 }
ekunovic 0:10758db4c7ec 47
ekunovic 0:10758db4c7ec 48
ekunovic 0:10758db4c7ec 49 int main()
ekunovic 0:10758db4c7ec 50 {
ekunovic 0:10758db4c7ec 51 srand(time(NULL));
ekunovic 0:10758db4c7ec 52 debounce.start();
ekunovic 0:10758db4c7ec 53
ekunovic 0:10758db4c7ec 54 dugme.rise(&stop);
ekunovic 0:10758db4c7ec 55
ekunovic 0:10758db4c7ec 56 inputSW.mode(PullUp);
ekunovic 0:10758db4c7ec 57
ekunovic 0:10758db4c7ec 58 tiktok.attach(&Blink,0.2);
ekunovic 0:10758db4c7ec 59
ekunovic 0:10758db4c7ec 60 int *returned;
ekunovic 0:10758db4c7ec 61 int *spas;
ekunovic 0:10758db4c7ec 62 int a, b, c, t, z, u, v, n, m;
ekunovic 0:10758db4c7ec 63 int k=0;
ekunovic 0:10758db4c7ec 64 int i;
ekunovic 0:10758db4c7ec 65 while (1) {
ekunovic 0:10758db4c7ec 66 spas = defuse(inputSW);
ekunovic 0:10758db4c7ec 67 switch (k)
ekunovic 0:10758db4c7ec 68 {
ekunovic 0:10758db4c7ec 69 case 0: {
ekunovic 0:10758db4c7ec 70 RNG = rand() % 8;
ekunovic 0:10758db4c7ec 71 Seg1=SegConvert(RNG);
ekunovic 0:10758db4c7ec 72 returned = RNGf(RNG);
ekunovic 0:10758db4c7ec 73 a = returned[0];
ekunovic 0:10758db4c7ec 74 b = returned[1];
ekunovic 0:10758db4c7ec 75 c = returned[2];
ekunovic 0:10758db4c7ec 76 led1=0;
ekunovic 0:10758db4c7ec 77 led3=0;
ekunovic 0:10758db4c7ec 78 wait(5);
ekunovic 0:10758db4c7ec 79 k=1;
ekunovic 0:10758db4c7ec 80 break;
ekunovic 0:10758db4c7ec 81 }
ekunovic 0:10758db4c7ec 82 case 1: {
ekunovic 0:10758db4c7ec 83 int brojac=9;
ekunovic 0:10758db4c7ec 84 for (i=9;i>-1;i--){
ekunovic 0:10758db4c7ec 85 Seg1=SegConvert(i);
ekunovic 0:10758db4c7ec 86
ekunovic 0:10758db4c7ec 87 spas = defuse(inputSW);
ekunovic 0:10758db4c7ec 88 t = spas[0];
ekunovic 0:10758db4c7ec 89 z = spas[1];
ekunovic 0:10758db4c7ec 90 u = spas[2];
ekunovic 0:10758db4c7ec 91 if (t != 0 || z != 0 || u != 0)
ekunovic 0:10758db4c7ec 92 {k=3;
ekunovic 0:10758db4c7ec 93 break;
ekunovic 0:10758db4c7ec 94 }
ekunovic 0:10758db4c7ec 95
ekunovic 0:10758db4c7ec 96 brojac--;
ekunovic 0:10758db4c7ec 97 wait(1);
ekunovic 0:10758db4c7ec 98 }
ekunovic 0:10758db4c7ec 99 if (k == 3)
ekunovic 0:10758db4c7ec 100 break;
ekunovic 0:10758db4c7ec 101 if (brojac <= 0)
ekunovic 0:10758db4c7ec 102 {k=2;
ekunovic 0:10758db4c7ec 103 break;
ekunovic 0:10758db4c7ec 104 }
ekunovic 0:10758db4c7ec 105
ekunovic 0:10758db4c7ec 106 }
ekunovic 0:10758db4c7ec 107
ekunovic 0:10758db4c7ec 108 case 2: {
ekunovic 0:10758db4c7ec 109 led1=0;
ekunovic 0:10758db4c7ec 110 led3=1;
ekunovic 0:10758db4c7ec 111 k=0;
ekunovic 0:10758db4c7ec 112 wait(3);
ekunovic 0:10758db4c7ec 113 break;
ekunovic 0:10758db4c7ec 114 }
ekunovic 0:10758db4c7ec 115
ekunovic 0:10758db4c7ec 116 case 3: {
ekunovic 0:10758db4c7ec 117 spas = defuse(inputSW);
ekunovic 0:10758db4c7ec 118 t = spas[0];
ekunovic 0:10758db4c7ec 119 z = spas[1];
ekunovic 0:10758db4c7ec 120 u = spas[2];
ekunovic 0:10758db4c7ec 121
ekunovic 0:10758db4c7ec 122 if(a+b+c == 0)
ekunovic 0:10758db4c7ec 123 {
ekunovic 0:10758db4c7ec 124 led1=0;
ekunovic 0:10758db4c7ec 125 led3=1;
ekunovic 0:10758db4c7ec 126 }
ekunovic 0:10758db4c7ec 127
ekunovic 0:10758db4c7ec 128 if(a+b+c==1)
ekunovic 0:10758db4c7ec 129 {
ekunovic 0:10758db4c7ec 130 v=a-u;
ekunovic 0:10758db4c7ec 131 n=b-z;
ekunovic 0:10758db4c7ec 132 m=c-t;
ekunovic 0:10758db4c7ec 133 if(abs(v)+abs(n)+abs(m) == 0)
ekunovic 0:10758db4c7ec 134 {
ekunovic 0:10758db4c7ec 135 led1=1;
ekunovic 0:10758db4c7ec 136 led3=0;
ekunovic 0:10758db4c7ec 137 }
ekunovic 0:10758db4c7ec 138 else
ekunovic 0:10758db4c7ec 139 {
ekunovic 0:10758db4c7ec 140 led1=0;
ekunovic 0:10758db4c7ec 141 led3=1;
ekunovic 0:10758db4c7ec 142 }
ekunovic 0:10758db4c7ec 143 }
ekunovic 0:10758db4c7ec 144
ekunovic 0:10758db4c7ec 145 if(a+b+c==2)
ekunovic 0:10758db4c7ec 146 {
ekunovic 0:10758db4c7ec 147 v=a-u;
ekunovic 0:10758db4c7ec 148 n=b-z;
ekunovic 0:10758db4c7ec 149 m=c-t;
ekunovic 0:10758db4c7ec 150 if(abs(v)+abs(n)+abs(m) == 3)
ekunovic 0:10758db4c7ec 151 {
ekunovic 0:10758db4c7ec 152 led1=1;
ekunovic 0:10758db4c7ec 153 led3=0;
ekunovic 0:10758db4c7ec 154 }
ekunovic 0:10758db4c7ec 155 else
ekunovic 0:10758db4c7ec 156 {
ekunovic 0:10758db4c7ec 157 led1=0;
ekunovic 0:10758db4c7ec 158 led3=1;
ekunovic 0:10758db4c7ec 159 }
ekunovic 0:10758db4c7ec 160 }
ekunovic 0:10758db4c7ec 161
ekunovic 0:10758db4c7ec 162 if(a+b+c == 3)
ekunovic 0:10758db4c7ec 163 {
ekunovic 0:10758db4c7ec 164 led1=1;
ekunovic 0:10758db4c7ec 165 led3=0;
ekunovic 0:10758db4c7ec 166 }
ekunovic 0:10758db4c7ec 167
ekunovic 0:10758db4c7ec 168 if (t == 0 && z == 0 && u == 0)
ekunovic 0:10758db4c7ec 169 {k=0;
ekunovic 0:10758db4c7ec 170 pc.printf("if\n\r");
ekunovic 0:10758db4c7ec 171 break;
ekunovic 0:10758db4c7ec 172 }
ekunovic 0:10758db4c7ec 173
ekunovic 0:10758db4c7ec 174 }
ekunovic 0:10758db4c7ec 175 }
ekunovic 0:10758db4c7ec 176 }
ekunovic 0:10758db4c7ec 177 }
ekunovic 0:10758db4c7ec 178
ekunovic 0:10758db4c7ec 179 int *RNGf (int g)
ekunovic 0:10758db4c7ec 180 {
ekunovic 0:10758db4c7ec 181 int ar[3];
ekunovic 0:10758db4c7ec 182 switch (g) {
ekunovic 0:10758db4c7ec 183 case 0: {
ekunovic 0:10758db4c7ec 184 ar[0]=0;
ekunovic 0:10758db4c7ec 185 ar[1]=0;
ekunovic 0:10758db4c7ec 186 ar[2]=0;
ekunovic 0:10758db4c7ec 187 break;
ekunovic 0:10758db4c7ec 188 }
ekunovic 0:10758db4c7ec 189 case 1: {
ekunovic 0:10758db4c7ec 190 ar[0]=0;
ekunovic 0:10758db4c7ec 191 ar[1]=0;
ekunovic 0:10758db4c7ec 192 ar[2]=1;
ekunovic 0:10758db4c7ec 193 break;
ekunovic 0:10758db4c7ec 194 }
ekunovic 0:10758db4c7ec 195 case 2: {
ekunovic 0:10758db4c7ec 196 ar[0]=0;
ekunovic 0:10758db4c7ec 197 ar[1]=1;
ekunovic 0:10758db4c7ec 198 ar[2]=0;
ekunovic 0:10758db4c7ec 199 break;
ekunovic 0:10758db4c7ec 200 }
ekunovic 0:10758db4c7ec 201
ekunovic 0:10758db4c7ec 202 case 3: {
ekunovic 0:10758db4c7ec 203 ar[0]=0;
ekunovic 0:10758db4c7ec 204 ar[1]=1;
ekunovic 0:10758db4c7ec 205 ar[2]=1;
ekunovic 0:10758db4c7ec 206 break;
ekunovic 0:10758db4c7ec 207 }
ekunovic 0:10758db4c7ec 208
ekunovic 0:10758db4c7ec 209 case 4: {
ekunovic 0:10758db4c7ec 210 ar[0]=1;
ekunovic 0:10758db4c7ec 211 ar[1]=0;
ekunovic 0:10758db4c7ec 212 ar[2]=0;
ekunovic 0:10758db4c7ec 213 break;
ekunovic 0:10758db4c7ec 214 }
ekunovic 0:10758db4c7ec 215
ekunovic 0:10758db4c7ec 216 case 5: {
ekunovic 0:10758db4c7ec 217 ar[0]=1;
ekunovic 0:10758db4c7ec 218 ar[1]=0;
ekunovic 0:10758db4c7ec 219 ar[2]=1;
ekunovic 0:10758db4c7ec 220 break;
ekunovic 0:10758db4c7ec 221 }
ekunovic 0:10758db4c7ec 222 case 6: {
ekunovic 0:10758db4c7ec 223 ar[0]=1;
ekunovic 0:10758db4c7ec 224 ar[1]=1;
ekunovic 0:10758db4c7ec 225 ar[2]=0;
ekunovic 0:10758db4c7ec 226 break;
ekunovic 0:10758db4c7ec 227 }
ekunovic 0:10758db4c7ec 228
ekunovic 0:10758db4c7ec 229 case 7: {
ekunovic 0:10758db4c7ec 230 ar[0]=1;
ekunovic 0:10758db4c7ec 231 ar[1]=1;
ekunovic 0:10758db4c7ec 232 ar[2]=1;
ekunovic 0:10758db4c7ec 233 break;
ekunovic 0:10758db4c7ec 234 }
ekunovic 0:10758db4c7ec 235
ekunovic 0:10758db4c7ec 236 }
ekunovic 0:10758db4c7ec 237 return ar;
ekunovic 0:10758db4c7ec 238
ekunovic 0:10758db4c7ec 239 }
ekunovic 0:10758db4c7ec 240
ekunovic 0:10758db4c7ec 241 char SegConvert(int SegValue) {
ekunovic 0:10758db4c7ec 242 char SegByte=0x00;
ekunovic 0:10758db4c7ec 243 switch (SegValue) {
ekunovic 0:10758db4c7ec 244 case 0 : SegByte = 0x3F;break;
ekunovic 0:10758db4c7ec 245 case 1 : SegByte = 0x06;break;
ekunovic 0:10758db4c7ec 246 case 2 : SegByte = 0x5B;break;
ekunovic 0:10758db4c7ec 247 case 3 : SegByte = 0x4F;break;
ekunovic 0:10758db4c7ec 248 case 4 : SegByte = 0x66;break;
ekunovic 0:10758db4c7ec 249 case 5 : SegByte = 0x6D;break;
ekunovic 0:10758db4c7ec 250 case 6 : SegByte = 0x7D;break;
ekunovic 0:10758db4c7ec 251 case 7 : SegByte = 0x07;break;
ekunovic 0:10758db4c7ec 252 case 8 : SegByte = 0x7F;break;
ekunovic 0:10758db4c7ec 253 case 9 : SegByte = 0x6F;break;
ekunovic 0:10758db4c7ec 254 }
ekunovic 0:10758db4c7ec 255 return SegByte;
ekunovic 0:10758db4c7ec 256 }
ekunovic 0:10758db4c7ec 257
ekunovic 0:10758db4c7ec 258 int *defuse (int d)
ekunovic 0:10758db4c7ec 259 {
ekunovic 0:10758db4c7ec 260 int ar[3];
ekunovic 0:10758db4c7ec 261 switch (d) {
ekunovic 0:10758db4c7ec 262 case 0x1: {
ekunovic 0:10758db4c7ec 263 ar[0]=1;
ekunovic 0:10758db4c7ec 264 ar[1]=0;
ekunovic 0:10758db4c7ec 265 ar[2]=0;
ekunovic 0:10758db4c7ec 266 break;
ekunovic 0:10758db4c7ec 267 }
ekunovic 0:10758db4c7ec 268 case 0x2: {
ekunovic 0:10758db4c7ec 269 ar[0]=0;
ekunovic 0:10758db4c7ec 270 ar[1]=1;
ekunovic 0:10758db4c7ec 271 ar[2]=0;
ekunovic 0:10758db4c7ec 272 break;
ekunovic 0:10758db4c7ec 273 }
ekunovic 0:10758db4c7ec 274 case 0x4: {
ekunovic 0:10758db4c7ec 275 ar[0]=0;
ekunovic 0:10758db4c7ec 276 ar[1]=0;
ekunovic 0:10758db4c7ec 277 ar[2]=1;
ekunovic 0:10758db4c7ec 278 break;
ekunovic 0:10758db4c7ec 279 }
ekunovic 0:10758db4c7ec 280
ekunovic 0:10758db4c7ec 281 default: {
ekunovic 0:10758db4c7ec 282 ar[0]=0;
ekunovic 0:10758db4c7ec 283 ar[1]=0;
ekunovic 0:10758db4c7ec 284 ar[2]=0;
ekunovic 0:10758db4c7ec 285 break;
ekunovic 0:10758db4c7ec 286 }
ekunovic 0:10758db4c7ec 287
ekunovic 0:10758db4c7ec 288 }
ekunovic 0:10758db4c7ec 289 return ar;
ekunovic 0:10758db4c7ec 290 }