ece 4180 lab 3
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem X_NUCLEO_53L0A1 HC_SR04_Ultrasonic_Library
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 }
Generated on Wed Jul 13 2022 11:06:00 by 1.7.2