4180 lab 5
Dependencies: mbed 4DGL-uLCD-SE RPCInterface
Diff: main.cpp
- Revision:
- 3:94d9434576af
- Parent:
- 2:4845e2dae429
- Child:
- 4:1ef667567942
--- a/main.cpp Wed Feb 19 18:48:09 2020 +0000 +++ b/main.cpp Mon Feb 24 17:01:46 2020 +0000 @@ -1,35 +1,51 @@ #include "mbed.h" #include "rtos.h" +#include "uLCD_4DGL.h" +#include "SDFileSystem.h" +#include "wave_player.h" + //#include "part2.h" //#include "part3.h" #include "part4_led.h" //#include "lidar_theremin.h" Serial pc(USBTX, USBRX); -RawSerial dev(p13,p14); +RawSerial dev(p9,p10); DigitalOut myled1(LED1); +DigitalOut myled2(LED2); +DigitalOut myled3(LED3); +DigitalOut myled4(LED4); RGBLed led = RGBLed(p21, p22, p23); Color colors[] = { _red, _pink, _orange, _yellow }; +uLCD_4DGL lcd(p28,p27,p30); + Thread led_thread; +Thread lcd_thread1; +Thread lcd_thread2; +Thread audio_thread; -void changeColor(char c) { - if (c == 'r') { - colors[0] = _red; - colors[1] = _pink; - colors[2] = _orange; - colors[3] = _yellow; - } else if (c == 'b') { - colors[0] = _teal; - colors[1] = _light_blue; - colors[2] = _blue; - colors[3] = _purple; - } else if (c == 'g') { - colors[0] = _yellow; - colors[1] = _light_green; - colors[2] = _green; - colors[3] = _teal; +void changeColor() { + while (dev.readable()) { + char c = dev.getc(); + + if (c == 'r') { + colors[0] = _red; + colors[1] = _pink; + colors[2] = _orange; + colors[3] = _yellow; + } else if (c == 'b') { + colors[0] = _teal; + colors[1] = _light_blue; + colors[2] = _blue; + colors[3] = _purple; + } else if (c == 'g') { + colors[0] = _yellow; + colors[1] = _light_green; + colors[2] = _green; + colors[3] = _teal; + } } } @@ -45,22 +61,93 @@ } } +Mutex lcd_mutex; +//Semaphore sem(1); + + +void lcd1_handler() { + int i = 0; + while (1) { + lcd_mutex.lock(); +// sem.wait(); + lcd.locate(0, 0); + lcd.printf("Counter: %d", i); + lcd_mutex.unlock(); +// sem.release(); + + i++; + Thread::wait(1000); + } +} + +void lcd2_handler() { + int i,k, offset; + double s,a; + k = 1; + offset = 50; + lcd_mutex.lock(); +// sem.wait(); + lcd.rectangle(89,0,127,17,1); + lcd_mutex.unlock(); +// sem.release(); + + while(1) { // thread loop +// v = 1; + lcd_mutex.lock(); +// sem.wait(); + for (i=0; i<127; i++) { + s = 8 * sin((long double)(i+k) /5); // pixel to print + a = 8 * sin((long double)(i+k-1) /5); // old pixel to erase + lcd.pixel(i,offset + (int)a, BLACK); // erase pixel + lcd.pixel(i,offset + (int)s, WHITE); // print pixel + } + lcd_mutex.unlock(); +// sem.release(); + k++; + Thread::wait(100); // value of pot1 / 100 + } +} + +SDFileSystem sd(p5, p6, p7, p8, "sd"); +AnalogOut DACout(p18); +wave_player waver(&DACout); + +void audio_handler() { + FILE *wave_file; + myled2 = !myled2; +// printf("\n\n\nHello, wave world!\n"); +// myled4 = !myled4; + while (1) { + myled4 = !myled4; + wave_file=fopen("/sd/sample.wav","r"); + waver.play(wave_file); + fclose(wave_file); + Thread::wait(1000); + } +} + int main() { // run_part2(); // run_part2_EC(); // run_lidar_theremin(); // run_part3(); + + pc.baud(9600); + dev.baud(9600); led_thread.start(led_handler); + lcd.cls(); + lcd_thread1.start(lcd1_handler); + lcd_thread2.start(lcd2_handler); + myled2 = !myled2; + audio_thread.start(audio_handler); + myled3 = !myled3; + + dev.attach(&changeColor, Serial::RxIrq); while (1) { myled1 = !myled1; - - if (dev.readable()) { -// changeColor(dev.getc()); - pc.putc(dev.getc()); - } Thread::wait(500); }