4180 lab 5

Dependencies:   mbed 4DGL-uLCD-SE RPCInterface

Committer:
emilywilson
Date:
Mon Feb 24 17:01:46 2020 +0000
Revision:
3:94d9434576af
Parent:
2:4845e2dae429
Child:
4:1ef667567942
part3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:bdbd3d6fc5d5 1 #include "mbed.h"
emilywilson 2:4845e2dae429 2 #include "rtos.h"
emilywilson 3:94d9434576af 3 #include "uLCD_4DGL.h"
emilywilson 3:94d9434576af 4 #include "SDFileSystem.h"
emilywilson 3:94d9434576af 5 #include "wave_player.h"
emilywilson 3:94d9434576af 6
emilywilson 2:4845e2dae429 7 //#include "part2.h"
emilywilson 2:4845e2dae429 8 //#include "part3.h"
emilywilson 2:4845e2dae429 9 #include "part4_led.h"
emilywilson 2:4845e2dae429 10 //#include "lidar_theremin.h"
emilywilson 2:4845e2dae429 11
emilywilson 2:4845e2dae429 12 Serial pc(USBTX, USBRX);
emilywilson 3:94d9434576af 13 RawSerial dev(p9,p10);
emilywilson 2:4845e2dae429 14
emilywilson 2:4845e2dae429 15 DigitalOut myled1(LED1);
emilywilson 3:94d9434576af 16 DigitalOut myled2(LED2);
emilywilson 3:94d9434576af 17 DigitalOut myled3(LED3);
emilywilson 3:94d9434576af 18 DigitalOut myled4(LED4);
emilywilson 2:4845e2dae429 19 RGBLed led = RGBLed(p21, p22, p23);
emilywilson 2:4845e2dae429 20 Color colors[] = { _red, _pink, _orange, _yellow };
emilywilson 2:4845e2dae429 21
emilywilson 3:94d9434576af 22 uLCD_4DGL lcd(p28,p27,p30);
emilywilson 3:94d9434576af 23
emilywilson 2:4845e2dae429 24 Thread led_thread;
emilywilson 3:94d9434576af 25 Thread lcd_thread1;
emilywilson 3:94d9434576af 26 Thread lcd_thread2;
emilywilson 3:94d9434576af 27 Thread audio_thread;
emilywilson 2:4845e2dae429 28
emilywilson 3:94d9434576af 29 void changeColor() {
emilywilson 3:94d9434576af 30 while (dev.readable()) {
emilywilson 3:94d9434576af 31 char c = dev.getc();
emilywilson 3:94d9434576af 32
emilywilson 3:94d9434576af 33 if (c == 'r') {
emilywilson 3:94d9434576af 34 colors[0] = _red;
emilywilson 3:94d9434576af 35 colors[1] = _pink;
emilywilson 3:94d9434576af 36 colors[2] = _orange;
emilywilson 3:94d9434576af 37 colors[3] = _yellow;
emilywilson 3:94d9434576af 38 } else if (c == 'b') {
emilywilson 3:94d9434576af 39 colors[0] = _teal;
emilywilson 3:94d9434576af 40 colors[1] = _light_blue;
emilywilson 3:94d9434576af 41 colors[2] = _blue;
emilywilson 3:94d9434576af 42 colors[3] = _purple;
emilywilson 3:94d9434576af 43 } else if (c == 'g') {
emilywilson 3:94d9434576af 44 colors[0] = _yellow;
emilywilson 3:94d9434576af 45 colors[1] = _light_green;
emilywilson 3:94d9434576af 46 colors[2] = _green;
emilywilson 3:94d9434576af 47 colors[3] = _teal;
emilywilson 3:94d9434576af 48 }
emilywilson 2:4845e2dae429 49 }
emilywilson 2:4845e2dae429 50 }
emilywilson 2:4845e2dae429 51
emilywilson 2:4845e2dae429 52 void led_handler() {
emilywilson 2:4845e2dae429 53 Color c = colors[0];
emilywilson 2:4845e2dae429 54 int i = 0;
emilywilson 2:4845e2dae429 55 while (1) {
emilywilson 2:4845e2dae429 56 led.write(c.red, c.green, c.blue);
emilywilson 2:4845e2dae429 57 i = (i + 1) % 4;
emilywilson 2:4845e2dae429 58 c = colors[i];
emilywilson 2:4845e2dae429 59
emilywilson 2:4845e2dae429 60 Thread::wait(500);
emilywilson 2:4845e2dae429 61 }
emilywilson 2:4845e2dae429 62 }
emilywilson 2:4845e2dae429 63
emilywilson 3:94d9434576af 64 Mutex lcd_mutex;
emilywilson 3:94d9434576af 65 //Semaphore sem(1);
emilywilson 3:94d9434576af 66
emilywilson 3:94d9434576af 67
emilywilson 3:94d9434576af 68 void lcd1_handler() {
emilywilson 3:94d9434576af 69 int i = 0;
emilywilson 3:94d9434576af 70 while (1) {
emilywilson 3:94d9434576af 71 lcd_mutex.lock();
emilywilson 3:94d9434576af 72 // sem.wait();
emilywilson 3:94d9434576af 73 lcd.locate(0, 0);
emilywilson 3:94d9434576af 74 lcd.printf("Counter: %d", i);
emilywilson 3:94d9434576af 75 lcd_mutex.unlock();
emilywilson 3:94d9434576af 76 // sem.release();
emilywilson 3:94d9434576af 77
emilywilson 3:94d9434576af 78 i++;
emilywilson 3:94d9434576af 79 Thread::wait(1000);
emilywilson 3:94d9434576af 80 }
emilywilson 3:94d9434576af 81 }
emilywilson 3:94d9434576af 82
emilywilson 3:94d9434576af 83 void lcd2_handler() {
emilywilson 3:94d9434576af 84 int i,k, offset;
emilywilson 3:94d9434576af 85 double s,a;
emilywilson 3:94d9434576af 86 k = 1;
emilywilson 3:94d9434576af 87 offset = 50;
emilywilson 3:94d9434576af 88 lcd_mutex.lock();
emilywilson 3:94d9434576af 89 // sem.wait();
emilywilson 3:94d9434576af 90 lcd.rectangle(89,0,127,17,1);
emilywilson 3:94d9434576af 91 lcd_mutex.unlock();
emilywilson 3:94d9434576af 92 // sem.release();
emilywilson 3:94d9434576af 93
emilywilson 3:94d9434576af 94 while(1) { // thread loop
emilywilson 3:94d9434576af 95 // v = 1;
emilywilson 3:94d9434576af 96 lcd_mutex.lock();
emilywilson 3:94d9434576af 97 // sem.wait();
emilywilson 3:94d9434576af 98 for (i=0; i<127; i++) {
emilywilson 3:94d9434576af 99 s = 8 * sin((long double)(i+k) /5); // pixel to print
emilywilson 3:94d9434576af 100 a = 8 * sin((long double)(i+k-1) /5); // old pixel to erase
emilywilson 3:94d9434576af 101 lcd.pixel(i,offset + (int)a, BLACK); // erase pixel
emilywilson 3:94d9434576af 102 lcd.pixel(i,offset + (int)s, WHITE); // print pixel
emilywilson 3:94d9434576af 103 }
emilywilson 3:94d9434576af 104 lcd_mutex.unlock();
emilywilson 3:94d9434576af 105 // sem.release();
emilywilson 3:94d9434576af 106 k++;
emilywilson 3:94d9434576af 107 Thread::wait(100); // value of pot1 / 100
emilywilson 3:94d9434576af 108 }
emilywilson 3:94d9434576af 109 }
emilywilson 3:94d9434576af 110
emilywilson 3:94d9434576af 111 SDFileSystem sd(p5, p6, p7, p8, "sd");
emilywilson 3:94d9434576af 112 AnalogOut DACout(p18);
emilywilson 3:94d9434576af 113 wave_player waver(&DACout);
emilywilson 3:94d9434576af 114
emilywilson 3:94d9434576af 115 void audio_handler() {
emilywilson 3:94d9434576af 116 FILE *wave_file;
emilywilson 3:94d9434576af 117 myled2 = !myled2;
emilywilson 3:94d9434576af 118 // printf("\n\n\nHello, wave world!\n");
emilywilson 3:94d9434576af 119 // myled4 = !myled4;
emilywilson 3:94d9434576af 120 while (1) {
emilywilson 3:94d9434576af 121 myled4 = !myled4;
emilywilson 3:94d9434576af 122 wave_file=fopen("/sd/sample.wav","r");
emilywilson 3:94d9434576af 123 waver.play(wave_file);
emilywilson 3:94d9434576af 124 fclose(wave_file);
emilywilson 3:94d9434576af 125 Thread::wait(1000);
emilywilson 3:94d9434576af 126 }
emilywilson 3:94d9434576af 127 }
emilywilson 3:94d9434576af 128
mbed_official 0:bdbd3d6fc5d5 129 int main() {
emilywilson 2:4845e2dae429 130 // run_part2();
emilywilson 2:4845e2dae429 131 // run_part2_EC();
emilywilson 2:4845e2dae429 132 // run_lidar_theremin();
mbed_official 0:bdbd3d6fc5d5 133
emilywilson 2:4845e2dae429 134 // run_part3();
emilywilson 3:94d9434576af 135
emilywilson 3:94d9434576af 136 pc.baud(9600);
emilywilson 3:94d9434576af 137 dev.baud(9600);
emilywilson 2:4845e2dae429 138
emilywilson 2:4845e2dae429 139 led_thread.start(led_handler);
emilywilson 3:94d9434576af 140 lcd.cls();
emilywilson 3:94d9434576af 141 lcd_thread1.start(lcd1_handler);
emilywilson 3:94d9434576af 142 lcd_thread2.start(lcd2_handler);
emilywilson 3:94d9434576af 143 myled2 = !myled2;
emilywilson 3:94d9434576af 144 audio_thread.start(audio_handler);
emilywilson 3:94d9434576af 145 myled3 = !myled3;
emilywilson 3:94d9434576af 146
emilywilson 3:94d9434576af 147 dev.attach(&changeColor, Serial::RxIrq);
emilywilson 2:4845e2dae429 148
emilywilson 2:4845e2dae429 149 while (1) {
emilywilson 2:4845e2dae429 150 myled1 = !myled1;
emilywilson 2:4845e2dae429 151
emilywilson 2:4845e2dae429 152 Thread::wait(500);
mbed_official 0:bdbd3d6fc5d5 153 }
emilywilson 2:4845e2dae429 154 }