AUP_Lab7_RTOS

Dependencies:   C12832 MMA7660 mbed-rtos mbed

Fork of AUP_Lab6_Music by Lei Lei

Revision:
4:dbce53c4e44d
Parent:
3:640558c1c0d3
--- a/main.cpp	Wed Jul 08 00:09:57 2015 +0000
+++ b/main.cpp	Wed Jul 08 05:34:29 2015 +0000
@@ -1,59 +1,87 @@
 #include "mbed.h"
+#include "rtos.h"
 #include "C12832.h"
 #include "MMA7660.h"
 
-// 添加旋律播放相关文件
-#include "SongPlayer.h"
+// Define the mutex
+Mutex lcd_mutex;
+Mutex acc_mutex;
+
+PwmOut      led(D9);
+AnalogIn    pot1(A0);
+C12832      lcd(D11, D13, D12, D7, D10);
+MMA7660     MMA(D14, D15);
 
-// 旋律数据
-float note[18]= {1568.0,1396.9,1244.5,1244.5,1396.9,1568.0,1568.0,1568.0,1396.9,
-                 1244.5,1396.9,1568.0,1396.9,1244.5,1174.7,1244.5,1244.5, 0.0
-                };
-float duration[18]= {0.48,0.24,0.72,0.48,0.24,0.48,0.24,0.24,0.24,
-                     0.24,0.24,0.24,0.24,0.48,0.24,0.48,0.48, 0.0
-                    };
+// Adjust the brightness of the LED
+void adjust_brightness(void const *args){
+    while(1){
+        led = 1 - pot1.read();
+        Thread::wait(50);
+    }
+}
+
+//Display LED brightness on the LCD
+void disp_led_thread(void const *args){
+    while(1){
+        lcd_mutex.lock();
+        lcd.locate(0, 0);
+        lcd.printf("Brightness: %.2f", 1 - led);
+        lcd_mutex.unlock();
+        Thread::wait(100);
+    }
+}
 
-PwmOut led(D5);
-DigitalIn button_up(A2);
-DigitalIn button_center(D4);
-DigitalIn button_down(A3);
-C12832 lcd(D11, D13, D12, D7, D10);
-MMA7660 MMA(D14, D15);
+// Display acceleration x on the LCD
+void disp_x_thread(void const *args){
+    while(1){
+        lcd_mutex.lock();
+        acc_mutex.lock();
+        lcd.locate(0, 8);
+        lcd.printf("x=%.2f", MMA.x());
+        acc_mutex.unlock();
+        lcd_mutex.unlock();
+        Thread::wait(100);
+    }
+}
 
-// 初始化D6引脚作为PWM用于驱动扬声器
-SongPlayer mySpeaker(D6);
+// Display acceleration y on the LCD
+void disp_y_thread(void const *args){
+    while(1){
+        lcd_mutex.lock();
+        acc_mutex.lock();
+        lcd.locate(40, 8);
+        lcd.printf("y=%.2f", MMA.y());
+        acc_mutex.unlock();
+        lcd_mutex.unlock();
+        Thread::wait(100);
+    }
+}
 
-double brightness = 1.0;
-double brightness_inc = 0.1;
+// Display acceleration z on the LCD
+void disp_z_thread(void const *args){
+    while(1){
+        lcd_mutex.lock();
+        acc_mutex.lock();
+        lcd.locate(80, 8);
+        lcd.printf("z=%.2f", MMA.z());
+        acc_mutex.unlock();
+        lcd_mutex.unlock();
+        Thread::wait(100);
+    }
+}
 
 int main()
 {
-    int bt_flag = 0;
     lcd.cls();
-    led.write(brightness);
-    
-    // 播放旋律
-    mySpeaker.PlaySong(note,duration,0.05);
-    
+
+    Thread thread1(adjust_brightness);
+    Thread thread2(disp_led_thread);
+    Thread thread3(disp_x_thread);
+    Thread thread4(disp_y_thread);
+    Thread thread5(disp_z_thread);
+
+    // Sleep and wait for interrupt
     while (1) {
-        bt_flag = 1;
-        if(button_up==1)
-            brightness -= brightness_inc;
-        else if(button_down==1)
-            brightness += brightness_inc;
-        else if(button_center==1)
-            brightness = (brightness>0.5)?1.0:0.0;
-        else
-            bt_flag = 0;
-        if(bt_flag==1)
-        {
-            brightness = (brightness>1.0)?0.0:brightness;
-            brightness = (brightness<0.0)?1.0:brightness;
-            led.write(brightness);
-        }
-        lcd.locate(0, 0);
-        lcd.printf("Brightness = %.1f\r\n", 1.0 - brightness);
-        lcd.printf("x=%.2f y=%.2f z=%.2f", MMA.x(), MMA.y(), MMA.z());
-        wait(0.2);
+        __wfi();
     }
 }