Ultrazuvcno mjerenje udaljenosti
Dependencies: mbed
main.cpp@0:4fb151e9c106, 2015-06-19 (annotated)
- Committer:
- markomileticbj
- Date:
- Fri Jun 19 16:59:54 2015 +0000
- Revision:
- 0:4fb151e9c106
Ultrazvucno mjerenje udaljenosti
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
markomileticbj | 0:4fb151e9c106 | 1 | #include "mbed.h" |
markomileticbj | 0:4fb151e9c106 | 2 | #include "hcsr04.h" |
markomileticbj | 0:4fb151e9c106 | 3 | |
markomileticbj | 0:4fb151e9c106 | 4 | Ticker osvjezavanje; // ticker koji ce sluziti za osvjezavanje prikaza na displeju |
markomileticbj | 0:4fb151e9c106 | 5 | |
markomileticbj | 0:4fb151e9c106 | 6 | Serial pc(USBTX, USBRX); |
markomileticbj | 0:4fb151e9c106 | 7 | Serial bluetooth(p13, p14); |
markomileticbj | 0:4fb151e9c106 | 8 | HCSR04 senzor(p29,p30); |
markomileticbj | 0:4fb151e9c106 | 9 | AnalogIn Ain(p20); |
markomileticbj | 0:4fb151e9c106 | 10 | PwmOut buzzer(p25); |
markomileticbj | 0:4fb151e9c106 | 11 | float ADCdata; |
markomileticbj | 0:4fb151e9c106 | 12 | float temp; |
markomileticbj | 0:4fb151e9c106 | 13 | float koeficijent; |
markomileticbj | 0:4fb151e9c106 | 14 | float duljina; |
markomileticbj | 0:4fb151e9c106 | 15 | int alarm; |
markomileticbj | 0:4fb151e9c106 | 16 | BusInOut inputSW(p15, p16, p17, p18); |
markomileticbj | 0:4fb151e9c106 | 17 | DigitalOut Dis1(p24); // display1 |
markomileticbj | 0:4fb151e9c106 | 18 | DigitalOut Dis2(p23); // display2 |
markomileticbj | 0:4fb151e9c106 | 19 | DigitalOut Dis3(p22); // display3 |
markomileticbj | 0:4fb151e9c106 | 20 | DigitalOut Dis4(p21); // display4 |
markomileticbj | 0:4fb151e9c106 | 21 | BusOut Seg(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP |
markomileticbj | 0:4fb151e9c106 | 22 | int prikaz; |
markomileticbj | 0:4fb151e9c106 | 23 | int Znak1; |
markomileticbj | 0:4fb151e9c106 | 24 | int Znak2; |
markomileticbj | 0:4fb151e9c106 | 25 | int Znak3; |
markomileticbj | 0:4fb151e9c106 | 26 | int Znak4; |
markomileticbj | 0:4fb151e9c106 | 27 | int brojac; |
markomileticbj | 0:4fb151e9c106 | 28 | |
markomileticbj | 0:4fb151e9c106 | 29 | char SegConvert(char SegValue); // function prototype |
markomileticbj | 0:4fb151e9c106 | 30 | |
markomileticbj | 0:4fb151e9c106 | 31 | //funkcija za osvjezavanje ispisa na displejima svakih 5ms-koristi se tromost oka za prikaz |
markomileticbj | 0:4fb151e9c106 | 32 | void displeji() // displeji function |
markomileticbj | 0:4fb151e9c106 | 33 | { |
markomileticbj | 0:4fb151e9c106 | 34 | switch (++brojac) { // brojac se uvecava za 1 i svaki puta kada se uveca, prebacuje ispis na sljedeci displej |
markomileticbj | 0:4fb151e9c106 | 35 | case 1: // ispisivanje na prvi displej |
markomileticbj | 0:4fb151e9c106 | 36 | Dis4=0; //iskljucuje se ispis na 4 displeju |
markomileticbj | 0:4fb151e9c106 | 37 | Dis1=1; //ukljucuje se ispis na 1 displeju |
markomileticbj | 0:4fb151e9c106 | 38 | Seg=SegConvert(Znak1); // tens column |
markomileticbj | 0:4fb151e9c106 | 39 | break; |
markomileticbj | 0:4fb151e9c106 | 40 | case 2: //ispoisivanje na drugi displej |
markomileticbj | 0:4fb151e9c106 | 41 | Dis1=0; //iskljucuje se ispis na 1 displeju |
markomileticbj | 0:4fb151e9c106 | 42 | Dis2=1; //ukljucuje se ispis na 2 displeju |
markomileticbj | 0:4fb151e9c106 | 43 | Seg=SegConvert(Znak2); // tens column |
markomileticbj | 0:4fb151e9c106 | 44 | Seg=Seg|0x80; // napravljena OR funkcija nad prikazanim cijeli djelom broja gdje se ukljucuje i decimalna tocka |
markomileticbj | 0:4fb151e9c106 | 45 | break; |
markomileticbj | 0:4fb151e9c106 | 46 | case 3: //ispisivanje na treci displej |
markomileticbj | 0:4fb151e9c106 | 47 | Dis2=0; //iskljucuje se ispis na 2 displeju |
markomileticbj | 0:4fb151e9c106 | 48 | Dis3=1; //ukljucuje se ispis na 3 displeju |
markomileticbj | 0:4fb151e9c106 | 49 | Seg=SegConvert(Znak3); // tens column |
markomileticbj | 0:4fb151e9c106 | 50 | break; |
markomileticbj | 0:4fb151e9c106 | 51 | case 4: //ispisivanje na cetvrti displej |
markomileticbj | 0:4fb151e9c106 | 52 | Dis3=0; //iskljucuje se ispis na 3displeju |
markomileticbj | 0:4fb151e9c106 | 53 | Dis4=1; //ukljucuje se ispis na 4 displeju |
markomileticbj | 0:4fb151e9c106 | 54 | Seg=SegConvert(Znak4); // tens column |
markomileticbj | 0:4fb151e9c106 | 55 | brojac=0; // kod ispisa na zadnjem displeju resetira se brojac da prikaz opet pocne od prvog displeja |
markomileticbj | 0:4fb151e9c106 | 56 | break; |
markomileticbj | 0:4fb151e9c106 | 57 | } |
markomileticbj | 0:4fb151e9c106 | 58 | } |
markomileticbj | 0:4fb151e9c106 | 59 | |
markomileticbj | 0:4fb151e9c106 | 60 | int main() |
markomileticbj | 0:4fb151e9c106 | 61 | { |
markomileticbj | 0:4fb151e9c106 | 62 | ADCdata=0.06; |
markomileticbj | 0:4fb151e9c106 | 63 | inputSW.mode(PullUp); |
markomileticbj | 0:4fb151e9c106 | 64 | buzzer.period(0.001); |
markomileticbj | 0:4fb151e9c106 | 65 | osvjezavanje.attach(&displeji, 0.005); //funkcija tickera. Vrijeme osvjezavanja displeja 5ms-koristi se tromost oka za prikaz |
markomileticbj | 0:4fb151e9c106 | 66 | while(1) { |
markomileticbj | 0:4fb151e9c106 | 67 | ADCdata=(0.9*ADCdata)+(0.1*Ain); |
markomileticbj | 0:4fb151e9c106 | 68 | temp=ADCdata*303; |
markomileticbj | 0:4fb151e9c106 | 69 | duljina = senzor.udaljenost(); |
markomileticbj | 0:4fb151e9c106 | 70 | koeficijent = (temp*0.6)+331; |
markomileticbj | 0:4fb151e9c106 | 71 | // duljina=duljina/343; |
markomileticbj | 0:4fb151e9c106 | 72 | // duljina = duljina* koeficijent; |
markomileticbj | 0:4fb151e9c106 | 73 | pc.printf("udaljenost u cm =%8.2f\n\r", duljina); |
markomileticbj | 0:4fb151e9c106 | 74 | bluetooth.printf("udaljenost u cm =%8.2f\n\r", duljina); |
markomileticbj | 0:4fb151e9c106 | 75 | switch(inputSW) { |
markomileticbj | 0:4fb151e9c106 | 76 | case 0x1: |
markomileticbj | 0:4fb151e9c106 | 77 | alarm=4; |
markomileticbj | 0:4fb151e9c106 | 78 | break; |
markomileticbj | 0:4fb151e9c106 | 79 | case 0x2: |
markomileticbj | 0:4fb151e9c106 | 80 | alarm=6; |
markomileticbj | 0:4fb151e9c106 | 81 | break; |
markomileticbj | 0:4fb151e9c106 | 82 | case 0x3: |
markomileticbj | 0:4fb151e9c106 | 83 | alarm=8; |
markomileticbj | 0:4fb151e9c106 | 84 | break; |
markomileticbj | 0:4fb151e9c106 | 85 | case 0x4: |
markomileticbj | 0:4fb151e9c106 | 86 | alarm=10; |
markomileticbj | 0:4fb151e9c106 | 87 | break; |
markomileticbj | 0:4fb151e9c106 | 88 | case 0x5: |
markomileticbj | 0:4fb151e9c106 | 89 | alarm=12; |
markomileticbj | 0:4fb151e9c106 | 90 | break; |
markomileticbj | 0:4fb151e9c106 | 91 | case 0x6: |
markomileticbj | 0:4fb151e9c106 | 92 | alarm=14; |
markomileticbj | 0:4fb151e9c106 | 93 | break; |
markomileticbj | 0:4fb151e9c106 | 94 | case 0x7: |
markomileticbj | 0:4fb151e9c106 | 95 | alarm=16; |
markomileticbj | 0:4fb151e9c106 | 96 | break; |
markomileticbj | 0:4fb151e9c106 | 97 | case 0x8: |
markomileticbj | 0:4fb151e9c106 | 98 | alarm=18; |
markomileticbj | 0:4fb151e9c106 | 99 | break; |
markomileticbj | 0:4fb151e9c106 | 100 | case 0x9: |
markomileticbj | 0:4fb151e9c106 | 101 | alarm=20; |
markomileticbj | 0:4fb151e9c106 | 102 | break; |
markomileticbj | 0:4fb151e9c106 | 103 | case 0xA: |
markomileticbj | 0:4fb151e9c106 | 104 | alarm=22; |
markomileticbj | 0:4fb151e9c106 | 105 | break; |
markomileticbj | 0:4fb151e9c106 | 106 | case 0xB: |
markomileticbj | 0:4fb151e9c106 | 107 | alarm=24; |
markomileticbj | 0:4fb151e9c106 | 108 | break; |
markomileticbj | 0:4fb151e9c106 | 109 | case 0xC: |
markomileticbj | 0:4fb151e9c106 | 110 | alarm=26; |
markomileticbj | 0:4fb151e9c106 | 111 | break; |
markomileticbj | 0:4fb151e9c106 | 112 | case 0xD: |
markomileticbj | 0:4fb151e9c106 | 113 | alarm=28; |
markomileticbj | 0:4fb151e9c106 | 114 | break; |
markomileticbj | 0:4fb151e9c106 | 115 | case 0xE: |
markomileticbj | 0:4fb151e9c106 | 116 | alarm=30; |
markomileticbj | 0:4fb151e9c106 | 117 | break; |
markomileticbj | 0:4fb151e9c106 | 118 | case 0xF: |
markomileticbj | 0:4fb151e9c106 | 119 | alarm=32; |
markomileticbj | 0:4fb151e9c106 | 120 | break; |
markomileticbj | 0:4fb151e9c106 | 121 | default : |
markomileticbj | 0:4fb151e9c106 | 122 | alarm=2; |
markomileticbj | 0:4fb151e9c106 | 123 | } |
markomileticbj | 0:4fb151e9c106 | 124 | if (alarm>duljina) { |
markomileticbj | 0:4fb151e9c106 | 125 | pc.printf("ALARM =%d\n\r", alarm); |
markomileticbj | 0:4fb151e9c106 | 126 | bluetooth.printf("ALARM =%d\n\r", alarm); |
markomileticbj | 0:4fb151e9c106 | 127 | buzzer=0.5; |
markomileticbj | 0:4fb151e9c106 | 128 | } else { |
markomileticbj | 0:4fb151e9c106 | 129 | buzzer=0.0; |
markomileticbj | 0:4fb151e9c106 | 130 | } |
markomileticbj | 0:4fb151e9c106 | 131 | prikaz = duljina*100; //preracunavanje float varijable u postotcima u integer varijablu u voltima radi ispisa |
markomileticbj | 0:4fb151e9c106 | 132 | Znak1 = prikaz/1000; //racunanje cijelog djela broja za ispis |
markomileticbj | 0:4fb151e9c106 | 133 | Znak2 = (prikaz/100)%10; //racunanje prve decimale za ispis |
markomileticbj | 0:4fb151e9c106 | 134 | Znak3 = (prikaz/10)%10; //racunanje druge decimale za ispis |
markomileticbj | 0:4fb151e9c106 | 135 | Znak4 = prikaz%10; //racunanje trece decimale za ispis |
markomileticbj | 0:4fb151e9c106 | 136 | wait(0.5); |
markomileticbj | 0:4fb151e9c106 | 137 | } |
markomileticbj | 0:4fb151e9c106 | 138 | } |
markomileticbj | 0:4fb151e9c106 | 139 | |
markomileticbj | 0:4fb151e9c106 | 140 | char SegConvert(char SegValue) // function 'SegConvert' |
markomileticbj | 0:4fb151e9c106 | 141 | { |
markomileticbj | 0:4fb151e9c106 | 142 | char SegByte=0x00; |
markomileticbj | 0:4fb151e9c106 | 143 | switch (SegValue) { //DPGFEDCBA |
markomileticbj | 0:4fb151e9c106 | 144 | case 0 : |
markomileticbj | 0:4fb151e9c106 | 145 | SegByte = 0x3F; |
markomileticbj | 0:4fb151e9c106 | 146 | break; // 00111111 binary |
markomileticbj | 0:4fb151e9c106 | 147 | case 1 : |
markomileticbj | 0:4fb151e9c106 | 148 | SegByte = 0x06; |
markomileticbj | 0:4fb151e9c106 | 149 | break; // 00000110 binary |
markomileticbj | 0:4fb151e9c106 | 150 | case 2 : |
markomileticbj | 0:4fb151e9c106 | 151 | SegByte = 0x5B; |
markomileticbj | 0:4fb151e9c106 | 152 | break; // 01011011 binary |
markomileticbj | 0:4fb151e9c106 | 153 | case 3 : |
markomileticbj | 0:4fb151e9c106 | 154 | SegByte = 0x4F; |
markomileticbj | 0:4fb151e9c106 | 155 | break; // 01001111 binary |
markomileticbj | 0:4fb151e9c106 | 156 | case 4 : |
markomileticbj | 0:4fb151e9c106 | 157 | SegByte = 0x66; |
markomileticbj | 0:4fb151e9c106 | 158 | break; // 01100110 binary |
markomileticbj | 0:4fb151e9c106 | 159 | case 5 : |
markomileticbj | 0:4fb151e9c106 | 160 | SegByte = 0x6D; |
markomileticbj | 0:4fb151e9c106 | 161 | break; // 01101101 binary |
markomileticbj | 0:4fb151e9c106 | 162 | case 6 : |
markomileticbj | 0:4fb151e9c106 | 163 | SegByte = 0x7D; |
markomileticbj | 0:4fb151e9c106 | 164 | break; // 01111101 binary |
markomileticbj | 0:4fb151e9c106 | 165 | case 7 : |
markomileticbj | 0:4fb151e9c106 | 166 | SegByte = 0x07; |
markomileticbj | 0:4fb151e9c106 | 167 | break; // 00000111 binary |
markomileticbj | 0:4fb151e9c106 | 168 | case 8 : |
markomileticbj | 0:4fb151e9c106 | 169 | SegByte = 0x7F; |
markomileticbj | 0:4fb151e9c106 | 170 | break; // 01111111 binary |
markomileticbj | 0:4fb151e9c106 | 171 | case 9 : |
markomileticbj | 0:4fb151e9c106 | 172 | SegByte = 0x6F; |
markomileticbj | 0:4fb151e9c106 | 173 | break; // 01101111 binary |
markomileticbj | 0:4fb151e9c106 | 174 | } |
markomileticbj | 0:4fb151e9c106 | 175 | return SegByte; |
markomileticbj | 0:4fb151e9c106 | 176 | } |