
LV9_Grupa7_Tim004_Zadatak2 Bašić Amar Sarajčić Ensar
Diff: main.cpp
- 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