LV9_Grupa7_Tim004_Zadatak2 Bašić Amar Sarajčić Ensar

Dependencies:   mbed

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;
}