ece 4180 lab 3

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem X_NUCLEO_53L0A1 HC_SR04_Ultrasonic_Library

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "uLCD_4DGL.h"
00004 #include "SDFileSystem.h"
00005 #include "wave_player.h"
00006 #include "nav_switch.h"
00007 
00008 //#include "part2.h"
00009 //#include "part3.h"
00010 #include "part4_led.h"
00011 //#include "lidar_theremin.h"
00012 
00013 Serial pc(USBTX, USBRX);
00014 //RawSerial dev(p9,p10);
00015 
00016 DigitalOut myled1(LED1);
00017 DigitalOut myled2(LED2);
00018 DigitalOut myled3(LED3);
00019 DigitalOut myled4(LED4);
00020 RGBLed led = RGBLed(p21, p22, p23);
00021 
00022 float p = 0.5;
00023 Color colors[] = { _red(1.0), _pink(1.0), _orange(1.0), _yellow(1.0) };
00024 
00025 uLCD_4DGL lcd(p28,p27,p30);
00026 
00027 Thread led_thread;
00028 Thread lcd_thread1;
00029 Thread lcd_thread2;
00030 Thread audio_thread;
00031 
00032 //void changeColor() {
00033 //    while (dev.readable()) {
00034 //        char c = dev.getc();
00035 //        
00036 //        if (c == 'r') {
00037 //            colors[0] = _red(p);
00038 //            colors[1] = _pink(p);
00039 //            colors[2] = _orange(p);
00040 //            colors[3] = _yellow(p);
00041 //        } else if (c == 'b') {
00042 //            colors[0] = _teal(p);
00043 //            colors[1] = _light_blue(p);
00044 //            colors[2] = _blue(p);
00045 //            colors[3] = _purple(p);
00046 //        } else if (c == 'g') {
00047 //            colors[0] = _yellow(p);
00048 //            colors[1] = _light_green(p);
00049 //            colors[2] = _green(p);
00050 //            colors[3] = _teal(p);
00051 //        }
00052 //    }
00053 //}
00054 
00055 void led_handler() {
00056     Color c = colors[0];
00057     int i = 0;
00058     while (1) {
00059         led.write(c.red*p, c.green*p, c.blue*p);
00060         i = (i + 1) % 4;
00061         c = colors[i];
00062         
00063         Thread::wait(500);
00064     }
00065 }
00066 
00067 //Mutex lcd_mutex;
00068 Semaphore sem(1);
00069 
00070 
00071 void lcd1_handler() {
00072     int i = 0;
00073     while (1) {
00074 //        lcd_mutex.lock();
00075         sem.wait();
00076         lcd.locate(0, 0);
00077         lcd.printf("Counter: %d", i);
00078 //        lcd_mutex.unlock();
00079         sem.release();
00080         
00081         i++;
00082         Thread::wait(1000);
00083     }
00084 }
00085 
00086 void lcd2_handler() {
00087     int i,k, offset;
00088     double s,a;
00089     k = 1;
00090     offset = 50;
00091 //    lcd_mutex.lock();
00092     sem.wait();
00093     lcd.rectangle(89,0,127,17,1);
00094 //    lcd_mutex.unlock();
00095     sem.release();
00096     
00097     while(1) {       // thread loop
00098 //        v = 1; 
00099 //        lcd_mutex.lock();
00100         sem.wait();
00101         for (i=0; i<127; i++) {
00102             s = 8 * sin((long double)(i+k) /5);   // pixel to print
00103             a = 8 * sin((long double)(i+k-1) /5); // old pixel to erase
00104             lcd.pixel(i,offset + (int)a, BLACK);           // erase pixel
00105             lcd.pixel(i,offset + (int)s, WHITE);           // print pixel
00106         }
00107 //        lcd_mutex.unlock();
00108         sem.release();
00109         k++;
00110         Thread::wait(100);   // value of pot1 / 100   
00111     }
00112 }
00113 
00114 SDFileSystem sd(p5, p6, p7, p8, "sd");
00115 AnalogOut DACout(p18);
00116 wave_player waver(&DACout);
00117 bool play_audio = true;
00118 
00119 void audio_handler() {
00120     FILE *wave_file;
00121     myled2 = !myled2;
00122 //    printf("\n\n\nHello, wave world!\n");
00123 //    myled4 = !myled4;
00124     while (play_audio) {
00125         myled4 = !myled4;
00126         wave_file=fopen("/sd/sample.wav","r");
00127         waver.play(wave_file);
00128         fclose(wave_file);
00129         Thread::wait(1000);
00130     }
00131 }
00132 
00133 Nav_Switch nav(p15, p12, p16, p11, p17);
00134 
00135 int main() {
00136 //    run_part2();
00137 //    run_part2_EC();
00138 //    run_lidar_theremin();
00139     
00140 //    run_part3();
00141 
00142     pc.baud(9600);
00143 //    dev.baud(9600);
00144     
00145     led_thread.start(led_handler);
00146     lcd.cls();
00147     lcd_thread1.start(lcd1_handler);
00148     lcd_thread2.start(lcd2_handler);
00149     audio_thread.start(audio_handler);
00150     
00151 //    dev.attach(&changeColor, Serial::RxIrq);
00152 
00153     while (1) {
00154         myled1 = !myled1;
00155         if (nav.fire()) {
00156             play_audio = !play_audio;
00157         } else if (nav.up() && p < 1.0f) {
00158             p += 0.1f;
00159         } else if (nav.down() && p > 0.0f) {
00160             p -= 0.1f;
00161         } else if (nav.left()) {
00162             colors[0] = _red(1.0);
00163             colors[1] = _pink(1.0);
00164             colors[2] = _orange(1.0);
00165             colors[3] = _yellow(1.0);
00166         } else if (nav.right()) {
00167             colors[0] = _teal(1.0);
00168             colors[1] = _light_blue(1.0);
00169             colors[2] = _blue(1.0);
00170             colors[3] = _purple(1.0);
00171         }
00172 
00173         Thread::wait(100);
00174     }
00175 }