UZ mjerenje udadaljenosti(Kupres,Jazvić)

Dependencies:   mbed

Fork of mikroupravljac by Krešo Kupres

Committer:
kkupres
Date:
Fri Jun 19 17:57:43 2015 +0000
Revision:
0:ce0c9cbc4770
Zadatak6(Kupres,Jazvi?)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kkupres 0:ce0c9cbc4770 1 #include "mbed.h"
kkupres 0:ce0c9cbc4770 2
kkupres 0:ce0c9cbc4770 3 Ticker osvjezavanje; // ticker koji ce sluziti za osvjezavanje prikaza na displeju
kkupres 0:ce0c9cbc4770 4
kkupres 0:ce0c9cbc4770 5 Serial pc(USBTX, USBRX);
kkupres 0:ce0c9cbc4770 6 DigitalOut trig (p29);
kkupres 0:ce0c9cbc4770 7 DigitalIn echo (p30);
kkupres 0:ce0c9cbc4770 8 PwmOut buzzer(p21);
kkupres 0:ce0c9cbc4770 9 int alarm;
kkupres 0:ce0c9cbc4770 10 BusInOut inputSW(p24, p25, p26, p27);
kkupres 0:ce0c9cbc4770 11 DigitalOut Dis1(p20); // display1
kkupres 0:ce0c9cbc4770 12 DigitalOut Dis2(p19); // display2
kkupres 0:ce0c9cbc4770 13 BusOut Seg(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP
kkupres 0:ce0c9cbc4770 14 int prikaz;
kkupres 0:ce0c9cbc4770 15 int Znak1;
kkupres 0:ce0c9cbc4770 16 int Znak2;
kkupres 0:ce0c9cbc4770 17 int brojac;
kkupres 0:ce0c9cbc4770 18 Timer tmr;
kkupres 0:ce0c9cbc4770 19 double pulsedur, distance;
kkupres 0:ce0c9cbc4770 20
kkupres 0:ce0c9cbc4770 21
kkupres 0:ce0c9cbc4770 22 char SegConvert(char SegValue); // function prototype
kkupres 0:ce0c9cbc4770 23
kkupres 0:ce0c9cbc4770 24 //funkcija za osvjezavanje ispisa na displejima svakih 5ms-koristi se tromost oka za prikaz
kkupres 0:ce0c9cbc4770 25 void displeji() // displeji function
kkupres 0:ce0c9cbc4770 26 {
kkupres 0:ce0c9cbc4770 27 switch (++brojac) { // brojac se uvecava za 1 i svaki puta kada se uveca, prebacuje ispis na sljedeci displej
kkupres 0:ce0c9cbc4770 28 case 1: // ispisivanje na prvi displej
kkupres 0:ce0c9cbc4770 29 Dis2=0; //iskljucuje se ispis na 4 displeju
kkupres 0:ce0c9cbc4770 30 Dis1=1; //ukljucuje se ispis na 1 displeju
kkupres 0:ce0c9cbc4770 31 Seg=SegConvert(Znak1); // tens column
kkupres 0:ce0c9cbc4770 32 break;
kkupres 0:ce0c9cbc4770 33 case 2: //ispoisivanje na drugi displej
kkupres 0:ce0c9cbc4770 34 Dis1=0; //iskljucuje se ispis na 1 displeju
kkupres 0:ce0c9cbc4770 35 Dis2=1; //ukljucuje se ispis na 2 displeju
kkupres 0:ce0c9cbc4770 36 Seg=SegConvert(Znak2); // tens column
kkupres 0:ce0c9cbc4770 37 brojac=0; // kod ispisa na zadnjem displeju resetira se brojac da prikaz opet pocne od prvog displeja
kkupres 0:ce0c9cbc4770 38 break;
kkupres 0:ce0c9cbc4770 39 }
kkupres 0:ce0c9cbc4770 40 }
kkupres 0:ce0c9cbc4770 41
kkupres 0:ce0c9cbc4770 42 int main()
kkupres 0:ce0c9cbc4770 43 {
kkupres 0:ce0c9cbc4770 44 inputSW.mode(PullUp);
kkupres 0:ce0c9cbc4770 45 buzzer.period(0.001);
kkupres 0:ce0c9cbc4770 46 osvjezavanje.attach(&displeji, 0.005); //funkcija tickera. Vrijeme osvjezavanja displeja 5ms-koristi se tromost oka za prikaz
kkupres 0:ce0c9cbc4770 47 while(1) {
kkupres 0:ce0c9cbc4770 48 tmr.reset();
kkupres 0:ce0c9cbc4770 49 trig = 1;
kkupres 0:ce0c9cbc4770 50 wait_us(10);
kkupres 0:ce0c9cbc4770 51 trig = 0;
kkupres 0:ce0c9cbc4770 52
kkupres 0:ce0c9cbc4770 53 while (!echo); // wait high
kkupres 0:ce0c9cbc4770 54 tmr.start();
kkupres 0:ce0c9cbc4770 55
kkupres 0:ce0c9cbc4770 56 while (echo); // wait low
kkupres 0:ce0c9cbc4770 57 tmr.stop();
kkupres 0:ce0c9cbc4770 58
kkupres 0:ce0c9cbc4770 59 pulsedur = tmr.read_us();
kkupres 0:ce0c9cbc4770 60 distance = pulsedur*0.017; //cm
kkupres 0:ce0c9cbc4770 61 pc.printf("pulsedur=%8.2f\n\r", distance);
kkupres 0:ce0c9cbc4770 62 switch(inputSW) {
kkupres 0:ce0c9cbc4770 63 case 0x1:
kkupres 0:ce0c9cbc4770 64 alarm=4;
kkupres 0:ce0c9cbc4770 65 break;
kkupres 0:ce0c9cbc4770 66 case 0x2:
kkupres 0:ce0c9cbc4770 67 alarm=6;
kkupres 0:ce0c9cbc4770 68 break;
kkupres 0:ce0c9cbc4770 69 case 0x3:
kkupres 0:ce0c9cbc4770 70 alarm=8;
kkupres 0:ce0c9cbc4770 71 break;
kkupres 0:ce0c9cbc4770 72 case 0x4:
kkupres 0:ce0c9cbc4770 73 alarm=10;
kkupres 0:ce0c9cbc4770 74 break;
kkupres 0:ce0c9cbc4770 75 case 0x5:
kkupres 0:ce0c9cbc4770 76 alarm=12;
kkupres 0:ce0c9cbc4770 77 break;
kkupres 0:ce0c9cbc4770 78 case 0x6:
kkupres 0:ce0c9cbc4770 79 alarm=14;
kkupres 0:ce0c9cbc4770 80 break;
kkupres 0:ce0c9cbc4770 81 case 0x7:
kkupres 0:ce0c9cbc4770 82 alarm=16;
kkupres 0:ce0c9cbc4770 83 break;
kkupres 0:ce0c9cbc4770 84 case 0x8:
kkupres 0:ce0c9cbc4770 85 alarm=18;
kkupres 0:ce0c9cbc4770 86 break;
kkupres 0:ce0c9cbc4770 87 case 0x9:
kkupres 0:ce0c9cbc4770 88 alarm=20;
kkupres 0:ce0c9cbc4770 89 break;
kkupres 0:ce0c9cbc4770 90 case 0xA:
kkupres 0:ce0c9cbc4770 91 alarm=22;
kkupres 0:ce0c9cbc4770 92 break;
kkupres 0:ce0c9cbc4770 93 case 0xB:
kkupres 0:ce0c9cbc4770 94 alarm=24;
kkupres 0:ce0c9cbc4770 95 break;
kkupres 0:ce0c9cbc4770 96 case 0xC:
kkupres 0:ce0c9cbc4770 97 alarm=26;
kkupres 0:ce0c9cbc4770 98 break;
kkupres 0:ce0c9cbc4770 99 case 0xD:
kkupres 0:ce0c9cbc4770 100 alarm=28;
kkupres 0:ce0c9cbc4770 101 break;
kkupres 0:ce0c9cbc4770 102 case 0xE:
kkupres 0:ce0c9cbc4770 103 alarm=30;
kkupres 0:ce0c9cbc4770 104 break;
kkupres 0:ce0c9cbc4770 105 case 0xF:
kkupres 0:ce0c9cbc4770 106 alarm=32;
kkupres 0:ce0c9cbc4770 107 break;
kkupres 0:ce0c9cbc4770 108 default :
kkupres 0:ce0c9cbc4770 109 alarm=2;
kkupres 0:ce0c9cbc4770 110 }
kkupres 0:ce0c9cbc4770 111 if (alarm>distance) {
kkupres 0:ce0c9cbc4770 112 buzzer=0.5;
kkupres 0:ce0c9cbc4770 113 } else {
kkupres 0:ce0c9cbc4770 114 buzzer=0.0;
kkupres 0:ce0c9cbc4770 115 }
kkupres 0:ce0c9cbc4770 116 prikaz = distance*100; //preracunavanje float varijable u postotcima u integer varijablu u voltima radi ispisa
kkupres 0:ce0c9cbc4770 117 Znak1 = prikaz/1000; //racunanje cijelog djela broja za ispis
kkupres 0:ce0c9cbc4770 118 Znak2 = (prikaz/100)%10; //racunanje prve decimale za ispis
kkupres 0:ce0c9cbc4770 119 wait(0.5);
kkupres 0:ce0c9cbc4770 120 }
kkupres 0:ce0c9cbc4770 121 }
kkupres 0:ce0c9cbc4770 122
kkupres 0:ce0c9cbc4770 123 char SegConvert(char SegValue) // function 'SegConvert'
kkupres 0:ce0c9cbc4770 124 {
kkupres 0:ce0c9cbc4770 125 char SegByte=0x00;
kkupres 0:ce0c9cbc4770 126 switch (SegValue) { //DPGFEDCBA
kkupres 0:ce0c9cbc4770 127 case 0 :
kkupres 0:ce0c9cbc4770 128 SegByte = 0x3F;
kkupres 0:ce0c9cbc4770 129 break; // 00111111 binary
kkupres 0:ce0c9cbc4770 130 case 1 :
kkupres 0:ce0c9cbc4770 131 SegByte = 0x06;
kkupres 0:ce0c9cbc4770 132 break; // 00000110 binary
kkupres 0:ce0c9cbc4770 133 case 2 :
kkupres 0:ce0c9cbc4770 134 SegByte = 0x5B;
kkupres 0:ce0c9cbc4770 135 break; // 01011011 binary
kkupres 0:ce0c9cbc4770 136 case 3 :
kkupres 0:ce0c9cbc4770 137 SegByte = 0x4F;
kkupres 0:ce0c9cbc4770 138 break; // 01001111 binary
kkupres 0:ce0c9cbc4770 139 case 4 :
kkupres 0:ce0c9cbc4770 140 SegByte = 0x66;
kkupres 0:ce0c9cbc4770 141 break; // 01100110 binary
kkupres 0:ce0c9cbc4770 142 case 5 :
kkupres 0:ce0c9cbc4770 143 SegByte = 0x6D;
kkupres 0:ce0c9cbc4770 144 break; // 01101101 binary
kkupres 0:ce0c9cbc4770 145 case 6 :
kkupres 0:ce0c9cbc4770 146 SegByte = 0x7D;
kkupres 0:ce0c9cbc4770 147 break; // 01111101 binary
kkupres 0:ce0c9cbc4770 148 case 7 :
kkupres 0:ce0c9cbc4770 149 SegByte = 0x07;
kkupres 0:ce0c9cbc4770 150 break; // 00000111 binary
kkupres 0:ce0c9cbc4770 151 case 8 :
kkupres 0:ce0c9cbc4770 152 SegByte = 0x7F;
kkupres 0:ce0c9cbc4770 153 break; // 01111111 binary
kkupres 0:ce0c9cbc4770 154 case 9 :
kkupres 0:ce0c9cbc4770 155 SegByte = 0x6F;
kkupres 0:ce0c9cbc4770 156 break; // 01101111 binary
kkupres 0:ce0c9cbc4770 157 }
kkupres 0:ce0c9cbc4770 158 return SegByte;
kkupres 0:ce0c9cbc4770 159 }