Distance Sensor Project using the SRF02 ultrasonic distance sensor and N5110 lcd display.

Dependencies:   N5110 PowerControl SRF02 mbed

Committer:
el13jar
Date:
Fri May 08 09:08:58 2015 +0000
Revision:
3:bf56dab11abc
Parent:
1:d7cfd0e55682
Final Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13jar 1:d7cfd0e55682 1 /**
el13jar 1:d7cfd0e55682 2 @file main.cpp
el13jar 1:d7cfd0e55682 3 @brief Program implementation
el13jar 1:d7cfd0e55682 4 */
el13jar 0:bc54502de2bb 5
el13jar 1:d7cfd0e55682 6 #include "mbed.h"
el13jar 1:d7cfd0e55682 7 #include "main.h"
el13jar 0:bc54502de2bb 8
el13jar 0:bc54502de2bb 9 int main()
el13jar 0:bc54502de2bb 10 {
el13jar 1:d7cfd0e55682 11 // Initialise; pwm output,timers,interrupts,power saving functions,buffers
el13jar 0:bc54502de2bb 12 P21.period(0.0005);
el13jar 1:d7cfd0e55682 13
el13jar 1:d7cfd0e55682 14 timer.attach(&timerexpired,1); //attach ISR expiring every 1 second(s)
el13jar 1:d7cfd0e55682 15 serial.attach(&serialISR); //attach serial ISR
el13jar 1:d7cfd0e55682 16 LocalFileSystem local("local"); // create local filesystem
el13jar 1:d7cfd0e55682 17 P17.rise(&MButtonPressed);//interrupt for mode change
el13jar 1:d7cfd0e55682 18 P16.rise(&LButtonPressed);//interrupt for log change
el13jar 1:d7cfd0e55682 19
el13jar 1:d7cfd0e55682 20 char buffer[30]; //buffer used to store time string
el13jar 1:d7cfd0e55682 21 char buf[10];//buffer used to store distance string
el13jar 1:d7cfd0e55682 22
el13jar 0:bc54502de2bb 23 PHY_PowerDown();
el13jar 1:d7cfd0e55682 24 //semihost_powerdown();
el13jar 1:d7cfd0e55682 25
el13jar 1:d7cfd0e55682 26 //set_time(0);
el13jar 0:bc54502de2bb 27
el13jar 0:bc54502de2bb 28 lcd.init();
el13jar 0:bc54502de2bb 29
el13jar 1:d7cfd0e55682 30 //lcd.printString("-- -- -- --",0,0);
el13jar 0:bc54502de2bb 31 lcd.printString("DISTANCE",18,1);
el13jar 1:d7cfd0e55682 32 lcd.printString("SENSOR",24,2);
el13jar 1:d7cfd0e55682 33 //lcd.printString(" -- -- -- ",0,3);
el13jar 0:bc54502de2bb 34 lcd.printString("James Robinson",0,4);
el13jar 0:bc54502de2bb 35 lcd.printString("200775267",16,5);
el13jar 0:bc54502de2bb 36 wait(3);
el13jar 0:bc54502de2bb 37
el13jar 0:bc54502de2bb 38 lcd.clear();
el13jar 0:bc54502de2bb 39
el13jar 0:bc54502de2bb 40 while(1) {
el13jar 0:bc54502de2bb 41
el13jar 0:bc54502de2bb 42 if (timerflag) {
el13jar 0:bc54502de2bb 43 timerflag = 0;
el13jar 1:d7cfd0e55682 44
el13jar 1:d7cfd0e55682 45 backlight();
el13jar 1:d7cfd0e55682 46 GetDistance();
el13jar 1:d7cfd0e55682 47
el13jar 0:bc54502de2bb 48 time_t seconds = time(NULL); // get current time
el13jar 0:bc54502de2bb 49
el13jar 0:bc54502de2bb 50 strftime(buffer, 30 , "%X %d/%m/%y", localtime(&seconds));
el13jar 1:d7cfd0e55682 51 //format time into a string (time and date)
el13jar 1:d7cfd0e55682 52
el13jar 1:d7cfd0e55682 53 serial.printf("%s , Distance = %dcm\n",buffer,distance);//print over serial
el13jar 1:d7cfd0e55682 54
el13jar 1:d7cfd0e55682 55 if (LogFlag==1) { //if flag log
el13jar 1:d7cfd0e55682 56 writeDataToFile(buffer,distance); //write to disk
el13jar 1:d7cfd0e55682 57 serial.printf("LOGGED\n");
el13jar 1:d7cfd0e55682 58 }
el13jar 1:d7cfd0e55682 59
el13jar 1:d7cfd0e55682 60 if (setTimeFlag) { //if updated time has been sent
el13jar 1:d7cfd0e55682 61 setTimeFlag = 0; //clear flag
el13jar 1:d7cfd0e55682 62 setTime(); //update time
el13jar 1:d7cfd0e55682 63 }
el13jar 0:bc54502de2bb 64
el13jar 1:d7cfd0e55682 65 //printing to lcd
el13jar 1:d7cfd0e55682 66 lcd.clear();
el13jar 1:d7cfd0e55682 67 float A=distance*0.2;
el13jar 1:d7cfd0e55682 68 lcd.drawRect(0,0,84,A,1);
el13jar 1:d7cfd0e55682 69
el13jar 1:d7cfd0e55682 70 sprintf(buf, "%dcm",distance); //function to convert int to string
el13jar 1:d7cfd0e55682 71 lcd.printString(buf,28,5);//print converted string
el13jar 1:d7cfd0e55682 72 lcd.refresh();
el13jar 0:bc54502de2bb 73
el13jar 1:d7cfd0e55682 74 if (MFlag) { //if flag change mode
el13jar 1:d7cfd0e55682 75 MFlag=0;
el13jar 1:d7cfd0e55682 76 modeChange();
el13jar 1:d7cfd0e55682 77 }
el13jar 1:d7cfd0e55682 78
el13jar 1:d7cfd0e55682 79 if(distance<40) {
el13jar 1:d7cfd0e55682 80 volume();
el13jar 1:d7cfd0e55682 81 } else {
el13jar 1:d7cfd0e55682 82 P21=1;
el13jar 0:bc54502de2bb 83 }
el13jar 0:bc54502de2bb 84 }
el13jar 0:bc54502de2bb 85 Sleep();
el13jar 0:bc54502de2bb 86 }
el13jar 0:bc54502de2bb 87 }
el13jar 0:bc54502de2bb 88
el13jar 1:d7cfd0e55682 89
el13jar 1:d7cfd0e55682 90 //functions
el13jar 1:d7cfd0e55682 91
el13jar 1:d7cfd0e55682 92 void GetDistance()
el13jar 1:d7cfd0e55682 93 {
el13jar 1:d7cfd0e55682 94 /// read sensor distance 10 times take an average, return distance
el13jar 1:d7cfd0e55682 95 int d0 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 96 int d1 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 97 int d2 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 98 int d3 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 99 int d4 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 100 int d5 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 101 int d6 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 102 int d7 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 103 int d8 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 104 int d9 = sensor.getDistanceCm();
el13jar 1:d7cfd0e55682 105 int dt=d0+d1+d2+d3+d4+d5+d6+d7+d8+d9;
el13jar 1:d7cfd0e55682 106 distance=dt/10;
el13jar 1:d7cfd0e55682 107 }
el13jar 1:d7cfd0e55682 108
el13jar 0:bc54502de2bb 109 void MButtonPressed()
el13jar 0:bc54502de2bb 110 {
el13jar 1:d7cfd0e55682 111 MFlag=1;///flag for mode set to 1
el13jar 0:bc54502de2bb 112 }
el13jar 0:bc54502de2bb 113
el13jar 0:bc54502de2bb 114 void LButtonPressed()
el13jar 0:bc54502de2bb 115 {
el13jar 1:d7cfd0e55682 116 LogFlag=!LogFlag;///inverse flag
el13jar 0:bc54502de2bb 117 serial.printf("LOG BUTTON PRESSED\n");
el13jar 0:bc54502de2bb 118 wait(0.5);
el13jar 0:bc54502de2bb 119 }
el13jar 0:bc54502de2bb 120
el13jar 0:bc54502de2bb 121 void modeChange()
el13jar 0:bc54502de2bb 122 {
el13jar 0:bc54502de2bb 123 M++;
el13jar 0:bc54502de2bb 124 if (M==2) {
el13jar 0:bc54502de2bb 125 M=0;
el13jar 0:bc54502de2bb 126 }
el13jar 0:bc54502de2bb 127 if (M==0) {
el13jar 0:bc54502de2bb 128 lcd.normalMode();
el13jar 0:bc54502de2bb 129 serial.printf("NORMAL MODE\n");
el13jar 0:bc54502de2bb 130 } else if (M==1) {
el13jar 0:bc54502de2bb 131 lcd.inverseMode();
el13jar 0:bc54502de2bb 132 serial.printf("INVERSE MODE\n");
el13jar 0:bc54502de2bb 133 } else {}
el13jar 0:bc54502de2bb 134 }
el13jar 0:bc54502de2bb 135
el13jar 0:bc54502de2bb 136 void backlight()
el13jar 0:bc54502de2bb 137 {
el13jar 1:d7cfd0e55682 138 P20.read(); ///check backlight potentiometer value
el13jar 1:d7cfd0e55682 139 P26=1-P20; ///adjust backlight pwm output according to the value
el13jar 0:bc54502de2bb 140 }
el13jar 0:bc54502de2bb 141
el13jar 0:bc54502de2bb 142 void volume()
el13jar 0:bc54502de2bb 143 {
el13jar 1:d7cfd0e55682 144 P19.read(); ///check volume potentiometer value
el13jar 1:d7cfd0e55682 145 float V=(P19/5); ///assign variable 1/5 of the read p19 value
el13jar 0:bc54502de2bb 146 //serial.printf("%f\n",V);
el13jar 1:d7cfd0e55682 147 P21=(0.8+V);///adjust volume pwm output according to variable V value
el13jar 0:bc54502de2bb 148 //serial.printf("%f\n",P21);
el13jar 0:bc54502de2bb 149 }
el13jar 0:bc54502de2bb 150
el13jar 0:bc54502de2bb 151 void setTime()
el13jar 0:bc54502de2bb 152 {
el13jar 1:d7cfd0e55682 153 serial.printf("set_time - %s",rxString);/// print time for debugging
el13jar 1:d7cfd0e55682 154 int time = atoi(rxString);/// atoi() converts a string to an integer
el13jar 1:d7cfd0e55682 155 set_time(time);/// update the time
el13jar 0:bc54502de2bb 156 }
el13jar 0:bc54502de2bb 157
el13jar 0:bc54502de2bb 158 void serialISR()
el13jar 0:bc54502de2bb 159 {
el13jar 1:d7cfd0e55682 160 serial.gets(rxString,16);/// when a serial interrupt occurs, read rx string into buffer
el13jar 1:d7cfd0e55682 161 setTimeFlag = 1;/// set flag
el13jar 0:bc54502de2bb 162 }
el13jar 0:bc54502de2bb 163
el13jar 1:d7cfd0e55682 164
el13jar 0:bc54502de2bb 165 void writeDataToFile(char* bufferdata,float distancedata)
el13jar 0:bc54502de2bb 166 {
el13jar 1:d7cfd0e55682 167 leds = 15; /// turn on LEDs for feedback
el13jar 1:d7cfd0e55682 168 FILE *fp = fopen("/local/log.csv", "a"); /// open 'log.csv' for appending
el13jar 1:d7cfd0e55682 169 /// if the file doesn't exist it is created, if it exists, data is appended to the end
el13jar 1:d7cfd0e55682 170 fprintf(fp," %s , %f\n",bufferdata,distancedata); /// print string to file
el13jar 1:d7cfd0e55682 171 fclose(fp); /// close file
el13jar 1:d7cfd0e55682 172 leds = 0; /// turn off LEDs to signify file access has finished
el13jar 0:bc54502de2bb 173 }
el13jar 0:bc54502de2bb 174
el13jar 0:bc54502de2bb 175 void timerexpired ()
el13jar 0:bc54502de2bb 176 {
el13jar 0:bc54502de2bb 177 timerflag=1;
el13jar 0:bc54502de2bb 178 }