![](/media/cache/group/tvz-logo.png.50x50_q85.png)
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)
Diff: main.cpp
- Revision:
- 0:10758db4c7ec
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Feb 20 16:21:09 2021 +0000 @@ -0,0 +1,290 @@ +#include "mbed.h" +#include "On_Off.h" +Serial pc(USBTX, USBRX); +DigitalOut led1(A0); +LED led2(A1); +DigitalOut led3(A2); + +Ticker tiktok; + +InterruptIn dugme(USER_BUTTON); +Timer trajanje; +Timer debounce; + +BusInOut inputSW(D10, D11, D12); + + +BusOut Seg1(D2,D3,D4,D5,D6,D7,D8,D9); +char SegConvert(int SegValue); + +int *RNGf (int g); +int RNG; + +int *defuse (int d); + + +void Blink () + { + led2.flip(); + } + +void stop() +{ + if(debounce.read_ms()>200) { + while (trajanje.read_ms()<10000) + { + trajanje.start(); + led1=1; + led3=1; + } + led1=0; + led3=0; + trajanje.stop(); + trajanje.reset(); + } + debounce.reset(); +} + + +int main() +{ +srand(time(NULL)); +debounce.start(); + +dugme.rise(&stop); + +inputSW.mode(PullUp); + +tiktok.attach(&Blink,0.2); + +int *returned; +int *spas; +int a, b, c, t, z, u, v, n, m; +int k=0; +int i; + while (1) { + spas = defuse(inputSW); + switch (k) + { + case 0: { + RNG = rand() % 8; + Seg1=SegConvert(RNG); + returned = RNGf(RNG); + a = returned[0]; + b = returned[1]; + c = returned[2]; + led1=0; + led3=0; + wait(5); + k=1; + break; + } + case 1: { + int brojac=9; + for (i=9;i>-1;i--){ + Seg1=SegConvert(i); + + spas = defuse(inputSW); + t = spas[0]; + z = spas[1]; + u = spas[2]; + if (t != 0 || z != 0 || u != 0) + {k=3; + break; + } + + brojac--; + wait(1); + } + if (k == 3) + break; + if (brojac <= 0) + {k=2; + break; + } + + } + + case 2: { + led1=0; + led3=1; + k=0; + wait(3); + break; + } + + case 3: { + spas = defuse(inputSW); + t = spas[0]; + z = spas[1]; + u = spas[2]; + + if(a+b+c == 0) + { + led1=0; + led3=1; + } + + if(a+b+c==1) + { + v=a-u; + n=b-z; + m=c-t; + if(abs(v)+abs(n)+abs(m) == 0) + { + led1=1; + led3=0; + } + else + { + led1=0; + led3=1; + } + } + + if(a+b+c==2) + { + v=a-u; + n=b-z; + m=c-t; + if(abs(v)+abs(n)+abs(m) == 3) + { + led1=1; + led3=0; + } + else + { + led1=0; + led3=1; + } + } + + if(a+b+c == 3) + { + led1=1; + led3=0; + } + + if (t == 0 && z == 0 && u == 0) + {k=0; + pc.printf("if\n\r"); + break; + } + + } + } + } +} + +int *RNGf (int g) +{ + int ar[3]; + switch (g) { + case 0: { + ar[0]=0; + ar[1]=0; + ar[2]=0; + break; + } + case 1: { + ar[0]=0; + ar[1]=0; + ar[2]=1; + break; + } + case 2: { + ar[0]=0; + ar[1]=1; + ar[2]=0; + break; + } + + case 3: { + ar[0]=0; + ar[1]=1; + ar[2]=1; + break; + } + + case 4: { + ar[0]=1; + ar[1]=0; + ar[2]=0; + break; + } + + case 5: { + ar[0]=1; + ar[1]=0; + ar[2]=1; + break; + } + case 6: { + ar[0]=1; + ar[1]=1; + ar[2]=0; + break; + } + + case 7: { + ar[0]=1; + ar[1]=1; + ar[2]=1; + break; + } + + } + return ar; + +} + +char SegConvert(int SegValue) { + char SegByte=0x00; + switch (SegValue) { + case 0 : SegByte = 0x3F;break; + case 1 : SegByte = 0x06;break; + case 2 : SegByte = 0x5B;break; + case 3 : SegByte = 0x4F;break; + case 4 : SegByte = 0x66;break; + case 5 : SegByte = 0x6D;break; + case 6 : SegByte = 0x7D;break; + case 7 : SegByte = 0x07;break; + case 8 : SegByte = 0x7F;break; + case 9 : SegByte = 0x6F;break; + } + return SegByte; +} + +int *defuse (int d) +{ + int ar[3]; + switch (d) { + case 0x1: { + ar[0]=1; + ar[1]=0; + ar[2]=0; + break; + } + case 0x2: { + ar[0]=0; + ar[1]=1; + ar[2]=0; + break; + } + case 0x4: { + ar[0]=0; + ar[1]=0; + ar[2]=1; + break; + } + + default: { + ar[0]=0; + ar[1]=0; + ar[2]=0; + break; + } + + } + return ar; +}