UZ mjerenje udadaljenosti(Kupres,Jazvić)

Dependencies:   mbed

Fork of mikroupravljac by Krešo Kupres

main.cpp

Committer:
kkupres
Date:
2015-06-19
Revision:
0:ce0c9cbc4770

File content as of revision 0:ce0c9cbc4770:

#include "mbed.h"

Ticker osvjezavanje; // ticker koji ce sluziti za osvjezavanje prikaza na displeju

Serial pc(USBTX, USBRX);
DigitalOut trig (p29);
DigitalIn  echo (p30);
PwmOut buzzer(p21);
int alarm;
BusInOut inputSW(p24, p25, p26, p27);
DigitalOut Dis1(p20); // display1
DigitalOut Dis2(p19); // display2
BusOut Seg(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP
int prikaz;
int Znak1;
int Znak2;
int brojac;
Timer tmr;
double pulsedur, distance;


char SegConvert(char SegValue); // function prototype

//funkcija za osvjezavanje ispisa na displejima svakih  5ms-koristi se tromost oka za prikaz
void displeji()   // displeji function
{
    switch (++brojac) { // brojac se uvecava za 1 i svaki puta kada se uveca, prebacuje ispis na sljedeci displej
        case 1:  // ispisivanje na prvi displej
            Dis2=0; //iskljucuje se ispis na 4 displeju
            Dis1=1; //ukljucuje se ispis na 1 displeju
            Seg=SegConvert(Znak1); // tens column
            break;
        case 2:  //ispoisivanje na drugi displej
            Dis1=0; //iskljucuje se ispis na 1 displeju
            Dis2=1; //ukljucuje se ispis na 2 displeju
            Seg=SegConvert(Znak2); // tens column
            brojac=0;  // kod ispisa na zadnjem displeju resetira se brojac da prikaz opet pocne od prvog displeja
            break;
    }
}

int main()
{
    inputSW.mode(PullUp);
    buzzer.period(0.001);
    osvjezavanje.attach(&displeji, 0.005);  //funkcija tickera. Vrijeme osvjezavanja displeja 5ms-koristi se tromost oka za prikaz
    while(1) {
        tmr.reset();
        trig = 1;
        wait_us(10);
        trig = 0;
 
        while (!echo); // wait high
        tmr.start();
 
        while (echo);  // wait low
        tmr.stop();
 
        pulsedur = tmr.read_us();
        distance = pulsedur*0.017; //cm
        pc.printf("pulsedur=%8.2f\n\r", distance); 
        switch(inputSW) {
            case 0x1:
                alarm=4;
                break;
            case 0x2:
                alarm=6;
                break;
            case 0x3:
                alarm=8;
                break;
            case 0x4:
                alarm=10;
                break;
            case 0x5:
                alarm=12;
                break;
            case 0x6:
                alarm=14;
                break;
            case 0x7:
                alarm=16;
                break;
            case 0x8:
                alarm=18;
                break;
            case 0x9:
                alarm=20;
                break;
            case 0xA:
                alarm=22;
                break;
            case 0xB:
                alarm=24;
                break;
            case 0xC:
                alarm=26;
                break;
            case 0xD:
                alarm=28;
                break;
            case 0xE:
                alarm=30;
                break;
            case 0xF:
                alarm=32;
                break;
            default :
                alarm=2;
        }
        if (alarm>distance) {
            buzzer=0.5;
        } else {
            buzzer=0.0;
        }
        prikaz = distance*100; //preracunavanje float varijable u postotcima u integer varijablu u voltima radi ispisa
        Znak1 = prikaz/1000;  //racunanje cijelog djela broja za ispis
        Znak2 = (prikaz/100)%10;  //racunanje prve decimale za ispis
        wait(0.5);
    }
}

char SegConvert(char SegValue)   // function 'SegConvert'
{
    char SegByte=0x00;
    switch (SegValue) { //DPGFEDCBA
        case 0 :
            SegByte = 0x3F;
            break; // 00111111 binary
        case 1 :
            SegByte = 0x06;
            break; // 00000110 binary
        case 2 :
            SegByte = 0x5B;
            break; // 01011011 binary
        case 3 :
            SegByte = 0x4F;
            break; // 01001111 binary
        case 4 :
            SegByte = 0x66;
            break; // 01100110 binary
        case 5 :
            SegByte = 0x6D;
            break; // 01101101 binary
        case 6 :
            SegByte = 0x7D;
            break; // 01111101 binary
        case 7 :
            SegByte = 0x07;
            break; // 00000111 binary
        case 8 :
            SegByte = 0x7F;
            break; // 01111111 binary
        case 9 :
            SegByte = 0x6F;
            break; // 01101111 binary
    }
    return SegByte;
}