LV9_Grupa7_Tim004_Zadatak2 Bašić Amar Sarajčić Ensar

Dependencies:   mbed

Revision:
0:3f93fd9343e2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 14 17:58:33 2015 +0000
@@ -0,0 +1,206 @@
+#include "mbed.h"
+
+#define MAX_BRZINA 1230
+#define MIN_BRZINA 500
+#define CLOCKWISE true
+#define COUNTERCLOCKWISE false
+#define POZ1 8
+#define POZ2 12
+#define POZ3 4
+#define POZ4 6
+#define POZ5 2
+#define POZ6 3
+#define POZ7 1
+#define POZ8 9
+
+Serial pc(USBTX, USBRX);
+
+BusOut IN(dp13, dp11, dp10, dp9);
+DigitalOut myled(LED1);
+
+float brzina = MIN_BRZINA;
+bool smjer = CLOCKWISE;
+bool pokrenut = false;
+int pozicija = 0;
+int ugaoPoz = 0;
+
+void start();
+void stop(); 
+void postaviUgao(int ugao);
+void postaviPoziciju(int pozicija);
+void rotirajCW();
+void rotirajCC();
+void citajPoziciju();
+void citajBrzinu();
+void rotiraj();
+void ucitaj();
+
+int main() {
+    pc.printf("TESTIRANJE!");
+    wait(2);
+    pc.printf("Unesi U### za podesavanje pozicije, P za pokretanje, Z za zaustavljanje, B#### za podesavanje brzine i S za promjenu smjera kretanja!\n");
+    pc.attach(&ucitaj);//, 1/brzina);
+    while(1) {
+        rotiraj();
+    }
+}
+
+void ucitaj()
+{
+    if(pc.readable())
+    {
+        char znak = pc.getc();
+        if(znak == 'U' || znak == 'u')
+            citajPoziciju();
+        else if (znak == 'P' || znak == 'p')
+            start();
+        else if (znak == 'Z' || znak == 'z')
+            stop();
+        else if (znak == 'B' || znak == 'b')
+            citajBrzinu();
+        else if (znak == 'S' || znak == 's')
+            smjer = !smjer;   
+    }
+     
+}
+
+void start()
+{
+    pokrenut = true;
+}
+
+void stop()
+{
+    pokrenut = false;
+}
+
+void postaviUgao(int ugao)
+{
+    start();
+    if(ugao < 0 || ugao > 360)
+        return;
+    while(ugaoPoz != int(4096./(360. / ugao))){rotiraj();}
+    stop();   
+}
+
+void postaviPoziciju(int pozicija)
+{
+    IN = pozicija;
+}
+
+void rotirajCW()
+{
+    pozicija++;
+    ugaoPoz++;
+    if(pozicija > 7)
+        pozicija = 0;
+    if(ugaoPoz > 4096)
+        ugaoPoz = 0;
+    switch(pozicija)
+    {
+        case 0:
+            postaviPoziciju(POZ1);
+            break;
+        case 1:
+            postaviPoziciju(POZ2);
+            break;
+        case 2:
+            postaviPoziciju(POZ3);
+            break;
+        case 3:
+            postaviPoziciju(POZ4);
+            break;
+        case 4:
+            postaviPoziciju(POZ5);
+            break;
+        case 5:
+            postaviPoziciju(POZ6);
+            break;
+        case 6:
+            postaviPoziciju(POZ7);
+            break;
+        case 7:
+            postaviPoziciju(POZ8);
+            break;  
+    }
+}
+
+void rotirajCC()
+{
+    pozicija--;
+    ugaoPoz--;
+    if(pozicija < 0)
+        pozicija = 7;
+    if(ugaoPoz <= 0)
+        ugaoPoz = 4096;
+    switch(pozicija)
+    {
+        case 0:
+            postaviPoziciju(POZ1);
+            break;
+        case 1:
+            postaviPoziciju(POZ2);
+            break;
+        case 2:
+            postaviPoziciju(POZ3);
+            break;
+        case 3:
+            postaviPoziciju(POZ4);
+            break;
+        case 4:
+            postaviPoziciju(POZ5);
+            break;
+        case 5:
+            postaviPoziciju(POZ6);
+            break;
+        case 6:
+            postaviPoziciju(POZ7);
+            break;
+        case 7:
+            postaviPoziciju(POZ8);
+            break;  
+    }
+}
+
+void rotiraj()
+{
+    if(!pokrenut)
+        return;
+    if(smjer == CLOCKWISE)
+        rotirajCW();
+    else if(smjer == COUNTERCLOCKWISE)
+        rotirajCC();
+    wait(1/brzina);
+}
+
+void citajPoziciju()
+{
+    char znak;
+    int ugao = 0;
+    for(int i = 0; i < 3; i++)
+    {
+        while(!pc.readable()){rotiraj();}
+        znak = pc.getc();
+        if(znak < '0' || znak > '9')
+            break;
+        ugao = ugao*10 + (znak-'0');
+    } 
+    postaviUgao(ugao);
+}
+
+void citajBrzinu()
+{
+    char znak;
+    int broj = 0;
+    for(int i = 0; i < 4; i++)
+    {
+        while(!pc.readable()){rotiraj();}
+        znak = pc.getc();
+        if(znak < '0' || znak > '9')
+            break;
+        broj = broj*10 + (znak - '0');
+    }
+    pc.printf("%d", broj);
+    if(broj >= MIN_BRZINA && broj <= MAX_BRZINA)
+        brzina = broj;
+}
\ No newline at end of file