Fully integrated working system
Dependencies: Speaker mbed mbed-rtos 4DGL-uLCD-SE hcsr04
main.cpp@14:0bbfa2c1de62, 2020-12-19 (annotated)
- Committer:
- fiachra
- Date:
- Sat Dec 19 19:04:00 2020 +0000
- Revision:
- 14:0bbfa2c1de62
- Parent:
- 13:a3cdbad9daf4
friday updated ver;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tadhgjones | 8:f3ab61374cd0 | 1 | #include "mbed.h" |
tadhgjones | 8:f3ab61374cd0 | 2 | #include "hcsr04.h" |
fiachra | 12:730a95b81992 | 3 | #include "Speaker.h" |
fiachra | 10:f29ed3675509 | 4 | #include "uLCD_4DGL.h" |
fiachra | 13:a3cdbad9daf4 | 5 | //temp |
fiachra | 13:a3cdbad9daf4 | 6 | AnalogIn ain(p15); |
fiachra | 13:a3cdbad9daf4 | 7 | AnalogIn ain2(p16); |
fiachra | 13:a3cdbad9daf4 | 8 | //dist |
fiachra | 10:f29ed3675509 | 9 | HCSR04 distSens(p25,p6); |
fiachra | 13:a3cdbad9daf4 | 10 | Speaker mySpeaker(p18); |
fiachra | 13:a3cdbad9daf4 | 11 | //general |
tadhgjones | 8:f3ab61374cd0 | 12 | Serial pc(USBTX, USBRX); |
fiachra | 10:f29ed3675509 | 13 | uLCD_4DGL uLCD(p9,p10,p11); |
fiachra | 14:0bbfa2c1de62 | 14 | //autolights |
fiachra | 14:0bbfa2c1de62 | 15 | AnalogIn photodiode(p20); |
fiachra | 14:0bbfa2c1de62 | 16 | PwmOut myled(p21); |
fiachra | 13:a3cdbad9daf4 | 17 | //distance |
tadhgjones | 8:f3ab61374cd0 | 18 | unsigned int dist; |
fiachra | 9:d1b00a2a8e25 | 19 | float averageDistance(); |
fiachra | 9:d1b00a2a8e25 | 20 | void beeping(); |
fiachra | 14:0bbfa2c1de62 | 21 | float i; |
fiachra | 14:0bbfa2c1de62 | 22 | float x = 0; |
fiachra | 13:a3cdbad9daf4 | 23 | //temp |
fiachra | 13:a3cdbad9daf4 | 24 | void Temperature(); |
fiachra | 13:a3cdbad9daf4 | 25 | void TempConstraints(); |
fiachra | 13:a3cdbad9daf4 | 26 | float getTemp(); |
fiachra | 13:a3cdbad9daf4 | 27 | float avgTemp(); |
fiachra | 13:a3cdbad9daf4 | 28 | float getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 29 | float avgTemp2(); |
fiachra | 13:a3cdbad9daf4 | 30 | |
fiachra | 13:a3cdbad9daf4 | 31 | float voltage_in; |
fiachra | 13:a3cdbad9daf4 | 32 | float degrees_c; |
fiachra | 13:a3cdbad9daf4 | 33 | float avgT; |
fiachra | 13:a3cdbad9daf4 | 34 | float Temp; |
fiachra | 13:a3cdbad9daf4 | 35 | float a; |
fiachra | 13:a3cdbad9daf4 | 36 | float b; |
fiachra | 14:0bbfa2c1de62 | 37 | //autolights |
fiachra | 14:0bbfa2c1de62 | 38 | void LED(); |
fiachra | 9:d1b00a2a8e25 | 39 | |
tadhgjones | 8:f3ab61374cd0 | 40 | int main() |
tadhgjones | 8:f3ab61374cd0 | 41 | { |
fiachra | 13:a3cdbad9daf4 | 42 | //dist |
fiachra | 12:730a95b81992 | 43 | uLCD.text_width(1); |
fiachra | 12:730a95b81992 | 44 | uLCD.text_height(1); |
fiachra | 12:730a95b81992 | 45 | uLCD.locate(10, 12); |
fiachra | 12:730a95b81992 | 46 | uLCD.color(BLUE); |
fiachra | 11:68194bd43e0b | 47 | uLCD.printf(" Reverse Sensor"); |
fiachra | 10:f29ed3675509 | 48 | uLCD.rectangle(65, 117, 126, 127, 0x0000FF); |
fiachra | 13:a3cdbad9daf4 | 49 | |
tadhgjones | 8:f3ab61374cd0 | 50 | while(1) { |
fiachra | 13:a3cdbad9daf4 | 51 | i++; |
fiachra | 13:a3cdbad9daf4 | 52 | //distance |
fiachra | 10:f29ed3675509 | 53 | distSens.start(); |
fiachra | 9:d1b00a2a8e25 | 54 | averageDistance(); |
fiachra | 9:d1b00a2a8e25 | 55 | beeping(); |
fiachra | 11:68194bd43e0b | 56 | uLCD.filled_rectangle(66, 118, 125, 127, 0x000000); |
fiachra | 11:68194bd43e0b | 57 | pc.printf("cm:%d\n",dist ); |
fiachra | 12:730a95b81992 | 58 | uLCD.locate(10, 15); |
fiachra | 12:730a95b81992 | 59 | uLCD.color(WHITE); |
fiachra | 10:f29ed3675509 | 60 | uLCD.printf("cm:%1d\n",dist ); |
fiachra | 14:0bbfa2c1de62 | 61 | //temperature |
fiachra | 14:0bbfa2c1de62 | 62 | Temperature(); |
fiachra | 14:0bbfa2c1de62 | 63 | //autolights |
fiachra | 14:0bbfa2c1de62 | 64 | LED(); |
fiachra | 9:d1b00a2a8e25 | 65 | } |
fiachra | 9:d1b00a2a8e25 | 66 | } |
fiachra | 12:730a95b81992 | 67 | float averageDistance() |
fiachra | 9:d1b00a2a8e25 | 68 | { |
fiachra | 10:f29ed3675509 | 69 | int a = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 70 | int b = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 71 | int c = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 72 | int d = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 73 | int e = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 74 | int f = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 75 | int g = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 76 | int h = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 77 | int i = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 78 | int j = distSens.get_dist_cm(); |
tadhgjones | 8:f3ab61374cd0 | 79 | |
fiachra | 9:d1b00a2a8e25 | 80 | dist = (a+b+c+d+e+f+g+h+i+j)/10; |
fiachra | 9:d1b00a2a8e25 | 81 | return dist; |
fiachra | 9:d1b00a2a8e25 | 82 | } |
fiachra | 9:d1b00a2a8e25 | 83 | void beeping() |
fiachra | 9:d1b00a2a8e25 | 84 | { |
fiachra | 9:d1b00a2a8e25 | 85 | int distance = averageDistance(); |
fiachra | 12:730a95b81992 | 86 | //sensor defaults to 2k+ when dist<~3cm |
fiachra | 14:0bbfa2c1de62 | 87 | if (distance > 2000) i=1.5; |
fiachra | 14:0bbfa2c1de62 | 88 | if (distance < 150) i=0.3; |
fiachra | 14:0bbfa2c1de62 | 89 | if (distance < 100) i=0.35; |
fiachra | 14:0bbfa2c1de62 | 90 | if (distance < 90) i=0.4; |
fiachra | 9:d1b00a2a8e25 | 91 | if (distance < 80) i=0.45; |
fiachra | 14:0bbfa2c1de62 | 92 | if (distance < 70) i=0.5; |
fiachra | 14:0bbfa2c1de62 | 93 | if (distance < 60) i=0.55; |
fiachra | 14:0bbfa2c1de62 | 94 | if (distance < 50) i=0.6; |
fiachra | 14:0bbfa2c1de62 | 95 | if (distance < 40) i=0.65; |
fiachra | 14:0bbfa2c1de62 | 96 | if (distance < 30) i=0.7; |
fiachra | 14:0bbfa2c1de62 | 97 | if (distance < 20) i=0.8; |
fiachra | 14:0bbfa2c1de62 | 98 | if (distance < 10) i=1; |
fiachra | 14:0bbfa2c1de62 | 99 | if (distance < 5) i=1.2; |
fiachra | 14:0bbfa2c1de62 | 100 | mySpeaker.PlayNote(700*i, 0.2, 2*i); |
fiachra | 13:a3cdbad9daf4 | 101 | } |
fiachra | 13:a3cdbad9daf4 | 102 | void Temperature(){ |
fiachra | 14:0bbfa2c1de62 | 103 | |
fiachra | 13:a3cdbad9daf4 | 104 | a = avgTemp(); |
fiachra | 13:a3cdbad9daf4 | 105 | b = avgTemp2(); |
fiachra | 13:a3cdbad9daf4 | 106 | TempConstraints(); |
fiachra | 14:0bbfa2c1de62 | 107 | Temp = ((a + b)/2)-7; |
fiachra | 13:a3cdbad9daf4 | 108 | uLCD.text_width(1); |
fiachra | 13:a3cdbad9daf4 | 109 | uLCD.text_height(1); |
fiachra | 13:a3cdbad9daf4 | 110 | uLCD.locate(1,1); |
fiachra | 13:a3cdbad9daf4 | 111 | uLCD.printf("%3.1f deg C\n\r", Temp); |
fiachra | 14:0bbfa2c1de62 | 112 | |
fiachra | 13:a3cdbad9daf4 | 113 | } |
fiachra | 13:a3cdbad9daf4 | 114 | |
fiachra | 13:a3cdbad9daf4 | 115 | void TempConstraints() { |
fiachra | 13:a3cdbad9daf4 | 116 | |
fiachra | 13:a3cdbad9daf4 | 117 | if(degrees_c <= 4){ |
fiachra | 14:0bbfa2c1de62 | 118 | uLCD.text_width(1); |
fiachra | 14:0bbfa2c1de62 | 119 | uLCD.text_height(1); |
fiachra | 14:0bbfa2c1de62 | 120 | uLCD.locate(1,1); |
fiachra | 13:a3cdbad9daf4 | 121 | pc.printf("WARNING\nCOLD TEMPERATURES\nICE MAY BE PRESENT"); |
fiachra | 13:a3cdbad9daf4 | 122 | } |
fiachra | 13:a3cdbad9daf4 | 123 | if(abs(a-b) > 4){ |
fiachra | 14:0bbfa2c1de62 | 124 | uLCD.text_width(1); |
fiachra | 14:0bbfa2c1de62 | 125 | uLCD.text_height(1); |
fiachra | 14:0bbfa2c1de62 | 126 | uLCD.locate(1,1); |
fiachra | 13:a3cdbad9daf4 | 127 | uLCD.printf("WARNING\nTEMPERATURE SENSOR\nFAULT\n"); |
fiachra | 13:a3cdbad9daf4 | 128 | } |
fiachra | 13:a3cdbad9daf4 | 129 | } |
fiachra | 13:a3cdbad9daf4 | 130 | |
fiachra | 13:a3cdbad9daf4 | 131 | float getTemp(){ |
fiachra | 13:a3cdbad9daf4 | 132 | voltage_in = ain * 3.3; |
fiachra | 13:a3cdbad9daf4 | 133 | degrees_c = ((voltage_in - 0.5) * 100.0); |
fiachra | 13:a3cdbad9daf4 | 134 | return degrees_c; |
fiachra | 13:a3cdbad9daf4 | 135 | } |
fiachra | 13:a3cdbad9daf4 | 136 | |
fiachra | 13:a3cdbad9daf4 | 137 | float getTemp2(){ |
fiachra | 13:a3cdbad9daf4 | 138 | voltage_in = ain2 * 3.3; |
fiachra | 13:a3cdbad9daf4 | 139 | degrees_c = ((voltage_in - 0.5) * 100.0); |
fiachra | 13:a3cdbad9daf4 | 140 | return degrees_c; |
fiachra | 13:a3cdbad9daf4 | 141 | } |
fiachra | 13:a3cdbad9daf4 | 142 | |
fiachra | 13:a3cdbad9daf4 | 143 | //Thsi function obtaines the voltage from the first sensor |
fiachra | 13:a3cdbad9daf4 | 144 | float avgTemp(){ |
fiachra | 13:a3cdbad9daf4 | 145 | float a = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 146 | float b = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 147 | float c = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 148 | float d = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 149 | float e = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 150 | float f = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 151 | float g = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 152 | float h = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 153 | float i = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 154 | float j = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 155 | float k = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 156 | float l = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 157 | float m = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 158 | float n = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 159 | float o = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 160 | float p = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 161 | float q = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 162 | float r = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 163 | float s = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 164 | float t = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 165 | |
fiachra | 13:a3cdbad9daf4 | 166 | //The function is called to get 20 Values of the required voltage in order |
fiachra | 13:a3cdbad9daf4 | 167 | //to acieve an accurate resuilt and eliminate outlier effects |
fiachra | 13:a3cdbad9daf4 | 168 | avgT = (a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t)/20; |
fiachra | 13:a3cdbad9daf4 | 169 | |
fiachra | 13:a3cdbad9daf4 | 170 | return avgT; |
fiachra | 13:a3cdbad9daf4 | 171 | } |
fiachra | 13:a3cdbad9daf4 | 172 | |
fiachra | 13:a3cdbad9daf4 | 173 | //this function obtaines the voltage from the second sensor |
fiachra | 13:a3cdbad9daf4 | 174 | float avgTemp2(){ |
fiachra | 13:a3cdbad9daf4 | 175 | float a = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 176 | float b = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 177 | float c = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 178 | float d = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 179 | float e = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 180 | float f = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 181 | float g = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 182 | float h = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 183 | float i = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 184 | float j = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 185 | float k = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 186 | float l = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 187 | float m = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 188 | float n = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 189 | float o = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 190 | float p = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 191 | float q = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 192 | float r = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 193 | float s = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 194 | float t = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 195 | |
fiachra | 13:a3cdbad9daf4 | 196 | avgT = (a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t)/20; |
fiachra | 13:a3cdbad9daf4 | 197 | |
fiachra | 13:a3cdbad9daf4 | 198 | return avgT; |
fiachra | 14:0bbfa2c1de62 | 199 | } |
fiachra | 14:0bbfa2c1de62 | 200 | void LED(){ |
fiachra | 14:0bbfa2c1de62 | 201 | |
fiachra | 14:0bbfa2c1de62 | 202 | if (photodiode*100 <= 27){ |
fiachra | 14:0bbfa2c1de62 | 203 | myled = 1; |
fiachra | 14:0bbfa2c1de62 | 204 | uLCD.printf("\nautolights ON "); |
fiachra | 14:0bbfa2c1de62 | 205 | } else { |
fiachra | 14:0bbfa2c1de62 | 206 | myled = 0; |
fiachra | 14:0bbfa2c1de62 | 207 | uLCD.printf("\nautolights OFF"); |
fiachra | 14:0bbfa2c1de62 | 208 | |
fiachra | 14:0bbfa2c1de62 | 209 | } |
fiachra | 14:0bbfa2c1de62 | 210 | |
fiachra | 14:0bbfa2c1de62 | 211 | |
tadhgjones | 8:f3ab61374cd0 | 212 | } |