Modify the BlinkThreadCallback example so you run two threads that blink different LEDs once per second by waiting for each other

Files at this revision

API Documentation at this revision

Comitter:
vicara
Date:
Sun Nov 11 21:19:55 2018 +0000
Parent:
0:11ca69d691b7
Commit message:
Thread blink done with debug mode enabled;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 11ca69d691b7 -r 30693312f670 main.cpp
--- a/main.cpp	Sun Nov 11 15:55:24 2018 +0000
+++ b/main.cpp	Sun Nov 11 21:19:55 2018 +0000
@@ -1,19 +1,66 @@
 #include "mbed.h"
 
-Thread thread;
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
+InterruptIn button(USER_BUTTON);
 
-// Blink function toggles the led in a long running loop
-void blink(DigitalOut *led) {
-    *led = !*led;
-    wait(1);
+//____________________________
+
+Thread thread1;
+Thread thread2;
+
+//____________________________
+
+bool is_debug_enabled = false;
+bool is_t2_done = true;
+bool is_t1_done = false;
+
+void toggle_debug_mode() {
+    is_debug_enabled = !is_debug_enabled;
 }
-
-int main() {
-    while(true){
-        thread.start(callback(blink, &led1));
-        thread.join();
-        thread.start(callback(blink, &led2));
+ 
+void led1_thread(DigitalOut *led) {
+    if(is_debug_enabled)
+        printf("T1 STARTED\n");
+    while (true) {
+        if(is_t2_done){
+            if(is_debug_enabled)
+                printf("T1 EXECUTING\n");
+            is_t1_done = false;
+            is_t2_done = false;
+            *led = !*led;
+            wait(1);
+            *led = !*led;
+            is_t1_done = true;
+            if(is_debug_enabled)
+                printf("T1 DONE\n\n");
+        }  
     }
 }
+ 
+void led2_thread(DigitalOut *led) {
+    if(is_debug_enabled)
+        printf("T2 STARTED\n");
+    while (true) {
+        if(is_t1_done){
+            if(is_debug_enabled)
+                printf("T2 EXECUTING\n");
+            is_t1_done = false;
+            is_t2_done = false;
+            *led = !*led;
+            wait(1);
+            *led = !*led;
+            is_t2_done = true;
+            if(is_debug_enabled)
+                printf("T2 DONE\n\n");
+        }  
+    }
+}
+ 
+int main() {
+    button.rise(&toggle_debug_mode);
+    thread1.start(callback(led1_thread, &led1));
+    thread2.start(callback(led2_thread, &led2));
+    thread1.join();
+    thread2.join();
+}