![](/media/cache/profiles/5a3cd8928b0eb700317eb627594dbb3d.jpg.50x50_q85.jpg)
Bluetooth MP3 Player with uLCD, Speaker, and SD card hardware components
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed
Fork of app-board-RTOS-Threads by
Diff: main.cpp
- Revision:
- 4:79863d2ea5a0
- Parent:
- 3:3ec443c0842a
- Child:
- 5:4fb2d9e36571
--- 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 } - }