AUP_Lab7_RTOS
Dependencies: C12832 MMA7660 mbed-rtos mbed
Fork of AUP_Lab6_Music by
Diff: main.cpp
- Revision:
- 4:dbce53c4e44d
- Parent:
- 3:640558c1c0d3
diff -r 640558c1c0d3 -r dbce53c4e44d main.cpp --- 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(); } }