4180 lab 5
Dependencies: mbed 4DGL-uLCD-SE RPCInterface
main.cpp@3:94d9434576af, 2020-02-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |