Test
Dependencies: SRF02 SRF05 mbed
Fork of Prosjekt_2 by
main.cpp
- Committer:
- leonardene
- Date:
- 2016-04-11
- Revision:
- 10:e83df36b417a
- Parent:
- 9:4b38e90b8f10
- Child:
- 11:cc2d82380198
File content as of revision 10:e83df36b417a:
#include "mbed.h" #include "SRF05.h" #include "SRF02.h" Serial pc(USBTX, USBRX); Serial bt(p13, p14); DigitalOut led (LED1); SRF05 srf05(p7, p8); SRF02 srf02(p9, p10); char input(); void avstand(); void detektor(float); void hastighet(float); void plasseringiplan(); //void triangulering(); int main() { float y; while(1) { char kom1 [] = {"\n\nMenu\n1)\tMeassure Distance\n2)\tMotion Detection\n3)\tMeassure Velocity\n4)\tTriangulation\n"}; pc.printf("%s", kom1); bt.printf("%s", kom1); while (pc.readable() == 0 && bt.readable() == 0) {} switch (input()) { case('1'): { char kom2 [] = {"\nPress 'y' to meassure distance\nPress 'n' to return to the menu\nThe bargraph will light up according to how close the object is\n1 LED equals 40cm\n"}; pc.printf("%s", kom2); bt.printf("%s", kom2); avstand(); break; } case('2'): { char kom3 [] = {"\nLights will flash when a motion is detected\nPress 'n' to return to the menu\n"}; pc.printf("%s", kom3); bt.printf("%s", kom3); y = srf05.read(); detektor(y); break; } case('3'): { char kom4 [] = {"\nThis feature meassures the velocity of any movement directed directly towards or away from the Mbed\nPress 'n' to return to the menu\n"}; pc.printf("%s", kom4); bt.printf("%s", kom4); y = srf05.read(); hastighet(y); break; } case('4'): { char kom5 [] = {"\nThis feature triangulation an object and forwards the positon within a 2D-table\nEach 'O' represents 10square centimeters.\nMeassurements start from 50cm away for SRF02 and 140 CM away from SRF05\n"}; pc.printf("%s", kom5); bt.printf("%s", kom5); plasseringiplan(); break; } /* case('5'): { triangulering(); break; } */ default: char kom6 [] = {"\nERROR: Invalid value\n"}; pc.printf("%s", kom6); bt.printf("%s", kom6); } } } /* Char Input() er en funksjon som avgjør om input kommer fra bluetooth eller pc. Deretter returnerer den input verdien. */ char input() { if(pc.readable()) return getchar(); else if (bt.readable()) return bt.getc(); else return 1; } /* Void avstand() er en funksjon som måler avstand til en gjenstand innenfor rekkevidden til ultralyd sensoren. Avstanden sendes til pc & bluetooth i cm. */ void avstand() { DigitalOut bar[] = {NC, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30}; char a; float y, z; int n = 0; while (a != 'n') { while (pc.readable() == 0 && bt.readable() == 0) {} a = input(); if (a == 'y') { y = srf05.read(); if (y > 350) { char kom1 [] = {"\nDetection area is exceeded (350cm)\n"}; pc.printf("%s", kom1); bt.printf("%s", kom1); y = z; } else { z = y; pc.printf("\nMeassurement (%d):\t%.2fcm\n",n, y); bt.printf("\nMeassurement (%d):\t%.2fcm\n",n, y); } for(int x = 1; x <= 10; x++) { (x*35 < y) ? bar[x] = 0 : bar[x] = 1; } n++; wait_ms (50); } else if (a != 'n') { char kom3 [] = {"\nInvalid input\n"}; pc.printf("%s", kom3); bt.printf("%s", kom3); } } for(int x = 1; x <= 10; x++) bar[x] = 0; } /* Funksjonen Void detektor() er en funksjon som detekterer bevegelse. LED blinker ved deteksjon. */ void detektor(float y) { int b = 0; while (input() != 'n') { if (y+2 < srf05.read() || y-2 > srf05.read()) { led = !led; if (b == 0) { char kom1 [] = {"\nMotion Detected\n"}; pc.printf("%s", kom1); bt.printf("%s", kom1); b = 1; } } else led = 0; wait_ms (50); } } /* Funksjonen Void Hastighet() måler hastigheten til et objekt foran ultralyd sensoren. Hastigheten skrives til pc & bluetooth i km/t. */ void hastighet (float y) { Timer t; float start, stopp; while(input() != 'n') { t.start(); start = srf05.read(); while (t.read() < 0.25 && srf05.read() < 10) {} t.stop(); stopp = srf05.read(); if (0.05 < (start-stopp)/(25) && start < 350 && stopp < 350) { pc.printf("\nVelocity is = %0.2f km/t", (start-stopp)*3.6/25); bt.printf("\nVelocity is = %0.2f km/t", (start-stopp)*3.6/25); } t.reset(); } } /*Funksjonen plasseringiplan måler avstanden til et objekt i målesonen, fra to forskjellige vinkler. Avstanden til objektet plasseres i et 2D-plan. Størrelsen på planet er 100cm langs x akse og 50cm langs y akse.*/ void plasseringiplan () { char _2DplanX[12] = {'|','O','O','O','O','O','O','O','O','O','O','|'}; char _2Dplan[12] = {'|','O','O','O','O','O','O','O','O','O','O','|'}; int a, b, c; float d = srf05.read(); b = srf02.getDistanceCm(); pc.printf("\nx = %d\ny = %f\n", b, d); bt.printf("\nx = %d\ny = %f\n", b, d); for (c = 1; c < 11; c++) { if ((c*10+40) <= b && b < ((c+1)*10+40)) _2DplanX[c] = 'x'; else _2DplanX[c] = 'O'; } for (c = 190; c >= 150; c=c-10) { if (c-10 <= d && d < c) { for(a = 0; a < 12; a++) { pc.printf("%c",_2DplanX[a]); bt.printf("%c",_2DplanX[a]); } } else { for(a = 0; a < 12; a++) { pc.printf("%c",_2Dplan[a]); bt.printf("%c",_2Dplan[a]); } } printf("\n"); } } /* void triangulering () { double vinkel_A, vinkel_B, a, b, c, z, x; char kom1 [] = {"\nEnter distance between sensor 1 and 2 in cm"}; pc.printf("%s", kom1); bt.printf("%s", kom1); while (pc.readable() == 0 && bt.readable() == 0) {} pc.scanf("%lf", &c); b = srf02.getDistanceCm(); a = srf05.read(); vinkel_A = acos((b*b+c*c-a*a)/(2*b*c)); vinkel_B = acos((c*c+a*a-b*b)/(2*b*c)); x = cos(vinkel_A)*b; z = sin(vinkel_A)*b; pc.printf("\nVinkel_A = %lf\nVinkel_B = %lf\nA = %lf\nB = %lf\nC = %lf\nZ = %lf\nX = %lf\n",vinkel_A, vinkel_B, a, b, c, z, x); } */