Uses the SRF02 UDS and displays distance in a variety of ways on the N5110 LCD.
Dependencies: N5110WN PowerControl SRF02 mbed
main.cpp@0:73bfbe8729d4, 2015-03-13 (annotated)
- Committer:
- JakBlackburn
- Date:
- Fri Mar 13 09:28:37 2015 +0000
- Revision:
- 0:73bfbe8729d4
- Child:
- 1:7f151ab172cb
initial code with all the pin outs set. get distance routine set up and a unit change function started;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JakBlackburn | 0:73bfbe8729d4 | 1 | #include "mbed.h" |
JakBlackburn | 0:73bfbe8729d4 | 2 | #include "PowerControl/PowerControl.h" |
JakBlackburn | 0:73bfbe8729d4 | 3 | #include "PowerControl/EthernetPowerControl.h" |
JakBlackburn | 0:73bfbe8729d4 | 4 | #include "Speaker.h" |
JakBlackburn | 0:73bfbe8729d4 | 5 | #include "N5110.h" |
JakBlackburn | 0:73bfbe8729d4 | 6 | #include "SRF02/SRF02.h" |
JakBlackburn | 0:73bfbe8729d4 | 7 | |
JakBlackburn | 0:73bfbe8729d4 | 8 | // Inputs |
JakBlackburn | 0:73bfbe8729d4 | 9 | InterruptIn UnitTog(p14); |
JakBlackburn | 0:73bfbe8729d4 | 10 | AnalogIn LCDTog(p15); |
JakBlackburn | 0:73bfbe8729d4 | 11 | InterruptIn LogTog(p16); |
JakBlackburn | 0:73bfbe8729d4 | 12 | InterruptIn VisTog(p17); |
JakBlackburn | 0:73bfbe8729d4 | 13 | AnalogIn BuzVol(p19); |
JakBlackburn | 0:73bfbe8729d4 | 14 | AnalogIn BLEDLevel(p20); |
JakBlackburn | 0:73bfbe8729d4 | 15 | SRF02 sensor(p28,p27);//SDA SCL |
JakBlackburn | 0:73bfbe8729d4 | 16 | |
JakBlackburn | 0:73bfbe8729d4 | 17 | // Outputs |
JakBlackburn | 0:73bfbe8729d4 | 18 | // VCC,SCE,RST,D/C,MOSI,SCLK,LED |
JakBlackburn | 0:73bfbe8729d4 | 19 | N5110 lcd(p7,p8,p9,p10,p11,p13,p26); |
JakBlackburn | 0:73bfbe8729d4 | 20 | Speaker Buzzer(p18); |
JakBlackburn | 0:73bfbe8729d4 | 21 | PwmOut BLED(p26); |
JakBlackburn | 0:73bfbe8729d4 | 22 | DigitalOut WLED(p21); |
JakBlackburn | 0:73bfbe8729d4 | 23 | Serial pc(USBTX,USBRX);// the tx and rx respectively |
JakBlackburn | 0:73bfbe8729d4 | 24 | BusOut leds(LED4,LED3,LED2,LED1); |
JakBlackburn | 0:73bfbe8729d4 | 25 | |
JakBlackburn | 0:73bfbe8729d4 | 26 | float scanSpeed=1; //float that changes the speed that the distance is taken |
JakBlackburn | 0:73bfbe8729d4 | 27 | float volume=1; //float used to vary the volume |
JakBlackburn | 0:73bfbe8729d4 | 28 | int distance; //integer that stores the distance |
JakBlackburn | 0:73bfbe8729d4 | 29 | float unitX=1; // if 1 in cm, 0.01 = m, 10 = mm |
JakBlackburn | 0:73bfbe8729d4 | 30 | int timerFlag=0; |
JakBlackburn | 0:73bfbe8729d4 | 31 | int U=0; // if 0 cm, 1 is m, 2 is mm |
JakBlackburn | 0:73bfbe8729d4 | 32 | string units; |
JakBlackburn | 0:73bfbe8729d4 | 33 | |
JakBlackburn | 0:73bfbe8729d4 | 34 | Ticker timer; |
JakBlackburn | 0:73bfbe8729d4 | 35 | //functions |
JakBlackburn | 0:73bfbe8729d4 | 36 | void warnings(); // deals with the visual and audiable alerts. |
JakBlackburn | 0:73bfbe8729d4 | 37 | void getDistance(); // takes 10 distances and averages them. |
JakBlackburn | 0:73bfbe8729d4 | 38 | void unitToggle(); // changes the units cm/m/mm |
JakBlackburn | 0:73bfbe8729d4 | 39 | void timerExpired();// timers ISR |
JakBlackburn | 0:73bfbe8729d4 | 40 | void setScanSpeed(int dist); // sets the speed of the scanning, dependant on the distance |
JakBlackburn | 0:73bfbe8729d4 | 41 | |
JakBlackburn | 0:73bfbe8729d4 | 42 | |
JakBlackburn | 0:73bfbe8729d4 | 43 | struct State { |
JakBlackburn | 0:73bfbe8729d4 | 44 | float unitMultiple; // unit mulitple |
JakBlackburn | 0:73bfbe8729d4 | 45 | Unit; // unit |
JakBlackburn | 0:73bfbe8729d4 | 46 | int nextState[2]; // array of next states |
JakBlackburn | 0:73bfbe8729d4 | 47 | }; |
JakBlackburn | 0:73bfbe8729d4 | 48 | typedef const struct State STyp; |
JakBlackburn | 0:73bfbe8729d4 | 49 | STyp fsm[3] = { |
JakBlackburn | 0:73bfbe8729d4 | 50 | {1,"cm",{0,1}}, // State 0 |
JakBlackburn | 0:73bfbe8729d4 | 51 | {0.01,"m",{1,2}}, // |
JakBlackburn | 0:73bfbe8729d4 | 52 | {10,"mm",{2,0}} |
JakBlackburn | 0:73bfbe8729d4 | 53 | }; |
JakBlackburn | 0:73bfbe8729d4 | 54 | int state=0; |
JakBlackburn | 0:73bfbe8729d4 | 55 | |
JakBlackburn | 0:73bfbe8729d4 | 56 | |
JakBlackburn | 0:73bfbe8729d4 | 57 | int main() { |
JakBlackburn | 0:73bfbe8729d4 | 58 | timer.attach(&timerExpired,scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 59 | while(1) { |
JakBlackburn | 0:73bfbe8729d4 | 60 | //timer.attach(&timerExpired,scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 61 | if(timerFlag){ |
JakBlackburn | 0:73bfbe8729d4 | 62 | timerFlag=0; |
JakBlackburn | 0:73bfbe8729d4 | 63 | unitToggle(); |
JakBlackburn | 0:73bfbe8729d4 | 64 | getDistance(); |
JakBlackburn | 0:73bfbe8729d4 | 65 | } |
JakBlackburn | 0:73bfbe8729d4 | 66 | } |
JakBlackburn | 0:73bfbe8729d4 | 67 | } |
JakBlackburn | 0:73bfbe8729d4 | 68 | |
JakBlackburn | 0:73bfbe8729d4 | 69 | void timerExpired(){ |
JakBlackburn | 0:73bfbe8729d4 | 70 | timerFlag=1; |
JakBlackburn | 0:73bfbe8729d4 | 71 | } |
JakBlackburn | 0:73bfbe8729d4 | 72 | |
JakBlackburn | 0:73bfbe8729d4 | 73 | |
JakBlackburn | 0:73bfbe8729d4 | 74 | void warnings(){ |
JakBlackburn | 0:73bfbe8729d4 | 75 | WLED=1; |
JakBlackburn | 0:73bfbe8729d4 | 76 | volume= BuzVol.read(); |
JakBlackburn | 0:73bfbe8729d4 | 77 | Buzzer.PlayNote(800.0, 0.1, volume); |
JakBlackburn | 0:73bfbe8729d4 | 78 | WLED=0; |
JakBlackburn | 0:73bfbe8729d4 | 79 | } |
JakBlackburn | 0:73bfbe8729d4 | 80 | void getDistance(){ |
JakBlackburn | 0:73bfbe8729d4 | 81 | int dist0 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 82 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 83 | int dist1 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 84 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 85 | int dist2 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 86 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 87 | int dist3 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 88 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 89 | int dist4 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 90 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 91 | int dist5 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 92 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 93 | int dist6 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 94 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 95 | int dist7 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 96 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 97 | int dist8 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 98 | wait(0.5*scanSpeed); |
JakBlackburn | 0:73bfbe8729d4 | 99 | int dist9 = sensor.getDistanceCm(); |
JakBlackburn | 0:73bfbe8729d4 | 100 | distance=(dist0+dist1+dist2+dist3+dist4+dist5+dist6+dist7+dist8+dist9)/10; |
JakBlackburn | 0:73bfbe8729d4 | 101 | setScanSpeed(distance); |
JakBlackburn | 0:73bfbe8729d4 | 102 | |
JakBlackburn | 0:73bfbe8729d4 | 103 | pc.printf("Distance = %d %a\n",distance*unitX,units); |
JakBlackburn | 0:73bfbe8729d4 | 104 | warnings(); |
JakBlackburn | 0:73bfbe8729d4 | 105 | } |
JakBlackburn | 0:73bfbe8729d4 | 106 | |
JakBlackburn | 0:73bfbe8729d4 | 107 | void unitToggle(){ |
JakBlackburn | 0:73bfbe8729d4 | 108 | unitX = fsm[state].unitMultiple; // set output depending on current state |
JakBlackburn | 0:73bfbe8729d4 | 109 | units= fsm[state].Unit; // wait in that state for desired time |
JakBlackburn | 0:73bfbe8729d4 | 110 | state = fsm[state].nextState[UnitTog]; // read input (BusIn) and update current state |
JakBlackburn | 0:73bfbe8729d4 | 111 | //U++; |
JakBlackburn | 0:73bfbe8729d4 | 112 | // if(U==3){U=0;} |
JakBlackburn | 0:73bfbe8729d4 | 113 | // if(U==0){unitX=1;units="cm";} |
JakBlackburn | 0:73bfbe8729d4 | 114 | // if(U==1){unitX=0.01;units="m";} |
JakBlackburn | 0:73bfbe8729d4 | 115 | // if(U==2){unitX=10;units="mm";} |
JakBlackburn | 0:73bfbe8729d4 | 116 | // pc.printf("Units = %s \n",units); |
JakBlackburn | 0:73bfbe8729d4 | 117 | } |
JakBlackburn | 0:73bfbe8729d4 | 118 | |
JakBlackburn | 0:73bfbe8729d4 | 119 | void setScanSpeed(int dist){ |
JakBlackburn | 0:73bfbe8729d4 | 120 | if(dist>=100){ |
JakBlackburn | 0:73bfbe8729d4 | 121 | scanSpeed=1/0.5; // sets the speed to every 2 seconds |
JakBlackburn | 0:73bfbe8729d4 | 122 | } |
JakBlackburn | 0:73bfbe8729d4 | 123 | if(dist>=50){ |
JakBlackburn | 0:73bfbe8729d4 | 124 | scanSpeed=1/1; // sets the speed to every second |
JakBlackburn | 0:73bfbe8729d4 | 125 | } |
JakBlackburn | 0:73bfbe8729d4 | 126 | if(dist>=25){ |
JakBlackburn | 0:73bfbe8729d4 | 127 | scanSpeed=1/2; // sets the speed to 2 times a second |
JakBlackburn | 0:73bfbe8729d4 | 128 | } |
JakBlackburn | 0:73bfbe8729d4 | 129 | if(dist>=10){ |
JakBlackburn | 0:73bfbe8729d4 | 130 | scanSpeed=1/4; // sets the speed to 4 times a second |
JakBlackburn | 0:73bfbe8729d4 | 131 | } |
JakBlackburn | 0:73bfbe8729d4 | 132 | if(dist<10){ |
JakBlackburn | 0:73bfbe8729d4 | 133 | scanSpeed=1/8; // sets the speed to 8 times a second |
JakBlackburn | 0:73bfbe8729d4 | 134 | } |
JakBlackburn | 0:73bfbe8729d4 | 135 | pc.printf("Scan Speed = %d times/sec \n",(1/scanSpeed)); |
JakBlackburn | 0:73bfbe8729d4 | 136 | } |