Ultrazvucno mjerenje udaljenosti sa prikazom na dva sedam segmenta displeja

Dependencies:   mbed

main.cpp

Committer:
dfraj
Date:
2016-12-13
Revision:
0:7f642f42dec0

File content as of revision 0:7f642f42dec0:

#include "mbed.h"
 
Ticker osvjezavanje;                                
Serial pc(USBTX, USBRX);                           
DigitalOut trig (p29);                              
DigitalIn  echo (p30);                              
PwmOut led(p21);
int alarm;
BusInOut inputSW(p24, p25, p26, p27);               
DigitalOut Dis1(p19);                               
DigitalOut Dis2(p20);                               
BusOut Seg(p5,p6,p7,p8,p9,p10,p11,p12);             
int prikaz;
int Znak1;
int Znak2;
int brojac;
Timer tmr;                                          
double pulsedur, distance;                          
char SegConvert(char SegValue);                     
void displays();
  
int main()
{
    inputSW.mode(PullUp);                           
    led.period(0.001);
    osvjezavanje.attach(&displays, 0.005);          
    while(1) {
        tmr.reset();                                
        trig = 1;                                   
        wait_us(10);                                
        trig = 0;                                   
 
        while (!echo);                              
        tmr.start();
 
        while (echo);                               
        tmr.stop();
 
        pulsedur = tmr.read_us();                   
        distance = pulsedur/58;                     
        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) {
            led=0.5;
        } else {
            led=0.0;
        }
        prikaz = distance*100;                      
        Znak1 = prikaz/1000;                        
        Znak2 = (prikaz/100)%10;                    
        wait(0.5);
    }
}

void displays(){
    switch (++brojac) {                             
        case 1:                                     
            Dis1=1;                                 
            Dis2=0;                                 
            Seg=SegConvert(Znak1);                  
            break;
        case 2:                                     
            Dis1=0;                                 
            Dis2=1;                                 
            Seg=SegConvert(Znak2);                  
            brojac=0;                               
            break;
    }
}
 
char SegConvert(char SegValue){
    char SegByte=0x00;
    switch (SegValue) {                             
        case 0 :
            SegByte = 0x3F;                         
            break;                                  
        case 1 :
            SegByte = 0x06;                         
            break; 
        case 2 :
            SegByte = 0x5B;                         
            break; 
        case 3 :
            SegByte = 0x4F;                         
            break; 
        case 4 :
            SegByte = 0x66;                         
            break; 
        case 5 :
            SegByte = 0x6D;                         
            break; 
        case 6 :
            SegByte = 0x7D;                         
            break; 
        case 7 :
            SegByte = 0x07;                         
            break; 
        case 8 :
            SegByte = 0x7F;                         
            break; 
        case 9 :
            SegByte = 0x6F;                         
            break; 
    }
    return SegByte;
}