Kyle Carter / Mbed 2 deprecated multi-thread

Dependencies:   mbed mbed-rtos 4DGL-uLCD-SE

Committer:
kmaxc3211
Date:
Wed Apr 29 22:32:05 2020 +0000
Revision:
8:c6e79c7d287a
Parent:
7:bd0aa7f21f53
initial publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:0f886ffbe0c1 1 #include "mbed.h"
mbed_official 7:bd0aa7f21f53 2 #include "rtos.h"
kmaxc3211 8:c6e79c7d287a 3 #include "uLCD_4DGL.h"
emilmont 1:0f886ffbe0c1 4
kmaxc3211 8:c6e79c7d287a 5 Mutex lcd_mutex;
kmaxc3211 8:c6e79c7d287a 6 uLCD_4DGL lcd(p28, p27, p30);
kmaxc3211 8:c6e79c7d287a 7 PwmOut red(p22);
kmaxc3211 8:c6e79c7d287a 8 PwmOut green(p23);
kmaxc3211 8:c6e79c7d287a 9 PwmOut blue(p24);
kmaxc3211 8:c6e79c7d287a 10 DigitalOut led4(LED4);
mbed_official 7:bd0aa7f21f53 11
kmaxc3211 8:c6e79c7d287a 12 class Speaker
kmaxc3211 8:c6e79c7d287a 13 {
kmaxc3211 8:c6e79c7d287a 14 public:
kmaxc3211 8:c6e79c7d287a 15 Speaker(PinName pin) : _pin(pin) {
kmaxc3211 8:c6e79c7d287a 16 // _pin(pin) means pass pin to the Speaker Constructor
kmaxc3211 8:c6e79c7d287a 17 }
kmaxc3211 8:c6e79c7d287a 18 // class method to play a note based on PwmOut class
kmaxc3211 8:c6e79c7d287a 19 void PlayNote(float frequency, float duration, float volume) {
kmaxc3211 8:c6e79c7d287a 20 _pin.period(1.0/frequency);
kmaxc3211 8:c6e79c7d287a 21 _pin = volume/2.0;
kmaxc3211 8:c6e79c7d287a 22 wait(duration);
kmaxc3211 8:c6e79c7d287a 23 _pin = 0.0;
kmaxc3211 8:c6e79c7d287a 24 }
kmaxc3211 8:c6e79c7d287a 25
kmaxc3211 8:c6e79c7d287a 26 private:
kmaxc3211 8:c6e79c7d287a 27 // sets up specified pin for PWM using PwmOut class
kmaxc3211 8:c6e79c7d287a 28 PwmOut _pin;
kmaxc3211 8:c6e79c7d287a 29 };
emilmont 1:0f886ffbe0c1 30
kmaxc3211 8:c6e79c7d287a 31 // Thread 1
kmaxc3211 8:c6e79c7d287a 32 // control RGB LED
kmaxc3211 8:c6e79c7d287a 33 void thread1(void const *args)
kmaxc3211 8:c6e79c7d287a 34 {
kmaxc3211 8:c6e79c7d287a 35 while(true) {
kmaxc3211 8:c6e79c7d287a 36 red = 1;
kmaxc3211 8:c6e79c7d287a 37 wait(0.5);
kmaxc3211 8:c6e79c7d287a 38 red = 0;
kmaxc3211 8:c6e79c7d287a 39 blue = 1;
kmaxc3211 8:c6e79c7d287a 40 wait(0.5);
kmaxc3211 8:c6e79c7d287a 41 blue = 0;
kmaxc3211 8:c6e79c7d287a 42 Thread::wait(50);
emilmont 1:0f886ffbe0c1 43 }
emilmont 1:0f886ffbe0c1 44 }
emilmont 1:0f886ffbe0c1 45
kmaxc3211 8:c6e79c7d287a 46 // Thread 2 control uLCD image
kmaxc3211 8:c6e79c7d287a 47 void thread2(void const *args)
kmaxc3211 8:c6e79c7d287a 48 {
kmaxc3211 8:c6e79c7d287a 49 lcd_mutex.lock();
kmaxc3211 8:c6e79c7d287a 50 lcd.cls();
kmaxc3211 8:c6e79c7d287a 51 lcd.media_init();
kmaxc3211 8:c6e79c7d287a 52 lcd.set_sector_address(0x003B, 0x9000);
kmaxc3211 8:c6e79c7d287a 53 lcd.display_image(0,0);
kmaxc3211 8:c6e79c7d287a 54 lcd_mutex.unlock();
kmaxc3211 8:c6e79c7d287a 55 Thread::wait(5000);
kmaxc3211 8:c6e79c7d287a 56 }
mbed_official 7:bd0aa7f21f53 57
kmaxc3211 8:c6e79c7d287a 58 // Thread 3 control speaker
kmaxc3211 8:c6e79c7d287a 59 void thread3(void const *args)
kmaxc3211 8:c6e79c7d287a 60 {
kmaxc3211 8:c6e79c7d287a 61 Speaker mySpeaker(p21);
kmaxc3211 8:c6e79c7d287a 62 while(1){
kmaxc3211 8:c6e79c7d287a 63 mySpeaker.PlayNote(783.991,1.0,0.05);
kmaxc3211 8:c6e79c7d287a 64 mySpeaker.PlayNote(587.330,1.0,0.05);
kmaxc3211 8:c6e79c7d287a 65 Thread::wait(50);
kmaxc3211 8:c6e79c7d287a 66 }
kmaxc3211 8:c6e79c7d287a 67 }
Bartek Szatkowski 5:384d6cef11d4 68
kmaxc3211 8:c6e79c7d287a 69 // Thread 4 control uLCD text
kmaxc3211 8:c6e79c7d287a 70 void thread4(void const *args)
kmaxc3211 8:c6e79c7d287a 71 {
kmaxc3211 8:c6e79c7d287a 72 lcd_mutex.lock();
kmaxc3211 8:c6e79c7d287a 73 lcd.locate(7,13);
kmaxc3211 8:c6e79c7d287a 74 lcd.printf("HALT!");
kmaxc3211 8:c6e79c7d287a 75 lcd_mutex.unlock();
kmaxc3211 8:c6e79c7d287a 76 Thread::wait(1000);
emilmont 1:0f886ffbe0c1 77 }
kmaxc3211 8:c6e79c7d287a 78
kmaxc3211 8:c6e79c7d287a 79 int main()
kmaxc3211 8:c6e79c7d287a 80 {
kmaxc3211 8:c6e79c7d287a 81 Thread t1(thread1); //start thread1
kmaxc3211 8:c6e79c7d287a 82 Thread t2(thread2); //start thread2
kmaxc3211 8:c6e79c7d287a 83 Thread t3(thread3); //start thread3
kmaxc3211 8:c6e79c7d287a 84 Thread t4(thread4); //start thread4
kmaxc3211 8:c6e79c7d287a 85 while(1) {
kmaxc3211 8:c6e79c7d287a 86 led4 = !led4;
kmaxc3211 8:c6e79c7d287a 87 Thread::wait(1000);
kmaxc3211 8:c6e79c7d287a 88 }
kmaxc3211 8:c6e79c7d287a 89 }