Example project for the Line Follower robot.

Dependencies:   PM2_Libary Eigen

Revision:
0:f44522e28559
Child:
1:93d997d6b232
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Mar 30 12:50:43 2021 +0000
@@ -0,0 +1,65 @@
+#include "mbed.h"
+#include "platform/mbed_thread.h"
+ 
+using namespace std::chrono;
+ 
+InterruptIn    user_button(USER_BUTTON);
+DigitalOut     led(LED1);
+ 
+bool           executeMainTask = false;
+Timer          user_button_timer, loop_timer;
+int            Ts_ms = 50;
+ 
+void           button_fall();
+void           button_rise();
+ 
+/* input your stuff here */
+AnalogIn       analogIn(PA_0);
+float          dist = 0.0f;
+ 
+int main()
+{
+    user_button.fall(&button_fall);
+    user_button.rise(&button_rise);
+    loop_timer.start();
+ 
+    while (true) {
+ 
+        loop_timer.reset();
+ 
+        /* ------------- start hacking ------------- -------------*/
+ 
+        if(executeMainTask) {
+ 
+            dist = analogIn.read()*3.3f;
+ 
+            /* do only output what's really necessary, outputting "Measured value in mV: "" within the loop is no good solution */           
+            printf("Measured value in mV: %d\r\n", (static_cast<int>(dist * 1e3)));
+ 
+            /* visual feedback that the main task is executed */
+            led = !led;
+ 
+        } else {
+            led = 0;
+        }
+ 
+        /* ------------- stop hacking ------------- -------------*/
+ 
+        int T_loop_ms = duration_cast<milliseconds>(loop_timer.elapsed_time()).count();
+        int dT_loop_ms = Ts_ms - T_loop_ms;
+        thread_sleep_for(dT_loop_ms);
+    }
+}
+ 
+void button_fall()
+{
+    user_button_timer.reset();
+    user_button_timer.start();
+}
+ 
+void button_rise()
+{
+    int t_button = duration_cast<milliseconds>(user_button_timer.elapsed_time()).count();
+    user_button_timer.stop();
+    if(t_button > 200) executeMainTask = !executeMainTask;
+}
\ No newline at end of file