Fully integrated working system

Dependencies:   Speaker mbed mbed-rtos 4DGL-uLCD-SE hcsr04

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?

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