Fully integrated working system

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

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?

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