Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832_lcd USBHost mbed
Diff: main.cpp
- Revision:
- 7:0fa7430ab812
- Parent:
- 6:4c62f9c91b1d
- Child:
- 8:b22ef9f44549
--- a/main.cpp Sun Jan 25 22:26:35 2015 +0000
+++ b/main.cpp Mon Jan 26 14:58:21 2015 +0000
@@ -2,15 +2,24 @@
#include "rtos.h"
#include "C12832_lcd.h"
+//Varible
float sonarDistance;
float servoPosition;
+//Mutex
Mutex sonarDistance_mutex; //Init Mutex for sensor value
Mutex servoPosition_mutex; //Init Mutex for servo value
-
+Mutex LED_mutex;
+
+//I/O
AnalogIn sonarPin(p17); //Assign pin to read sonar sensor
PwmOut servoPin(p21); //Assign pin for servo output
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
+//LCD Setup
C12832_LCD lcd; //setup LCD screen
void sonarSensor(void const *args){
@@ -32,24 +41,28 @@
void logic(void const *args)
{
+ int Size=12;
+ float Average_4[12]; //number of value in the array
+ float Average_Sum=0;
while(true)
{
- float Average_4[]={0,0,0,0,0,0,0}; //number of value in the array
- float Average_Sum=0;
-
- sonarDistance_mutex.lock(); //Mutex lock for the Sonar value
- servoPosition_mutex.lock(); //Mutex lock for the servo value
-
- for(int i=0;i<6;i++)
+
+ for(int i=0;i<Size;i++)
{
Average_Sum = Average_Sum-Average_4[i]; //Remove the 4th oldest value from the average sum
+
+ sonarDistance_mutex.lock(); //Mutex lock for the Sonar value
Average_4[i]= sonarDistance; //Add the new value to the array
+ sonarDistance_mutex.unlock(); //Mutex unlock for the Sonar value
+
Average_Sum = Average_Sum + Average_4[i]; //Add the new array value to the sum
- servoPosition = Average_Sum/6; //Divide the array by the number of element in the array
+
+ servoPosition_mutex.lock(); //Mutex lock for the servo value
+ servoPosition = Average_Sum/Size; //Divide the array by the number of element in the array
+ servoPosition_mutex.unlock(); //Mutex unlock for the servo value
+
}//end for loop
- sonarDistance_mutex.unlock(); //Mutex unlock for the Sonar value
- servoPosition_mutex.unlock(); //Mutex unlock for the servo value
}//end of while loop
}//End of thread
@@ -67,6 +80,55 @@
}
}
+void LED_meter(void const *args) {
+
+ float LED_distance = 0;
+
+ while(true) {
+ sonarDistance_mutex.lock();
+ LED_distance=sonarDistance;
+ sonarDistance_mutex.unlock();
+
+ if(LED_distance<=0.2)
+ {
+ myled1 = 1;
+ }
+ else
+ {
+ myled1 = 0;
+ }
+
+ if(LED_distance<=0.15)
+ {
+ myled2 = 1;
+ }
+ else
+ {
+ myled2 = 0;
+ }
+
+ if(LED_distance<=0.1)
+ {
+ myled3 = 1;
+ }
+ else
+ {
+ myled3 = 0;
+ }
+
+ if(LED_distance<=0.05)
+ {
+ myled4 = 1;
+ //s2=0.1;
+ }
+ else
+ {
+ myled4 = 0;
+ //s2=1;
+ }
+ }
+}
+
int main(){
sonarDistance = 0.0f;
servoPosition = 0.0f;
@@ -76,6 +138,7 @@
Thread servoControl_thread(servoControl);
Thread logic_thread(logic);
Thread display_thread(display);
+ Thread LED_meter_thread(LED_meter);
while(true)
{