Inst Project Submission

Dependencies:   C12832 HC_SR04_Ultrasonic_Library mbed

Files at this revision

API Documentation at this revision

Comitter:
PCStokes
Date:
Sat Aug 11 08:57:24 2018 +0000
Commit message:
Submission

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
HC_SR04_Ultrasonic_Library.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Sat Aug 11 08:57:24 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/askksa12543/code/C12832/#990d5eec2ef6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HC_SR04_Ultrasonic_Library.lib	Sat Aug 11 08:57:24 2018 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/ejteb/code/HC_SR04_Ultrasonic_Library/#e0f9c9fb4cf3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Aug 11 08:57:24 2018 +0000
@@ -0,0 +1,153 @@
+#include "mbed.h"
+#include "C12832.h"
+
+DigitalOut trig(p21); //definition of the input signal.
+DigitalIn echo(p22); //definition of the input signal.
+
+DigitalOut led1(LED1); // defines the led 1 used to show the trigger signal is happening.
+DigitalOut led2(LED2); // defines the led 2 used to show the echo signal is happening.
+DigitalOut led4(LED4); //defines the led 1 used to show the buzzer is turned on or off.
+
+C12832 lcd(p5, p7, p6, p8, p11); //Definition of LCD & Pins.
+
+Timer sonar; //definition of the sonar timer.
+
+PwmOut spker (p26); //Definition of the speaker.
+
+PwmOut r (p23); //Definition of the red led.
+PwmOut g (p24); //Definition of the green led.
+PwmOut b (p25); //Definition of the blue led.
+
+InterruptIn button(p14); //interrupt used to turn on/off buzzer. "calls function to flip buzzstart".
+Timer debounce; //debounces button timer.
+
+int measurement; //defines the measurement variable.
+
+int offset = 0; //definition of the sonar timer offset.
+
+float inMin = 200; //minimum value readable in mm.
+float inMax = 4000; //maximum readable value in mm.
+float outMin = 0; //minimum mapped output value.
+float outMax = 1; //maximum mapped output value.
+float mapping = 0; //mapping value.
+
+bool buzzstart; // value flipped from o-1 to turn on off buzzer.
+
+float spkerVal=0.5; //initial pwm out value.
+
+//ranges used for buzzer.
+int range1Min = 300;
+int range2Min = 800;
+int range3Min = 1200;
+
+//ranges used for speaker output.
+int spkroutnear= 1000;
+int spkroutmid= 600;
+int spkroutfar= 200;
+
+float mapped_led() //function to create the map value for the leds.
+{
+    //mapping calculation for the measured distance to a float value between 0 and 1 used for RGB colour gradient shifts colour from green to red as the distance changes. I could have done this more directly but the mapping calculation is a nice bit of code to have to map one range of values to another.
+    mapping = ((measurement - inMin) * (outMax - outMin) / (inMax - inMin) +  outMin);
+//Caps the value for the RGBs between 0 and 1
+    if (mapping < 0.00f) { //if statement less than 0 return 0.
+        return 0;
+    } else if (mapping > 1.00f) { //if statement greater than 1 return 1.
+        return 1;
+    } else {
+        return mapping; //value to return between 0 and 1.
+    }
+}
+
+void ledCntrl() //function to control the leds pwm value on the application board.
+{
+    r=mapped_led(); //sets the value of the common anode RGB red to a duty cycle equal to the mapped value.
+    g=1-mapped_led (); //sets the value of the common anode RGB green to a duty cycle of 1 less the mapped value.
+
+    if  (buzzstart==1) { //condition based on bool value used to set the on condition of the onboard speaker.
+        if (measurement <= range1Min) { //if the measurement from the sensor is less than or equal to the lower value then;
+            spker.period(1.0/spkroutnear); //creates the Pwm  out for the speaker/frequency to make the sound.
+            spker=spkerVal; // this is the value for the speaker duty cycle output 0 would turn the speaker off.
+        }
+        if (measurement >= range1Min && measurement <= range2Min) { //condition if measurement is less than/equal to  range 1 and less than/equal to range 2 do the following;
+            spker.period(1.0/spkroutmid); //creates the Pwm  out for the speaker/frequency to make the sound.
+            spker=spkerVal; // this is the value for the speaker duty cycle output 0 would turn the speaker off.
+        }
+        if (measurement >= range2Min && measurement <= range3Min) { //condition if measurement is greater than/equal to  range 2 and less than/equal to range 3 do the following;
+            spker.period(1.0/spkroutfar); //creates the Pwm  out for the speaker/frequency to make the sound.
+            spker=spkerVal; // this is the value for the speaker duty cycle output 0 would turn the speaker off.
+        } else if (measurement > range3Min) {//condition if measurement is greater than range 3 do the following;
+            spker = 0; //turns off the speaker.
+        }
+    } else if (measurement > range3Min) { //condition if measurement is greater than range 3 do the following;
+        spker = 0; //turns off the speaker.
+    }
+}
+void buzzCntrl() //function to control the bool value used to activate the buzzer.
+{
+    if (debounce.read_ms() >(200)) { //this conditional statement checks to see if the debounce time is greater than x milliseconds. It ignores any detected presses inside of this time.
+        debounce.reset(); //this will reset the button press timer allowing for another press to happen and the debouncing timer to start again.
+        led4=!led4; //flips the condition of led 4.
+        buzzstart = led4.read(); // links the state of buzzstart to led 4.
+    }
+}
+void printdim()   //LCD Print Function
+{
+    lcd.cls(); //Clears the LCD
+    lcd.locate(2,15); //Location to be used for measurement information in mm.
+    lcd.printf("Measurement %d mm" ,measurement); //send the measurement to the lcd for display.
+}
+void measure_offset () //allows for the measure of software polling timer delay in microseconds used to correct possible errors in the measurement times due to the delay.
+{
+    while (echo==2) {}; // loops while the value of echo is 2, then following happens.
+    led2 = 0; // condition of led 2 is set to 0.
+    sonar.stop(); // the timer sonar is stopped.
+    offset = sonar.read_us(); // reads the timer
+}
+void take_measure()   //measure distance between 2cm and 4m.
+{
+    int A_sum = 0; //sets the initial value for the average sum of the readings.
+
+    while(1) { //Loop to read Sonar distance values, scale, and print values.
+        trig = 1; // trigger sonar to send a ping
+        led1 = trig; // led1 was set to trigger
+        led2 = 0; // led 2 was set to 0
+        sonar.reset(); //the sonar timer was reset.
+        wait_us(10.0); // wait period for trigger out signal.
+        trig = 0;  // turns of the trigger signal
+        led1 = trig; //sets the led1 to the value of the trigger.
+//wait for echo high
+        while (echo==0) {}; // loop while the echo = o, then do the following.
+        led2=echo; // sets led 2 equal to the state of echo.
+        sonar.start(); //echo high, so start timer
+        while (echo==1) {}; //loop while echo = 1, then do the following;
+        sonar.stop(); //stop timer
+        for (int A = 0; A < 5; ++A) { //for the increments of I, read the sonar and sum the values, each reading has the software overhead timer delay subtracted and is scaled to mm
+            A_sum += (((sonar.read_us()-offset)/58.0)*10); //value of the sum.
+        }
+        measurement = A_sum/5.00f; //average of the readings by dividing the sum by the number of reading “5”.
+        led2 = 0; //sets the value of the led to 0.
+        wait(0.2); //loop wait period.
+        break; // breaks out of the loop.
+    }
+}
+int main() //main function of the application.
+{
+    r=1; //initial value of the red led.
+    g=1; //initial value of the red green.
+    b=1; //initial value of the blue led.
+    sonar.reset();// resets the value of the sonar.
+    sonar.start(); //starts the sonar timer.
+    measure_offset(); //calls the measure offset value.
+    button.rise(&buzzCntrl); //interrupt in call the buzzer control function.
+    debounce.start(); //starts the button debounce timer.
+
+    while(1) { // main while loop.
+        take_measure(); //calls the measure function.
+        mapped_led(); // calls the value mapping function for the leds.
+        printdim(); //calls the print function to print the dimensions out the to the led screen.
+        ledCntrl(); // calls the led control function.
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat Aug 11 08:57:24 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/a7c7b631e539
\ No newline at end of file