Nicholas Meyer / Mbed 2 deprecated RTOS2

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE RTOS FATFileSystem

Committer:
nm2299
Date:
Tue Oct 12 03:45:20 2021 +0000
Revision:
12:0fe16c716237
Parent:
11:50e44c84411c
Jank

Who changed what in which revision?

UserRevisionLine numberNew 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 }