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: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
main.cpp@1:6553131e3bcf, 2016-02-26 (annotated)
- Committer:
- mikeb
- Date:
- Fri Feb 26 17:04:20 2016 +0000
- Revision:
- 1:6553131e3bcf
- Parent:
- 0:e982498829af
- Child:
- 2:b78eabd8f218
Broken lcd;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mikeb | 0:e982498829af | 1 | #include "mbed.h" |
| mikeb | 0:e982498829af | 2 | // Need include below to add the RTOS |
| mikeb | 0:e982498829af | 3 | #include "rtos.h" |
| mikeb | 0:e982498829af | 4 | #include "SDFileSystem.h" |
| mikeb | 0:e982498829af | 5 | #include "uLCD_4DGL.h" |
| mikeb | 0:e982498829af | 6 | #include "wave_player.h" |
| mikeb | 0:e982498829af | 7 | #include "RGBLed.h" |
| mikeb | 1:6553131e3bcf | 8 | #include <string> |
| mikeb | 0:e982498829af | 9 | |
| mikeb | 0:e982498829af | 10 | |
| mikeb | 0:e982498829af | 11 | |
| mikeb | 0:e982498829af | 12 | |
| mikeb | 0:e982498829af | 13 | DigitalOut led1(LED1); |
| mikeb | 0:e982498829af | 14 | DigitalOut led2(LED2); |
| mikeb | 0:e982498829af | 15 | DigitalOut led3(LED3); |
| mikeb | 0:e982498829af | 16 | DigitalOut led4(LED4); |
| mikeb | 0:e982498829af | 17 | |
| mikeb | 0:e982498829af | 18 | //wave player plays a *.wav file to D/A and a PWM |
| mikeb | 0:e982498829af | 19 | AnalogOut DACout(p18); |
| mikeb | 0:e982498829af | 20 | wave_player waver(&DACout); |
| mikeb | 0:e982498829af | 21 | |
| mikeb | 0:e982498829af | 22 | uLCD_4DGL uLCD(p28,p27,p26); // serial tx, serial rx, reset pin; |
| mikeb | 0:e982498829af | 23 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
| mikeb | 0:e982498829af | 24 | RGBLed rgb(p22, p23, p24); |
| mikeb | 0:e982498829af | 25 | Mutex uLCD_mutex; |
| mikeb | 0:e982498829af | 26 | Mutex seed_mutex; |
| mikeb | 0:e982498829af | 27 | |
| mikeb | 0:e982498829af | 28 | volatile float seed = 0; |
| mikeb | 0:e982498829af | 29 | // Setup function code for three new threads to run. |
| mikeb | 0:e982498829af | 30 | // Put in a while loop so that threads run forever. |
| mikeb | 0:e982498829af | 31 | // Thread::wait will force at least a "x" millisecond |
| mikeb | 0:e982498829af | 32 | // wait before the thread runs again. During this delay |
| mikeb | 0:e982498829af | 33 | // the other threads will run |
| mikeb | 0:e982498829af | 34 | // DO NOT use wait() with the RTOS!!!!! |
| mikeb | 0:e982498829af | 35 | // wait just burns processor time and no other threads run |
| mikeb | 0:e982498829af | 36 | void audio_thread(void const *argument) |
| mikeb | 0:e982498829af | 37 | { |
| mikeb | 0:e982498829af | 38 | FILE *fp = fopen("/sd/mydir/Evil_Laugh.wav", "r"); |
| mikeb | 0:e982498829af | 39 | if(fp == NULL) { |
| mikeb | 0:e982498829af | 40 | error("Could not open file for write\n"); |
| mikeb | 0:e982498829af | 41 | } |
| mikeb | 0:e982498829af | 42 | while (true) { |
| mikeb | 0:e982498829af | 43 | waver.play(fp); |
| mikeb | 0:e982498829af | 44 | } |
| mikeb | 0:e982498829af | 45 | } |
| mikeb | 0:e982498829af | 46 | void uLCD2_thread(void const *argument) |
| mikeb | 0:e982498829af | 47 | { |
| mikeb | 0:e982498829af | 48 | float old_seed = 1; |
| mikeb | 0:e982498829af | 49 | while (true) { |
| mikeb | 0:e982498829af | 50 | if (old_seed != seed){ |
| mikeb | 0:e982498829af | 51 | old_seed = seed; |
| mikeb | 0:e982498829af | 52 | uLCD_mutex.lock(); |
| mikeb | 1:6553131e3bcf | 53 | uLCD.filled_rectangle(30, 30, 100, 10,BLACK); |
| mikeb | 1:6553131e3bcf | 54 | uLCD.filled_rectangle(30, 30, 100*seed, 10, RED); |
| mikeb | 0:e982498829af | 55 | uLCD_mutex.unlock(); |
| mikeb | 0:e982498829af | 56 | |
| mikeb | 0:e982498829af | 57 | } |
| mikeb | 0:e982498829af | 58 | } |
| mikeb | 0:e982498829af | 59 | } |
| mikeb | 0:e982498829af | 60 | void RGB_thread(void const *argument) |
| mikeb | 0:e982498829af | 61 | { |
| mikeb | 0:e982498829af | 62 | while (true) { |
| mikeb | 0:e982498829af | 63 | |
| mikeb | 0:e982498829af | 64 | //seed_mutex.lock(); |
| mikeb | 0:e982498829af | 65 | seed = rand()/float(RAND_MAX); |
| mikeb | 0:e982498829af | 66 | //seed_mutex.unlock(); |
| mikeb | 1:6553131e3bcf | 67 | rgb.write(seed/9 ,seed/5, seed/4); //Blue, green,red; |
| mikeb | 1:6553131e3bcf | 68 | Thread::wait(150); |
| mikeb | 0:e982498829af | 69 | } |
| mikeb | 0:e982498829af | 70 | } |
| mikeb | 0:e982498829af | 71 | |
| mikeb | 0:e982498829af | 72 | int main() |
| mikeb | 0:e982498829af | 73 | { |
| mikeb | 0:e982498829af | 74 | uLCD.cls(); |
| mikeb | 0:e982498829af | 75 | uLCD.baudrate(3000000); //jack up baud rate to max for fast display |
| mikeb | 0:e982498829af | 76 | uLCD.text_width(2); //2x size text |
| mikeb | 0:e982498829af | 77 | uLCD.text_height(2); |
| mikeb | 0:e982498829af | 78 | uLCD.text_italic(ON); |
| mikeb | 0:e982498829af | 79 | uLCD.background_color(BLACK); |
| mikeb | 1:6553131e3bcf | 80 | //Thread thread1(uLCD2_thread); |
| mikeb | 0:e982498829af | 81 | Thread thread2(audio_thread); |
| mikeb | 0:e982498829af | 82 | Thread thread3(RGB_thread); |
| mikeb | 0:e982498829af | 83 | led1 = 1; |
| mikeb | 0:e982498829af | 84 | string s = "Spo"; |
| mikeb | 0:e982498829af | 85 | std::string s2 = "oky!"; |
| mikeb | 0:e982498829af | 86 | std::string o = " "; |
| mikeb | 0:e982498829af | 87 | std::string o2 = "o"; |
| mikeb | 0:e982498829af | 88 | |
| mikeb | 0:e982498829af | 89 | while (true) { |
| mikeb | 0:e982498829af | 90 | led2 = !led2; |
| mikeb | 1:6553131e3bcf | 91 | for( short i = 0; i <6; i++){ |
| mikeb | 0:e982498829af | 92 | uLCD_mutex.lock(); |
| mikeb | 1:6553131e3bcf | 93 | uLCD.locate(0,4); |
| mikeb | 1:6553131e3bcf | 94 | uLCD.printf("%o%s%s2\n\r", o.c_str(), s.c_str(), s2.c_str()); |
| mikeb | 0:e982498829af | 95 | uLCD_mutex.unlock(); |
| mikeb | 0:e982498829af | 96 | o = o + " "; |
| mikeb | 1:6553131e3bcf | 97 | Thread::wait(1000); |
| mikeb | 0:e982498829af | 98 | } |
| mikeb | 0:e982498829af | 99 | |
| mikeb | 0:e982498829af | 100 | o = " "; |
| mikeb | 0:e982498829af | 101 | |
| mikeb | 1:6553131e3bcf | 102 | for( short i = 0; i <6; i++){ |
| mikeb | 0:e982498829af | 103 | uLCD_mutex.lock(); |
| mikeb | 1:6553131e3bcf | 104 | uLCD.locate(0,4); |
| mikeb | 1:6553131e3bcf | 105 | uLCD.printf("%s%02%s2\n\r", s.c_str(), o2.c_str(), s2.c_str()); |
| mikeb | 0:e982498829af | 106 | uLCD_mutex.unlock(); |
| mikeb | 0:e982498829af | 107 | o2 = o2 + "o"; |
| mikeb | 1:6553131e3bcf | 108 | Thread::wait(1000); |
| mikeb | 0:e982498829af | 109 | } |
| mikeb | 0:e982498829af | 110 | o2 = "o"; |
| mikeb | 0:e982498829af | 111 | } |
| mikeb | 0:e982498829af | 112 | } |