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 wave_player mbed-rtos 4DGL-uLCD-SE RTOS FATFileSystem
main.cpp@12:0fe16c716237, 2021-10-12 (annotated)
- Committer:
- nm2299
- Date:
- Tue Oct 12 03:45:20 2021 +0000
- Revision:
- 12:0fe16c716237
- Parent:
- 11:50e44c84411c
Jank
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| samux | 0:0d68fe822228 | 1 | #include "mbed.h" |
| 4180_1 | 11:50e44c84411c | 2 | #include "rtos.h" |
| 4180_1 | 11:50e44c84411c | 3 | #include "SDFileSystem.h" |
| 4180_1 | 9:f1aebfbe7e78 | 4 | #include "wave_player.h" |
| nm2299 | 12:0fe16c716237 | 5 | #include "uLCD_4DGL.h" |
| 4180_1 | 11:50e44c84411c | 6 | |
| nm2299 | 12:0fe16c716237 | 7 | BusOut myled(LED1,LED2,LED3,LED4); |
| nm2299 | 12:0fe16c716237 | 8 | Serial pc(USBTX, USBRX); |
| nm2299 | 12:0fe16c716237 | 9 | Serial dev(p28,p27); |
| nm2299 | 12:0fe16c716237 | 10 | SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card |
| nm2299 | 12:0fe16c716237 | 11 | uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; |
| 4180_1 | 10:21943bd35341 | 12 | AnalogOut DACout(p18); |
| nm2299 | 12:0fe16c716237 | 13 | PwmOut red(p21); |
| nm2299 | 12:0fe16c716237 | 14 | PwmOut green(p22); |
| nm2299 | 12:0fe16c716237 | 15 | PwmOut blue(p23); |
| nm2299 | 12:0fe16c716237 | 16 | wave_player waver(&DACout); |
| nm2299 | 12:0fe16c716237 | 17 | DigitalOut led1(LED1); |
| nm2299 | 12:0fe16c716237 | 18 | DigitalOut led4(LED4); |
| nm2299 | 12:0fe16c716237 | 19 | |
| nm2299 | 12:0fe16c716237 | 20 | Mutex mutex; |
| samux | 0:0d68fe822228 | 21 | |
| 4180_1 | 10:21943bd35341 | 22 | inline float random_number() |
| 4180_1 | 10:21943bd35341 | 23 | { |
| 4180_1 | 10:21943bd35341 | 24 | return (rand()/(float(RAND_MAX))); |
| 4180_1 | 10:21943bd35341 | 25 | } |
| nm2299 | 12:0fe16c716237 | 26 | |
| nm2299 | 12:0fe16c716237 | 27 | void rgb(void const *args) { |
| 4180_1 | 10:21943bd35341 | 28 | while(1) { |
| nm2299 | 12:0fe16c716237 | 29 | for (int i = 0; i < 10; i++) { |
| nm2299 | 12:0fe16c716237 | 30 | red = i / 10.0; |
| nm2299 | 12:0fe16c716237 | 31 | green = ((i + 3) % 10) / 10.0; |
| nm2299 | 12:0fe16c716237 | 32 | blue = ((i + 6) % 10) / 10.0; |
| nm2299 | 12:0fe16c716237 | 33 | Thread::wait(100); |
| nm2299 | 12:0fe16c716237 | 34 | |
| 4180_1 | 10:21943bd35341 | 35 | } |
| nm2299 | 12:0fe16c716237 | 36 | |
| nm2299 | 12:0fe16c716237 | 37 | for (int i = 9; i >= 0; i--) { |
| nm2299 | 12:0fe16c716237 | 38 | red = i / 10.0; |
| nm2299 | 12:0fe16c716237 | 39 | green = ((i + 3) % 10) / 10.0; |
| nm2299 | 12:0fe16c716237 | 40 | blue = ((i + 6) % 10) / 10.0; |
| nm2299 | 12:0fe16c716237 | 41 | Thread::wait(100); |
| 4180_1 | 10:21943bd35341 | 42 | } |
| nm2299 | 12:0fe16c716237 | 43 | |
| 4180_1 | 10:21943bd35341 | 44 | } |
| 4180_1 | 10:21943bd35341 | 45 | } |
| nm2299 | 12:0fe16c716237 | 46 | |
| nm2299 | 12:0fe16c716237 | 47 | void lcdStart(void const *args) { |
| nm2299 | 12:0fe16c716237 | 48 | while(1) { |
| nm2299 | 12:0fe16c716237 | 49 | for (int i = 59; i >= 0; i--) { |
| nm2299 | 12:0fe16c716237 | 50 | mutex.lock(); |
| nm2299 | 12:0fe16c716237 | 51 | uLCD.locate(2,2); |
| nm2299 | 12:0fe16c716237 | 52 | uLCD.printf("%2d", i); |
| nm2299 | 12:0fe16c716237 | 53 | mutex.unlock(); |
| nm2299 | 12:0fe16c716237 | 54 | Thread::wait(100); |
| nm2299 | 12:0fe16c716237 | 55 | } |
| nm2299 | 12:0fe16c716237 | 56 | } |
| nm2299 | 12:0fe16c716237 | 57 | } |
| nm2299 | 12:0fe16c716237 | 58 | |
| nm2299 | 12:0fe16c716237 | 59 | void lcdEnd(void const *args) { |
| 4180_1 | 10:21943bd35341 | 60 | while(1) { |
| nm2299 | 12:0fe16c716237 | 61 | for (int i = 0; i <= 59; i++) { |
| nm2299 | 12:0fe16c716237 | 62 | mutex.lock(); |
| nm2299 | 12:0fe16c716237 | 63 | uLCD.locate(0,0); |
| nm2299 | 12:0fe16c716237 | 64 | uLCD.printf("%2d", i); |
| nm2299 | 12:0fe16c716237 | 65 | mutex.unlock(); |
| nm2299 | 12:0fe16c716237 | 66 | Thread::wait(100); |
| 4180_1 | 10:21943bd35341 | 67 | } |
| 4180_1 | 10:21943bd35341 | 68 | } |
| 4180_1 | 10:21943bd35341 | 69 | } |
| nm2299 | 12:0fe16c716237 | 70 | |
| nm2299 | 12:0fe16c716237 | 71 | void dev_recv() |
| 4180_1 | 10:21943bd35341 | 72 | { |
| nm2299 | 12:0fe16c716237 | 73 | led1 = !led1; |
| nm2299 | 12:0fe16c716237 | 74 | while(dev.readable()) { |
| nm2299 | 12:0fe16c716237 | 75 | mutex.lock(); |
| nm2299 | 12:0fe16c716237 | 76 | pc.putc(dev.getc()); |
| nm2299 | 12:0fe16c716237 | 77 | mutex.unlock(); |
| 4180_1 | 10:21943bd35341 | 78 | } |
| 4180_1 | 10:21943bd35341 | 79 | } |
| nm2299 | 12:0fe16c716237 | 80 | |
| nm2299 | 12:0fe16c716237 | 81 | void receive(void const *args) { |
| nm2299 | 12:0fe16c716237 | 82 | char bnum=0; |
| nm2299 | 12:0fe16c716237 | 83 | char bhit=0; |
| 4180_1 | 10:21943bd35341 | 84 | while(1) { |
| nm2299 | 12:0fe16c716237 | 85 | Thread::wait(20); |
| nm2299 | 12:0fe16c716237 | 86 | mutex.lock(); |
| nm2299 | 12:0fe16c716237 | 87 | if (dev.getc()=='!') { |
| nm2299 | 12:0fe16c716237 | 88 | if (dev.getc()=='B') { //button data packet |
| nm2299 | 12:0fe16c716237 | 89 | bnum = dev.getc(); //button number |
| nm2299 | 12:0fe16c716237 | 90 | bhit = dev.getc(); //1=hit, 0=release |
| nm2299 | 12:0fe16c716237 | 91 | if (dev.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK? |
| nm2299 | 12:0fe16c716237 | 92 | myled = bnum - '0'; //current button number will appear on LEDs |
| nm2299 | 12:0fe16c716237 | 93 | switch (bnum) { |
| nm2299 | 12:0fe16c716237 | 94 | case '1': //number button 1 |
| nm2299 | 12:0fe16c716237 | 95 | if (bhit=='1') { |
| nm2299 | 12:0fe16c716237 | 96 | //add hit code here |
| nm2299 | 12:0fe16c716237 | 97 | } else { |
| nm2299 | 12:0fe16c716237 | 98 | //add release code here |
| nm2299 | 12:0fe16c716237 | 99 | } |
| nm2299 | 12:0fe16c716237 | 100 | break; |
| nm2299 | 12:0fe16c716237 | 101 | case '2': //number button 2 |
| nm2299 | 12:0fe16c716237 | 102 | if (bhit=='1') { |
| nm2299 | 12:0fe16c716237 | 103 | //add hit code here |
| nm2299 | 12:0fe16c716237 | 104 | } else { |
| nm2299 | 12:0fe16c716237 | 105 | //add release code here |
| nm2299 | 12:0fe16c716237 | 106 | } |
| nm2299 | 12:0fe16c716237 | 107 | break; |
| nm2299 | 12:0fe16c716237 | 108 | case '3': //number button 3 |
| nm2299 | 12:0fe16c716237 | 109 | if (bhit=='1') { |
| nm2299 | 12:0fe16c716237 | 110 | //add hit code here |
| nm2299 | 12:0fe16c716237 | 111 | } else { |
| nm2299 | 12:0fe16c716237 | 112 | //add release code here |
| nm2299 | 12:0fe16c716237 | 113 | } |
| nm2299 | 12:0fe16c716237 | 114 | break; |
| nm2299 | 12:0fe16c716237 | 115 | case '4': //number button 4 |
| nm2299 | 12:0fe16c716237 | 116 | if (bhit=='1') { |
| nm2299 | 12:0fe16c716237 | 117 | //add hit code here |
| nm2299 | 12:0fe16c716237 | 118 | } else { |
| nm2299 | 12:0fe16c716237 | 119 | //add release code here |
| nm2299 | 12:0fe16c716237 | 120 | } |
| nm2299 | 12:0fe16c716237 | 121 | break; |
| nm2299 | 12:0fe16c716237 | 122 | case '5': //button 5 up arrow |
| nm2299 | 12:0fe16c716237 | 123 | if (bhit=='1') { |
| nm2299 | 12:0fe16c716237 | 124 | //add hit code here |
| nm2299 | 12:0fe16c716237 | 125 | } else { |
| nm2299 | 12:0fe16c716237 | 126 | //add release code here |
| nm2299 | 12:0fe16c716237 | 127 | } |
| nm2299 | 12:0fe16c716237 | 128 | break; |
| nm2299 | 12:0fe16c716237 | 129 | case '6': //button 6 down arrow |
| nm2299 | 12:0fe16c716237 | 130 | if (bhit=='1') { |
| nm2299 | 12:0fe16c716237 | 131 | //add hit code here |
| nm2299 | 12:0fe16c716237 | 132 | } else { |
| nm2299 | 12:0fe16c716237 | 133 | //add release code here |
| nm2299 | 12:0fe16c716237 | 134 | } |
| nm2299 | 12:0fe16c716237 | 135 | break; |
| nm2299 | 12:0fe16c716237 | 136 | case '7': //button 7 left arrow |
| nm2299 | 12:0fe16c716237 | 137 | if (bhit=='1') { |
| nm2299 | 12:0fe16c716237 | 138 | //add hit code here |
| nm2299 | 12:0fe16c716237 | 139 | } else { |
| nm2299 | 12:0fe16c716237 | 140 | //add release code here |
| nm2299 | 12:0fe16c716237 | 141 | } |
| nm2299 | 12:0fe16c716237 | 142 | break; |
| nm2299 | 12:0fe16c716237 | 143 | case '8': //button 8 right arrow |
| nm2299 | 12:0fe16c716237 | 144 | if (bhit=='1') { |
| nm2299 | 12:0fe16c716237 | 145 | //add hit code here |
| nm2299 | 12:0fe16c716237 | 146 | } else { |
| nm2299 | 12:0fe16c716237 | 147 | //add release code here |
| nm2299 | 12:0fe16c716237 | 148 | } |
| nm2299 | 12:0fe16c716237 | 149 | break; |
| nm2299 | 12:0fe16c716237 | 150 | default: |
| nm2299 | 12:0fe16c716237 | 151 | break; |
| nm2299 | 12:0fe16c716237 | 152 | } |
| nm2299 | 12:0fe16c716237 | 153 | } |
| 4180_1 | 10:21943bd35341 | 154 | } |
| 4180_1 | 10:21943bd35341 | 155 | } |
| nm2299 | 12:0fe16c716237 | 156 | mutex.unlock(); |
| 4180_1 | 10:21943bd35341 | 157 | } |
| 4180_1 | 10:21943bd35341 | 158 | } |
| nm2299 | 12:0fe16c716237 | 159 | |
| nm2299 | 12:0fe16c716237 | 160 | void pc_recv() |
| 4180_1 | 10:21943bd35341 | 161 | { |
| nm2299 | 12:0fe16c716237 | 162 | led4 = !led4; |
| nm2299 | 12:0fe16c716237 | 163 | while(pc.readable()) { |
| nm2299 | 12:0fe16c716237 | 164 | mutex.lock(); |
| nm2299 | 12:0fe16c716237 | 165 | dev.putc(pc.getc()); |
| nm2299 | 12:0fe16c716237 | 166 | mutex.unlock(); |
| 4180_1 | 10:21943bd35341 | 167 | } |
| 4180_1 | 10:21943bd35341 | 168 | } |
| 4180_1 | 10:21943bd35341 | 169 | |
| 4180_1 | 10:21943bd35341 | 170 | |
| nm2299 | 12:0fe16c716237 | 171 | int main() { |
| nm2299 | 12:0fe16c716237 | 172 | |
| nm2299 | 12:0fe16c716237 | 173 | Thread thread1(rgb); |
| nm2299 | 12:0fe16c716237 | 174 | Thread thread2(lcdStart); |
| nm2299 | 12:0fe16c716237 | 175 | Thread thread3(lcdEnd); |
| nm2299 | 12:0fe16c716237 | 176 | Thread thread4(receive); |
| nm2299 | 12:0fe16c716237 | 177 | |
| 4180_1 | 10:21943bd35341 | 178 | while(1) { |
| nm2299 | 12:0fe16c716237 | 179 | FILE *wave_file; |
| nm2299 | 12:0fe16c716237 | 180 | wave_file = fopen("/sd/Music.wav", "r"); |
| nm2299 | 12:0fe16c716237 | 181 | waver.play(wave_file); |
| nm2299 | 12:0fe16c716237 | 182 | fclose(wave_file); |
| 4180_1 | 10:21943bd35341 | 183 | } |
| 4180_1 | 10:21943bd35341 | 184 | } |