This demo uses the mbed RTOS to run eight threads (including main). The threads are using different I/O devices on the application board. Several of the threads output to the LCD and an OS mutex lock is used to control access to the LCD and make the LCD thread safe.

Dependencies:   C12832_lcd LCD_fonts mbed-rtos mbed

Fork of lab1 by Peter Drescher

Files at this revision

API Documentation at this revision

Comitter:
4180_1
Date:
Sun Sep 22 17:57:46 2013 +0000
Parent:
3:3ec443c0842a
Commit message:
ver 1.0 see https://mbed.org/users/4180_1/notebook/mbed-application-board-hands-on-demos/

Changed in this revision

C12832_lcd.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-rtos.lib 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
diff -r 3ec443c0842a -r 79863d2ea5a0 C12832_lcd.lib
--- a/C12832_lcd.lib	Wed Dec 05 08:06:20 2012 +0000
+++ b/C12832_lcd.lib	Sun Sep 22 17:57:46 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/dreschpe/code/C12832_lcd/#8d812da33cdc
+http://mbed.org/users/dreschpe/code/C12832_lcd/#c9afe58d786a
diff -r 3ec443c0842a -r 79863d2ea5a0 main.cpp
--- a/main.cpp	Wed Dec 05 08:06:20 2012 +0000
+++ b/main.cpp	Sun Sep 22 17:57:46 2013 +0000
@@ -1,6 +1,6 @@
 // example to test the mbed Lab Board lcd lib with the mbed rtos
-// Pot1 change the contrast
-// Pot2 change the speed of the sin wave
+// Pot1 changes the contrast
+// Pot2 changes the speed of the sin wave
 
 #include "mbed.h"
 #include "rtos.h"
@@ -10,14 +10,19 @@
 #include "stdio.h"
 #include "C12832_lcd.h"
 
-// LCD object
+
 C12832_LCD LCD;
-
 AnalogIn Pot1(p19);
 AnalogIn Pot2(p20);
-
+PwmOut Speaker(p26);
+PwmOut RGBLED_r(p23);
+PwmOut RGBLED_g(p24);
+PwmOut RGBLED_b(p25);
+DigitalIn joyfire(p14);
+BusIn joy(p15,p12,p13,p16);
+BusOut leds(LED1,LED2,LED3,LED4);
 
-// mutex to make the lcd lib thread save
+// mutex to make the lcd lib thread safe
 Mutex lcd_mutex;
 
 // Thread 1
@@ -54,7 +59,7 @@
 
 // Thread 3
 // print a sin function in a small window
-// the value of pot 1 change the speed of the sinwave
+// the value of pot 1 changes the speed of the sine wave
 void thread3(void const *args)
 {
     int i,k,v;
@@ -66,13 +71,13 @@
     while(true) {       // thread loop
         v = Pot1.read_u16();  // get value of pot 1
         lcd_mutex.lock();
-        for (i=90; i<127; i++) {           
-            s = 8 * sin((long double)(i+k) /5);   // pixel to print  
+        for (i=90; i<127; i++) {
+            s = 8 * sin((long double)(i+k) /5);   // pixel to print
             a = 8 * sin((long double)(i+k-1) /5); // old pixel to erase
-            LCD.pixel(i,9 + (int)a ,0);           // erase pixel  
-            LCD.pixel(i,9 + (int)s ,1);           // print pixel  
+            LCD.pixel(i,9 + (int)a ,0);           // erase pixel
+            LCD.pixel(i,9 + (int)s ,1);           // print pixel
         }
-        LCD.copy_to_lcd();  // LCD.pixel do not update the lcd 
+        LCD.copy_to_lcd();  // LCD.pixel does not update the lcd
         lcd_mutex.unlock();
         k++;
         Thread::wait(v/100);   // value of pot1 / 100
@@ -80,31 +85,72 @@
 }
 
 // Thread 4
-// input pot 2 and change the contrast of lcd
+// input pot 2 and change the contrast of LCD
 void thread4(void const *args)
 {
     int k;
     while(true) {         // thread loop
-    k = Pot2.read_u16();  // get the value of poti 2
-    k = k >> 10;          // we need only 6 bit for contrast
-     lcd_mutex.lock();
-    LCD.set_contrast(k);
-     lcd_mutex.unlock();
-    Thread::wait(500);    // wait 0.5s
+        k = Pot2.read_u16();  // get the value of poti 2
+        k = k >> 10;          // need only 6 bits for contrast
+        lcd_mutex.lock();
+        LCD.set_contrast(k);
+        lcd_mutex.unlock();
+        Thread::wait(500);    // wait 0.5s
+    }
+}
+// Thread 5
+// RGB LED
+void thread5(void const *args)
+{
+    while(true) {         // thread loop
+        RGBLED_r = 0.5 + (rand() % 11)/20.0;
+        RGBLED_g = 0.5 + (rand() % 11)/20.0;
+        RGBLED_b = 0.5 + (rand() % 11)/20.0;
+        Thread::wait(1667);    // wait 1.5s
+    }
 }
+// Thread 6
+// Speaker
+void thread6(void const *args)
+{
+    while(true) {         // thread loop
+        Speaker.period(1.0/800.0);
+        Speaker = 0.01;
+        Thread::wait(1000);    // wait 1.0s
+        Speaker.period(1.0/969.0);
+        Speaker = 0.01;
+        Thread::wait(1000);    // wait 1.0s
+    }
+}
+
+// Thread 7
+// Joystick controls onboard mbed LEDs
+void thread7(void const *args)
+{
+    while(true) {         // thread loop
+        if (joyfire) {
+            leds = 0xf;
+        } else {
+            leds = joy;
+        }
+        Thread::wait(200);    // wait 0.25s
+    }
 }
 
 
-// print the actual contrast 
+
 int main()
 {
     int j;
     LCD.cls();
-  
+
     Thread t1(thread1); //start thread1
     Thread t2(thread2); //start thread2
     Thread t3(thread3); //start thread3
     Thread t4(thread4); //start thread4
+    Thread t5(thread5); //start thread5
+    Thread t6(thread6); //start thread6
+    Thread t7(thread7); //start thread7
 
     while(true) {       // main is the next thread
         lcd_mutex.lock();
@@ -115,5 +161,4 @@
         lcd_mutex.unlock();
         Thread::wait(500);   // wait 0.5s
     }
-
 }
diff -r 3ec443c0842a -r 79863d2ea5a0 mbed-rtos.lib
--- a/mbed-rtos.lib	Wed Dec 05 08:06:20 2012 +0000
+++ b/mbed-rtos.lib	Sun Sep 22 17:57:46 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed-rtos/#88a1a9c26ae3
+http://mbed.org/users/mbed_official/code/mbed-rtos/#ee87e782d34f
diff -r 3ec443c0842a -r 79863d2ea5a0 mbed.bld
--- a/mbed.bld	Wed Dec 05 08:06:20 2012 +0000
+++ b/mbed.bld	Sun Sep 22 17:57:46 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/b60934f96c0c
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file