Car safety monitoring system, monitoring distance, light and temperature.
Dependencies: Speaker mbed mbed-rtos 4DGL-uLCD-SE hcsr04
main.cpp@13:a3cdbad9daf4, 2020-12-17 (annotated)
- Committer:
- fiachra
- Date:
- Thu Dec 17 16:04:27 2020 +0000
- Revision:
- 13:a3cdbad9daf4
- Parent:
- 12:730a95b81992
- Child:
- 14:0bbfa2c1de62
semi integrated;
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 | 10:f29ed3675509 | 14 | |
fiachra | 13:a3cdbad9daf4 | 15 | //distance |
tadhgjones | 8:f3ab61374cd0 | 16 | unsigned int dist; |
fiachra | 9:d1b00a2a8e25 | 17 | float averageDistance(); |
fiachra | 9:d1b00a2a8e25 | 18 | void beeping(); |
fiachra | 13:a3cdbad9daf4 | 19 | float i = 1000; |
fiachra | 13:a3cdbad9daf4 | 20 | //temp |
fiachra | 13:a3cdbad9daf4 | 21 | void Temperature(); |
fiachra | 13:a3cdbad9daf4 | 22 | void TempConstraints(); |
fiachra | 13:a3cdbad9daf4 | 23 | float getTemp(); |
fiachra | 13:a3cdbad9daf4 | 24 | float avgTemp(); |
fiachra | 13:a3cdbad9daf4 | 25 | float getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 26 | float avgTemp2(); |
fiachra | 13:a3cdbad9daf4 | 27 | |
fiachra | 13:a3cdbad9daf4 | 28 | float voltage_in; |
fiachra | 13:a3cdbad9daf4 | 29 | float degrees_c; |
fiachra | 13:a3cdbad9daf4 | 30 | float avgT; |
fiachra | 13:a3cdbad9daf4 | 31 | float Temp; |
fiachra | 13:a3cdbad9daf4 | 32 | float a; |
fiachra | 13:a3cdbad9daf4 | 33 | float b; |
fiachra | 13:a3cdbad9daf4 | 34 | |
fiachra | 9:d1b00a2a8e25 | 35 | |
tadhgjones | 8:f3ab61374cd0 | 36 | int main() |
tadhgjones | 8:f3ab61374cd0 | 37 | { |
fiachra | 13:a3cdbad9daf4 | 38 | //dist |
fiachra | 12:730a95b81992 | 39 | uLCD.text_width(1); |
fiachra | 12:730a95b81992 | 40 | uLCD.text_height(1); |
fiachra | 12:730a95b81992 | 41 | uLCD.locate(10, 12); |
fiachra | 12:730a95b81992 | 42 | uLCD.color(BLUE); |
fiachra | 11:68194bd43e0b | 43 | uLCD.printf(" Reverse Sensor"); |
fiachra | 10:f29ed3675509 | 44 | uLCD.rectangle(65, 117, 126, 127, 0x0000FF); |
fiachra | 13:a3cdbad9daf4 | 45 | |
tadhgjones | 8:f3ab61374cd0 | 46 | while(1) { |
fiachra | 13:a3cdbad9daf4 | 47 | i++; |
fiachra | 13:a3cdbad9daf4 | 48 | //distance |
fiachra | 10:f29ed3675509 | 49 | distSens.start(); |
fiachra | 9:d1b00a2a8e25 | 50 | averageDistance(); |
fiachra | 9:d1b00a2a8e25 | 51 | beeping(); |
fiachra | 11:68194bd43e0b | 52 | uLCD.filled_rectangle(66, 118, 125, 127, 0x000000); |
fiachra | 11:68194bd43e0b | 53 | pc.printf("cm:%d\n",dist ); |
fiachra | 12:730a95b81992 | 54 | uLCD.locate(10, 15); |
fiachra | 12:730a95b81992 | 55 | uLCD.color(WHITE); |
fiachra | 10:f29ed3675509 | 56 | uLCD.printf("cm:%1d\n",dist ); |
fiachra | 13:a3cdbad9daf4 | 57 | |
fiachra | 13:a3cdbad9daf4 | 58 | //temperature NEED TO FIX THIS |
fiachra | 13:a3cdbad9daf4 | 59 | if (i > 10) |
fiachra | 13:a3cdbad9daf4 | 60 | { |
fiachra | 13:a3cdbad9daf4 | 61 | uLCD.filled_rectangle(0, 0, 126, 80, 0x000000); |
fiachra | 13:a3cdbad9daf4 | 62 | Temperature(); |
fiachra | 13:a3cdbad9daf4 | 63 | |
fiachra | 13:a3cdbad9daf4 | 64 | i = 0; |
fiachra | 13:a3cdbad9daf4 | 65 | } |
fiachra | 13:a3cdbad9daf4 | 66 | |
fiachra | 9:d1b00a2a8e25 | 67 | } |
fiachra | 9:d1b00a2a8e25 | 68 | } |
fiachra | 12:730a95b81992 | 69 | float averageDistance() |
fiachra | 9:d1b00a2a8e25 | 70 | { |
fiachra | 10:f29ed3675509 | 71 | int a = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 72 | int b = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 73 | int c = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 74 | int d = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 75 | int e = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 76 | int f = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 77 | int g = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 78 | int h = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 79 | int i = distSens.get_dist_cm(); |
fiachra | 10:f29ed3675509 | 80 | int j = distSens.get_dist_cm(); |
tadhgjones | 8:f3ab61374cd0 | 81 | |
fiachra | 9:d1b00a2a8e25 | 82 | dist = (a+b+c+d+e+f+g+h+i+j)/10; |
fiachra | 9:d1b00a2a8e25 | 83 | return dist; |
fiachra | 9:d1b00a2a8e25 | 84 | } |
fiachra | 9:d1b00a2a8e25 | 85 | void beeping() |
fiachra | 9:d1b00a2a8e25 | 86 | { |
fiachra | 9:d1b00a2a8e25 | 87 | int distance = averageDistance(); |
fiachra | 12:730a95b81992 | 88 | //sensor defaults to 2k+ when dist<~3cm |
fiachra | 12:730a95b81992 | 89 | if (distance > 2000) i=0.05; |
fiachra | 9:d1b00a2a8e25 | 90 | if (distance < 150) i=0.6; |
fiachra | 9:d1b00a2a8e25 | 91 | if (distance < 100) i=0.55; |
fiachra | 9:d1b00a2a8e25 | 92 | if (distance < 90) i=0.5; |
fiachra | 9:d1b00a2a8e25 | 93 | if (distance < 80) i=0.45; |
fiachra | 9:d1b00a2a8e25 | 94 | if (distance < 70) i=0.4; |
fiachra | 9:d1b00a2a8e25 | 95 | if (distance < 60) i=0.35; |
fiachra | 9:d1b00a2a8e25 | 96 | if (distance < 50) i=0.3; |
fiachra | 9:d1b00a2a8e25 | 97 | if (distance < 40) i=0.25; |
fiachra | 9:d1b00a2a8e25 | 98 | if (distance < 30) i=0.2; |
fiachra | 9:d1b00a2a8e25 | 99 | if (distance < 20) i=0.15; |
fiachra | 9:d1b00a2a8e25 | 100 | if (distance < 10) i=0.1; |
fiachra | 9:d1b00a2a8e25 | 101 | if (distance < 5) i=0.05; |
fiachra | 12:730a95b81992 | 102 | mySpeaker.PlayNote(600, i, 5.0); |
fiachra | 13:a3cdbad9daf4 | 103 | } |
fiachra | 13:a3cdbad9daf4 | 104 | void Temperature(){ |
fiachra | 13:a3cdbad9daf4 | 105 | |
fiachra | 13:a3cdbad9daf4 | 106 | a = avgTemp(); |
fiachra | 13:a3cdbad9daf4 | 107 | b = avgTemp2(); |
fiachra | 13:a3cdbad9daf4 | 108 | TempConstraints(); |
fiachra | 13:a3cdbad9daf4 | 109 | Temp = (a + b)/2; |
fiachra | 13:a3cdbad9daf4 | 110 | uLCD.text_width(1); |
fiachra | 13:a3cdbad9daf4 | 111 | uLCD.text_height(1); |
fiachra | 13:a3cdbad9daf4 | 112 | uLCD.locate(1,1); |
fiachra | 13:a3cdbad9daf4 | 113 | uLCD.printf("%3.1f deg C\n\r", Temp); |
fiachra | 13:a3cdbad9daf4 | 114 | } |
fiachra | 13:a3cdbad9daf4 | 115 | |
fiachra | 13:a3cdbad9daf4 | 116 | void TempConstraints() { |
fiachra | 13:a3cdbad9daf4 | 117 | |
fiachra | 13:a3cdbad9daf4 | 118 | if(degrees_c <= 4){ |
fiachra | 13:a3cdbad9daf4 | 119 | pc.printf("WARNING\nCOLD TEMPERATURES\nICE MAY BE PRESENT"); |
fiachra | 13:a3cdbad9daf4 | 120 | } |
fiachra | 13:a3cdbad9daf4 | 121 | if(abs(a-b) > 4){ |
fiachra | 13:a3cdbad9daf4 | 122 | uLCD.printf("WARNING\nTEMPERATURE SENSOR\nFAULT\n"); |
fiachra | 13:a3cdbad9daf4 | 123 | } |
fiachra | 13:a3cdbad9daf4 | 124 | } |
fiachra | 13:a3cdbad9daf4 | 125 | |
fiachra | 13:a3cdbad9daf4 | 126 | float getTemp(){ |
fiachra | 13:a3cdbad9daf4 | 127 | voltage_in = ain * 3.3; |
fiachra | 13:a3cdbad9daf4 | 128 | degrees_c = ((voltage_in - 0.5) * 100.0); |
fiachra | 13:a3cdbad9daf4 | 129 | return degrees_c; |
fiachra | 13:a3cdbad9daf4 | 130 | } |
fiachra | 13:a3cdbad9daf4 | 131 | |
fiachra | 13:a3cdbad9daf4 | 132 | float getTemp2(){ |
fiachra | 13:a3cdbad9daf4 | 133 | voltage_in = ain2 * 3.3; |
fiachra | 13:a3cdbad9daf4 | 134 | degrees_c = ((voltage_in - 0.5) * 100.0); |
fiachra | 13:a3cdbad9daf4 | 135 | return degrees_c; |
fiachra | 13:a3cdbad9daf4 | 136 | } |
fiachra | 13:a3cdbad9daf4 | 137 | |
fiachra | 13:a3cdbad9daf4 | 138 | //Thsi function obtaines the voltage from the first sensor |
fiachra | 13:a3cdbad9daf4 | 139 | float avgTemp(){ |
fiachra | 13:a3cdbad9daf4 | 140 | float a = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 141 | float b = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 142 | float c = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 143 | float d = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 144 | float e = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 145 | float f = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 146 | float g = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 147 | float h = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 148 | float i = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 149 | float j = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 150 | float k = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 151 | float l = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 152 | float m = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 153 | float n = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 154 | float o = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 155 | float p = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 156 | float q = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 157 | float r = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 158 | float s = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 159 | float t = getTemp(); |
fiachra | 13:a3cdbad9daf4 | 160 | |
fiachra | 13:a3cdbad9daf4 | 161 | //The function is called to get 20 Values of the required voltage in order |
fiachra | 13:a3cdbad9daf4 | 162 | //to acieve an accurate resuilt and eliminate outlier effects |
fiachra | 13:a3cdbad9daf4 | 163 | 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 | 164 | |
fiachra | 13:a3cdbad9daf4 | 165 | return avgT; |
fiachra | 13:a3cdbad9daf4 | 166 | } |
fiachra | 13:a3cdbad9daf4 | 167 | |
fiachra | 13:a3cdbad9daf4 | 168 | //this function obtaines the voltage from the second sensor |
fiachra | 13:a3cdbad9daf4 | 169 | float avgTemp2(){ |
fiachra | 13:a3cdbad9daf4 | 170 | float a = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 171 | float b = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 172 | float c = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 173 | float d = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 174 | float e = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 175 | float f = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 176 | float g = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 177 | float h = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 178 | float i = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 179 | float j = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 180 | float k = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 181 | float l = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 182 | float m = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 183 | float n = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 184 | float o = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 185 | float p = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 186 | float q = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 187 | float r = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 188 | float s = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 189 | float t = getTemp2(); |
fiachra | 13:a3cdbad9daf4 | 190 | |
fiachra | 13:a3cdbad9daf4 | 191 | 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 | 192 | |
fiachra | 13:a3cdbad9daf4 | 193 | return avgT; |
tadhgjones | 8:f3ab61374cd0 | 194 | } |