Uses the SRF02 UDS and displays distance in a variety of ways on the N5110 LCD.

Dependencies:   N5110WN PowerControl SRF02 mbed

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?

UserRevisionLine numberNew 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 }