Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos 4DGL-uLCD-SE
main.cpp@8:c6e79c7d287a, 2020-04-29 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |