Car safety monitoring system, monitoring distance, light and temperature.
Dependencies: Speaker mbed mbed-rtos 4DGL-uLCD-SE hcsr04
main.cpp
- Committer:
- tadhgjones
- Date:
- 2020-12-20
- Revision:
- 15:d39446966d94
- Parent:
- 14:0bbfa2c1de62
File content as of revision 15:d39446966d94:
#include "mbed.h" #include "hcsr04.h" #include "Speaker.h" #include "uLCD_4DGL.h" //Temperature Inputs AnalogIn ain(p15); AnalogIn ain2(p16); //Distance Inputs HCSR04 distSens(p25,p6); Speaker mySpeaker(p18); //Initialisation of LCD and Serial Monitor Serial pc(USBTX, USBRX); uLCD_4DGL uLCD(p9,p10,p11); //Autolights Inputs AnalogIn photodiode(p20); PwmOut myled(p21); //Distance unsigned int dist; float averageDistance(); void beeping(); float i; float x = 0; //Temperature 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; //Autolights void LED(); int main() { //distance 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 Temperature(); //autolights LED(); } } //measure average distance from sensor 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; } //distance parameters and output void beeping() { int distance = averageDistance(); //sensor defaults to 2k+ when dist<~3cm if (distance > 2000) i=1.5; if (distance < 150) i=0.3; if (distance < 100) i=0.35; if (distance < 90) i=0.4; if (distance < 80) i=0.45; if (distance < 70) i=0.5; if (distance < 60) i=0.55; if (distance < 50) i=0.6; if (distance < 40) i=0.65; if (distance < 30) i=0.7; if (distance < 20) i=0.8; if (distance < 10) i=1; if (distance < 5) i=1.2; mySpeaker.PlayNote(700*i, 0.2, 2*i); } //measure and output temperature void Temperature(){ uLCD.locate(1,1); uLCD.printf("Temperature:\n\n"); a = avgTemp(); b = avgTemp2(); Temp = ((a + b)/2)-15; uLCD.text_width(2); uLCD.text_height(2); uLCD.printf("%3.1f\t", Temp); uLCD.text_width(1); uLCD.text_height(1); uLCD.printf("o"); uLCD.text_width(2); uLCD.text_height(2); uLCD.printf("C"); uLCD.text_width(1); uLCD.text_height(1); TempConstraints(); } //signal sensor fault or low temperature void TempConstraints() { if(degrees_c <= 4){ uLCD.text_width(1); uLCD.text_height(1); uLCD.locate(1,5); pc.printf("ICE WARNING"); } if(abs(a-b) > 4){ uLCD.text_width(1); uLCD.text_height(1); uLCD.locate(1,5); uLCD.printf("TEMPERATURE FAULT"); } } //convert sensor outut to temperature 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 average 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(); avgT = (a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t)/20; return avgT; } 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; } //check LED and turn on and off lights as required void LED(){ if (photodiode*100 <= 27){ myled = 1; uLCD.locate(1,7); uLCD.printf("Autolights:\n\n"); uLCD.text_width(2); uLCD.text_height(2); uLCD.printf("ON "); uLCD.text_width(1); uLCD.text_height(1); } else { myled = 0; uLCD.locate(1,7); uLCD.printf("Autolights:\n\n"); uLCD.text_width(2); uLCD.text_height(2); uLCD.printf("OFF"); uLCD.text_width(1); uLCD.text_height(1); } }