ece4180_team / Mbed 2 deprecated lab3part5_Bluetooth

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

Committer:
mus3
Date:
Thu Oct 13 18:59:26 2022 +0000
Revision:
2:3de25ad12458
Parent:
1:60087ee45d3b
lab3part5 bluetooth

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mus3 0:f531454e4dce 1 #include "uLCD_4DGL.h"
mus3 0:f531454e4dce 2 #include "mbed.h"
mus3 0:f531454e4dce 3 #include "rtos.h"
mus3 0:f531454e4dce 4 #include "SongPlayer.h"
mus3 0:f531454e4dce 5
mus3 0:f531454e4dce 6 uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin;
mus3 0:f531454e4dce 7 AnalogOut DACout(p18);
mus3 0:f531454e4dce 8 DigitalOut myled(LED1);
mus3 0:f531454e4dce 9 PwmOut RGBLED_r(p23);
mus3 0:f531454e4dce 10 PwmOut RGBLED_g(p24);
mus3 0:f531454e4dce 11 PwmOut RGBLED_b(p25);
mus3 2:3de25ad12458 12 Serial blue(p13,p14);
mus3 0:f531454e4dce 13
mus3 0:f531454e4dce 14 float note[18]= {1568.0,1396.9,1244.5,1244.5,1396.9,1568.0,1568.0,1568.0,1396.9,
mus3 0:f531454e4dce 15 1244.5,1396.9,1568.0,1396.9,1244.5,1174.7,1244.5,1244.5, 0.0
mus3 0:f531454e4dce 16 };
mus3 0:f531454e4dce 17 float duration[18]= {0.48,0.24,0.72,0.48,0.24,0.48,0.24,0.24,0.24,
mus3 0:f531454e4dce 18 0.24,0.24,0.24,0.24,0.48,0.24,0.48,0.48, 0.0
mus3 0:f531454e4dce 19 };
mus3 0:f531454e4dce 20
mus3 0:f531454e4dce 21 // mutex to make the lcd lib thread safe
mus3 0:f531454e4dce 22 Mutex lcd_mutex;
mus3 0:f531454e4dce 23
mus3 0:f531454e4dce 24 // global variables
mus3 0:f531454e4dce 25 int i = 0;
mus3 0:f531454e4dce 26 int ix = 0;
mus3 2:3de25ad12458 27 int iy = 90;
mus3 2:3de25ad12458 28 char color = 'g';
mus3 2:3de25ad12458 29 int flight_dir = 8;
mus3 0:f531454e4dce 30
mus3 0:f531454e4dce 31 void drawairplane(int x, int y) {
mus3 0:f531454e4dce 32 uLCD.filled_rectangle(x, y+7, x+27, y+13, WHITE);
mus3 0:f531454e4dce 33 uLCD.filled_rectangle(x, y, x+4, y+6, BLUE);
mus3 0:f531454e4dce 34 uLCD.filled_rectangle(x, y+14, x+4, y+20, BLUE);
mus3 0:f531454e4dce 35 uLCD.filled_rectangle(x+16, y-6, x+20, y+6, BLUE);
mus3 0:f531454e4dce 36 uLCD.filled_rectangle(x+16, y+14, x+20, y+26, BLUE);
mus3 0:f531454e4dce 37 uLCD.filled_rectangle(x+20, y+9, x+27, y+11, BLUE);
mus3 0:f531454e4dce 38 uLCD.filled_rectangle(x+15, y+9, x+17, y+11, BLUE);
mus3 0:f531454e4dce 39 uLCD.filled_rectangle(x+10, y+9, x+12, y+11, BLUE);
mus3 0:f531454e4dce 40 uLCD.filled_rectangle(x+5, y+9, x+7, y+11, BLUE);
mus3 0:f531454e4dce 41 }
mus3 0:f531454e4dce 42
mus3 0:f531454e4dce 43 // Thread 1
mus3 0:f531454e4dce 44 // RGB LED
mus3 0:f531454e4dce 45 void thread1(void const *args)
mus3 0:f531454e4dce 46 {
mus3 0:f531454e4dce 47 while(true) { // thread loop
mus3 2:3de25ad12458 48 /*
mus3 0:f531454e4dce 49 if (i < 10) {
mus3 0:f531454e4dce 50 RGBLED_r = 0.0;
mus3 0:f531454e4dce 51 RGBLED_g = (float) i / 10;
mus3 0:f531454e4dce 52 RGBLED_b = 0.0;
mus3 0:f531454e4dce 53 } else if (10 <= i && i < 20) {
mus3 0:f531454e4dce 54 RGBLED_r = 0.0;
mus3 0:f531454e4dce 55 RGBLED_g = (float) (20 - i) / 10;
mus3 0:f531454e4dce 56 RGBLED_b = 0.0;
mus3 0:f531454e4dce 57 } else if (20 <= i && i < 30) {
mus3 0:f531454e4dce 58 RGBLED_r = (float) (i - 20) / 10;
mus3 0:f531454e4dce 59 RGBLED_g = (float) (i - 20) / 10;
mus3 0:f531454e4dce 60 RGBLED_b = (float) (i - 20) / 10;
mus3 0:f531454e4dce 61 } else if (30 <= i && i < 40) {
mus3 0:f531454e4dce 62 RGBLED_r = (float) (40 - i) / 10;
mus3 0:f531454e4dce 63 RGBLED_g = (float) (40 - i) / 10;
mus3 0:f531454e4dce 64 RGBLED_b = (float) (40 - i) / 10;
mus3 0:f531454e4dce 65 } else {
mus3 0:f531454e4dce 66 i = -1;
mus3 0:f531454e4dce 67 }
mus3 0:f531454e4dce 68 i++;
mus3 2:3de25ad12458 69 */
mus3 2:3de25ad12458 70 if (color == 'r') {
mus3 2:3de25ad12458 71 RGBLED_r = 0.8;
mus3 2:3de25ad12458 72 RGBLED_g = 0.0;
mus3 2:3de25ad12458 73 RGBLED_b = 0.0;
mus3 2:3de25ad12458 74 } else if (color == 'g') {
mus3 2:3de25ad12458 75 RGBLED_r = 0.0;
mus3 2:3de25ad12458 76 RGBLED_g = 0.8;
mus3 2:3de25ad12458 77 RGBLED_b = 0.0;
mus3 2:3de25ad12458 78 } else if (color == 'b') {
mus3 2:3de25ad12458 79 RGBLED_r = 0.0;
mus3 2:3de25ad12458 80 RGBLED_g = 0.0;
mus3 2:3de25ad12458 81 RGBLED_b = 0.8;
mus3 2:3de25ad12458 82 } else {
mus3 2:3de25ad12458 83 RGBLED_r = 0.0;
mus3 2:3de25ad12458 84 RGBLED_g = 0.8;
mus3 2:3de25ad12458 85 RGBLED_b = 0.0;
mus3 2:3de25ad12458 86 }
mus3 0:f531454e4dce 87 Thread::wait(200); // wait 0.2s
mus3 0:f531454e4dce 88 }
mus3 0:f531454e4dce 89 }
mus3 0:f531454e4dce 90
mus3 0:f531454e4dce 91
mus3 0:f531454e4dce 92 void thread2(void const *args)
mus3 0:f531454e4dce 93 {
mus3 1:60087ee45d3b 94 while (true) {
mus3 1:60087ee45d3b 95 SongPlayer mySpeaker(p21);
mus3 1:60087ee45d3b 96 mySpeaker.PlaySong(note,duration);
mus3 1:60087ee45d3b 97 Thread::wait(6000); // wait 6s
mus3 1:60087ee45d3b 98 }
mus3 0:f531454e4dce 99 }
mus3 0:f531454e4dce 100
mus3 0:f531454e4dce 101
mus3 0:f531454e4dce 102 void thread3(void const *args)
mus3 0:f531454e4dce 103 {
mus3 0:f531454e4dce 104 while (true) {
mus3 0:f531454e4dce 105 time_t seconds = time(NULL);
mus3 0:f531454e4dce 106 lcd_mutex.lock();
mus3 0:f531454e4dce 107 uLCD.filled_rectangle(0, 0, 127, 63, BLACK);
mus3 0:f531454e4dce 108 char buffer[32];
mus3 0:f531454e4dce 109 strftime(buffer, 32, "%I:%M:%S %p\n", localtime(&seconds));
mus3 0:f531454e4dce 110 uLCD.locate(0,0);
mus3 0:f531454e4dce 111 uLCD.printf(buffer);
mus3 0:f531454e4dce 112 lcd_mutex.unlock();
mus3 0:f531454e4dce 113 Thread::wait(1000); // wait 1s
mus3 0:f531454e4dce 114 }
mus3 0:f531454e4dce 115 }
mus3 0:f531454e4dce 116
mus3 0:f531454e4dce 117 void thread4(void const *args)
mus3 0:f531454e4dce 118 {
mus3 0:f531454e4dce 119 while (true) {
mus3 0:f531454e4dce 120 lcd_mutex.lock();
mus3 0:f531454e4dce 121 uLCD.filled_rectangle(0, 63, 127, 127, BLACK);
mus3 2:3de25ad12458 122 drawairplane(ix, iy);
mus3 0:f531454e4dce 123 lcd_mutex.unlock();
mus3 2:3de25ad12458 124 if (flight_dir == 8) {
mus3 2:3de25ad12458 125 ix += 1;
mus3 2:3de25ad12458 126 } else if (flight_dir == 7) {
mus3 2:3de25ad12458 127 ix -= 1;
mus3 2:3de25ad12458 128 } else if (flight_dir == 6) {
mus3 2:3de25ad12458 129 iy += 1;
mus3 2:3de25ad12458 130 } else if (flight_dir == 5) {
mus3 2:3de25ad12458 131 iy -= 1;
mus3 2:3de25ad12458 132 }
mus3 0:f531454e4dce 133 if (ix > 100) {
mus3 0:f531454e4dce 134 ix = 0;
mus3 2:3de25ad12458 135 } else if (ix < 0) {
mus3 2:3de25ad12458 136 ix = 99;
mus3 2:3de25ad12458 137 } else if (iy > 113) {
mus3 2:3de25ad12458 138 iy = 64;
mus3 2:3de25ad12458 139 } else if (iy < 64) {
mus3 2:3de25ad12458 140 iy = 113;
mus3 0:f531454e4dce 141 }
mus3 0:f531454e4dce 142 Thread::wait(500); // wait 0.75s
mus3 0:f531454e4dce 143 }
mus3 0:f531454e4dce 144 }
mus3 0:f531454e4dce 145
mus3 0:f531454e4dce 146
mus3 0:f531454e4dce 147 int main() {
mus3 0:f531454e4dce 148 Thread t1(thread1); //start thread1
mus3 0:f531454e4dce 149 Thread t2(thread2); //start thread2
mus3 0:f531454e4dce 150 Thread t3(thread3); //start thread3
mus3 0:f531454e4dce 151 Thread t4(thread4); //start thread3
mus3 0:f531454e4dce 152 set_time(1256729737);
mus3 0:f531454e4dce 153 while(1) {
mus3 2:3de25ad12458 154 char bnum=0;
mus3 2:3de25ad12458 155 char bhit=0;
mus3 2:3de25ad12458 156 if (!blue.readable()) {
mus3 2:3de25ad12458 157 continue;
mus3 2:3de25ad12458 158 }
mus3 2:3de25ad12458 159 if (blue.getc()=='!') {
mus3 2:3de25ad12458 160 if (blue.getc()=='B') { //button data packet
mus3 2:3de25ad12458 161 bnum = blue.getc(); //button number
mus3 2:3de25ad12458 162 bhit = blue.getc(); //1=hit, 0=release
mus3 2:3de25ad12458 163 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
mus3 2:3de25ad12458 164 myled = bnum - '0'; //current button number will appear on LEDs
mus3 2:3de25ad12458 165 switch (bnum) {
mus3 2:3de25ad12458 166 case '1': //number button 1
mus3 2:3de25ad12458 167 if (bhit=='1') {
mus3 2:3de25ad12458 168 //add hit code here
mus3 2:3de25ad12458 169 color = 'r';
mus3 2:3de25ad12458 170 } //else {
mus3 2:3de25ad12458 171 //add release code here
mus3 2:3de25ad12458 172 //}
mus3 2:3de25ad12458 173 break;
mus3 2:3de25ad12458 174 case '2': //number button 2
mus3 2:3de25ad12458 175 if (bhit=='1') {
mus3 2:3de25ad12458 176 //add hit code here
mus3 2:3de25ad12458 177 color = 'g';
mus3 2:3de25ad12458 178 } //else {
mus3 2:3de25ad12458 179 //add release code here
mus3 2:3de25ad12458 180 //}
mus3 2:3de25ad12458 181 break;
mus3 2:3de25ad12458 182 case '3': //number button 3
mus3 2:3de25ad12458 183 if (bhit=='1') {
mus3 2:3de25ad12458 184 //add hit code here
mus3 2:3de25ad12458 185 color = 'b';
mus3 2:3de25ad12458 186 } //else {
mus3 2:3de25ad12458 187 //add release code here
mus3 2:3de25ad12458 188 //}
mus3 2:3de25ad12458 189 break;
mus3 2:3de25ad12458 190 case '4': //number button 4
mus3 2:3de25ad12458 191 if (bhit=='1') {
mus3 2:3de25ad12458 192 //add hit code here
mus3 2:3de25ad12458 193 } //else {
mus3 2:3de25ad12458 194 //add release code here
mus3 2:3de25ad12458 195 //}
mus3 2:3de25ad12458 196 break;
mus3 2:3de25ad12458 197 case '5': //button 5 up arrow
mus3 2:3de25ad12458 198 if (bhit=='1') {
mus3 2:3de25ad12458 199 //add hit code here
mus3 2:3de25ad12458 200 flight_dir = 5;
mus3 2:3de25ad12458 201 } //else {
mus3 2:3de25ad12458 202 //add release code here
mus3 2:3de25ad12458 203 //}
mus3 2:3de25ad12458 204 break;
mus3 2:3de25ad12458 205 case '6': //button 6 down arrow
mus3 2:3de25ad12458 206 if (bhit=='1') {
mus3 2:3de25ad12458 207 //add hit code here
mus3 2:3de25ad12458 208 flight_dir = 6;
mus3 2:3de25ad12458 209 } //else {
mus3 2:3de25ad12458 210 //add release code here
mus3 2:3de25ad12458 211 //}
mus3 2:3de25ad12458 212 break;
mus3 2:3de25ad12458 213 case '7': //button 7 left arrow
mus3 2:3de25ad12458 214 if (bhit=='1') {
mus3 2:3de25ad12458 215 //add hit code here
mus3 2:3de25ad12458 216 flight_dir = 7;
mus3 2:3de25ad12458 217 } //else {
mus3 2:3de25ad12458 218 //add release code here
mus3 2:3de25ad12458 219 //}
mus3 2:3de25ad12458 220 break;
mus3 2:3de25ad12458 221 case '8': //button 8 right arrow
mus3 2:3de25ad12458 222 if (bhit=='1') {
mus3 2:3de25ad12458 223 //add hit code here
mus3 2:3de25ad12458 224 flight_dir = 8;
mus3 2:3de25ad12458 225 } //else {
mus3 2:3de25ad12458 226 //add release code here
mus3 2:3de25ad12458 227 //}
mus3 2:3de25ad12458 228 break;
mus3 2:3de25ad12458 229 default:
mus3 2:3de25ad12458 230 break;
mus3 2:3de25ad12458 231 }
mus3 2:3de25ad12458 232 }
mus3 2:3de25ad12458 233 }
mus3 2:3de25ad12458 234 }
mus3 0:f531454e4dce 235 }
mus3 0:f531454e4dce 236 Thread::wait(200); // wait 0.2s
mus3 0:f531454e4dce 237 }