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)

Files at this revision

API Documentation at this revision

Comitter:
ekunovic
Date:
Sat Feb 20 16:21:09 2021 +0000
Commit message:
.

Changed in this revision

BluetoothSerial.lib Show annotated file Show diff for this revision Revisions of this file
On_Off.lib Show annotated file Show diff for this revision Revisions of this file
SeeedShieldBot.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BluetoothSerial.lib	Sat Feb 20 16:21:09 2021 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/yihui/code/BluetoothSerial/#f56002898ee8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/On_Off.lib	Sat Feb 20 16:21:09 2021 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/ekunovic/code/On_Off/#5cd439f68160
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SeeedShieldBot.lib	Sat Feb 20 16:21:09 2021 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/components/code/SeeedShieldBot/#9fd1722259a1
--- /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;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat Feb 20 16:21:09 2021 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file