Fully integrated working system
Dependencies: Speaker mbed mbed-rtos 4DGL-uLCD-SE hcsr04
main.cpp
- Committer:
- fiachra
- Date:
- 2020-12-17
- Revision:
- 13:a3cdbad9daf4
- Parent:
- 12:730a95b81992
- Child:
- 14:0bbfa2c1de62
File content as of revision 13:a3cdbad9daf4:
#include "mbed.h" #include "hcsr04.h" #include "Speaker.h" #include "uLCD_4DGL.h" //temp AnalogIn ain(p15); AnalogIn ain2(p16); //dist HCSR04 distSens(p25,p6); Speaker mySpeaker(p18); //general Serial pc(USBTX, USBRX); uLCD_4DGL uLCD(p9,p10,p11); //distance unsigned int dist; float averageDistance(); void beeping(); float i = 1000; //temp void Temperature(); void TempConstraints(); float getTemp(); float avgTemp(); float getTemp2(); float avgTemp2(); float voltage_in; float degrees_c; float avgT; float Temp; float a; float b; int main() { //dist uLCD.text_width(1); uLCD.text_height(1); uLCD.locate(10, 12); uLCD.color(BLUE); uLCD.printf(" Reverse Sensor"); uLCD.rectangle(65, 117, 126, 127, 0x0000FF); while(1) { i++; //distance distSens.start(); averageDistance(); beeping(); uLCD.filled_rectangle(66, 118, 125, 127, 0x000000); pc.printf("cm:%d\n",dist ); uLCD.locate(10, 15); uLCD.color(WHITE); uLCD.printf("cm:%1d\n",dist ); //temperature NEED TO FIX THIS if (i > 10) { uLCD.filled_rectangle(0, 0, 126, 80, 0x000000); Temperature(); i = 0; } } } float averageDistance() { int a = distSens.get_dist_cm(); int b = distSens.get_dist_cm(); int c = distSens.get_dist_cm(); int d = distSens.get_dist_cm(); int e = distSens.get_dist_cm(); int f = distSens.get_dist_cm(); int g = distSens.get_dist_cm(); int h = distSens.get_dist_cm(); int i = distSens.get_dist_cm(); int j = distSens.get_dist_cm(); dist = (a+b+c+d+e+f+g+h+i+j)/10; return dist; } void beeping() { int distance = averageDistance(); //sensor defaults to 2k+ when dist<~3cm if (distance > 2000) i=0.05; if (distance < 150) i=0.6; if (distance < 100) i=0.55; if (distance < 90) i=0.5; if (distance < 80) i=0.45; if (distance < 70) i=0.4; if (distance < 60) i=0.35; if (distance < 50) i=0.3; if (distance < 40) i=0.25; if (distance < 30) i=0.2; if (distance < 20) i=0.15; if (distance < 10) i=0.1; if (distance < 5) i=0.05; mySpeaker.PlayNote(600, i, 5.0); } void Temperature(){ a = avgTemp(); b = avgTemp2(); TempConstraints(); Temp = (a + b)/2; uLCD.text_width(1); uLCD.text_height(1); uLCD.locate(1,1); uLCD.printf("%3.1f deg C\n\r", Temp); } void TempConstraints() { if(degrees_c <= 4){ pc.printf("WARNING\nCOLD TEMPERATURES\nICE MAY BE PRESENT"); } if(abs(a-b) > 4){ uLCD.printf("WARNING\nTEMPERATURE SENSOR\nFAULT\n"); } } float getTemp(){ voltage_in = ain * 3.3; degrees_c = ((voltage_in - 0.5) * 100.0); return degrees_c; } float getTemp2(){ voltage_in = ain2 * 3.3; degrees_c = ((voltage_in - 0.5) * 100.0); return degrees_c; } //Thsi function obtaines the voltage from the first sensor float avgTemp(){ float a = getTemp(); float b = getTemp(); float c = getTemp(); float d = getTemp(); float e = getTemp(); float f = getTemp(); float g = getTemp(); float h = getTemp(); float i = getTemp(); float j = getTemp(); float k = getTemp(); float l = getTemp(); float m = getTemp(); float n = getTemp(); float o = getTemp(); float p = getTemp(); float q = getTemp(); float r = getTemp(); float s = getTemp(); float t = getTemp(); //The function is called to get 20 Values of the required voltage in order //to acieve an accurate resuilt and eliminate outlier effects avgT = (a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t)/20; return avgT; } //this function obtaines the voltage from the second sensor float avgTemp2(){ float a = getTemp2(); float b = getTemp2(); float c = getTemp2(); float d = getTemp2(); float e = getTemp2(); float f = getTemp2(); float g = getTemp2(); float h = getTemp2(); float i = getTemp2(); float j = getTemp2(); float k = getTemp2(); float l = getTemp2(); float m = getTemp2(); float n = getTemp2(); float o = getTemp2(); float p = getTemp2(); float q = getTemp2(); float r = getTemp2(); float s = getTemp2(); float t = getTemp2(); avgT = (a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t)/20; return avgT; }