f

Dependencies:   Speaker mbed wave_player mbed-rtos 4DGL-uLCD-SE LCD_fonts SDFileSystem_OldbutworkswithRTOS

Revision:
4:79863d2ea5a0
Parent:
3:3ec443c0842a
Child:
5:5f393c6b02cb
--- 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
     }
-
 }