
LV9_Grupa7_Tim004_Zadatak2 Bašić Amar Sarajčić Ensar
main.cpp
- Committer:
- pai2015ensarsarajcic
- Date:
- 2015-05-14
- Revision:
- 0:3f93fd9343e2
File content as of revision 0:3f93fd9343e2:
#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; }