Ultrazuvcno mjerenje udaljenosti

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
markomileticbj
Date:
Fri Jun 19 16:59:54 2015 +0000
Commit message:
Ultrazvucno mjerenje udaljenosti

Changed in this revision

hcsr04.cpp Show annotated file Show diff for this revision Revisions of this file
hcsr04.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hcsr04.cpp	Fri Jun 19 16:59:54 2015 +0000
@@ -0,0 +1,24 @@
+#include "hcsr04.h"
+#include "mbed.h"
+
+HCSR04::HCSR04(PinName t, PinName e) : triger(t), echo(e) {}
+float HCSR04::echo_trajanje()
+{
+    tmr.reset();
+    triger=1;
+    wait_us(20);
+    triger=0;
+    while(echo==0);
+    tmr.start();
+    while(echo==1);
+    tmr.stop();
+    return tmr.read_us();
+}
+
+float HCSR04::udaljenost()
+{
+    trajanje = echo_trajanje();
+    trajanje = (trajanje/2)*343  ;
+    udaljenost_cm = trajanje/10000  ;
+    return udaljenost_cm;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hcsr04.h	Fri Jun 19 16:59:54 2015 +0000
@@ -0,0 +1,20 @@
+#ifndef hcsr04_H
+#define hcsr04_H
+#include "mbed.h"
+
+class HCSR04
+{
+public:
+    HCSR04(PinName t, PinName e);
+    float echo_trajanje();
+    float udaljenost();
+
+private:
+    DigitalOut triger;
+    DigitalIn echo;
+    Timer tmr;
+    float trajanje;
+    float udaljenost_cm;
+};
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jun 19 16:59:54 2015 +0000
@@ -0,0 +1,176 @@
+#include "mbed.h"
+#include "hcsr04.h"
+
+Ticker osvjezavanje; // ticker koji ce sluziti za osvjezavanje prikaza na displeju
+
+Serial pc(USBTX, USBRX);
+Serial bluetooth(p13, p14);
+HCSR04 senzor(p29,p30);
+AnalogIn Ain(p20);
+PwmOut buzzer(p25);
+float ADCdata;
+float temp;
+float koeficijent;
+float duljina;
+int alarm;
+BusInOut inputSW(p15, p16, p17, p18);
+DigitalOut Dis1(p24); // display1
+DigitalOut Dis2(p23); // display2
+DigitalOut Dis3(p22); // display3
+DigitalOut Dis4(p21); // display4
+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 Znak3;
+int Znak4;
+int brojac;
+
+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
+            Dis4=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
+            Seg=Seg|0x80;  // napravljena OR funkcija nad prikazanim cijeli djelom broja gdje se ukljucuje i decimalna tocka
+            break;
+        case 3:  //ispisivanje na treci displej
+            Dis2=0; //iskljucuje se ispis na 2 displeju
+            Dis3=1; //ukljucuje se ispis na 3 displeju
+            Seg=SegConvert(Znak3); // tens column
+            break;
+        case 4: //ispisivanje na cetvrti displej
+            Dis3=0; //iskljucuje se ispis na 3displeju
+            Dis4=1; //ukljucuje se ispis na 4 displeju
+            Seg=SegConvert(Znak4); // tens column
+            brojac=0;  // kod ispisa na zadnjem displeju resetira se brojac da prikaz opet pocne od prvog displeja
+            break;
+    }
+}
+
+int main()
+{
+    ADCdata=0.06;
+    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) {
+        ADCdata=(0.9*ADCdata)+(0.1*Ain);
+        temp=ADCdata*303;
+        duljina = senzor.udaljenost();
+        koeficijent = (temp*0.6)+331;
+//        duljina=duljina/343;
+//        duljina = duljina* koeficijent;
+        pc.printf("udaljenost u cm =%8.2f\n\r", duljina);
+        bluetooth.printf("udaljenost u cm =%8.2f\n\r", duljina);
+        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>duljina) {
+            pc.printf("ALARM =%d\n\r", alarm);
+            bluetooth.printf("ALARM =%d\n\r", alarm);
+            buzzer=0.5;
+        } else {
+            buzzer=0.0;
+        }
+        prikaz = duljina*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
+        Znak3 = (prikaz/10)%10;  //racunanje druge decimale za ispis
+        Znak4 = prikaz%10;  //racunanje trece 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;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Jun 19 16:59:54 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/7cff1c4259d7
\ No newline at end of file