ECE 4180 Final
Dependencies: mbed wave_player mbed-rtos C12832_lcd 4DGL-uLCD-SE LCD_fonts SDFileSystem
Diff: main.cpp
- Revision:
- 7:15fdc55dbf66
- Parent:
- 6:cd24147b5e50
- Child:
- 11:362e25f659a5
- Child:
- 18:c760ba93b881
--- a/main.cpp Thu Dec 05 00:17:49 2019 +0000 +++ b/main.cpp Thu Dec 05 03:21:55 2019 +0000 @@ -1,11 +1,11 @@ #include "mbed.h" +#include "rtos.h" #include "SDFileSystem.h" #include "wave_player.h" #include "uLCD_4DGL.h" //setup some color objects in flash using const's -#include "rtos.h" #include "Small_6.h" #include "Small_7.h" #include "Arial_9.h" @@ -14,80 +14,12 @@ #include "bubbles.h" #include "songs.h" +#include "LED.hpp" -//class for 3 PWM color values for RGBLED -class LEDColor -{ -public: - LEDColor(float r, float g, float b); - float red; - float green; - float blue; -}; -LEDColor:: LEDColor(float r, float g, float b) - : red(r), green(g), blue(b) -{ -} -//Operator overload to adjust brightness with no color change -LEDColor operator * (const LEDColor& x, const float& b) -{ - return LEDColor(x.red*b,x.green*b,x.blue*b); -} -//Operator overload to add colors -LEDColor operator + (const LEDColor& x, const LEDColor& y) -{ - return LEDColor(x.red+y.red,x.green+y.green,x.blue+y.blue); -} - -//Class to control an RGB LED using three PWM pins -class RGBLed -{ -public: - RGBLed(PinName redpin, PinName greenpin, PinName bluepin); - void write(float red,float green, float blue); - void write(LEDColor c); - RGBLed operator = (LEDColor c) { - write(c); - return *this; - }; -private: - PwmOut _redpin; - PwmOut _greenpin; - PwmOut _bluepin; -}; - -RGBLed::RGBLed (PinName redpin, PinName greenpin, PinName bluepin) - : _redpin(redpin), _greenpin(greenpin), _bluepin(bluepin) -{ - //50Hz PWM clock default a bit too low, go to 2000Hz (less flicker) - _redpin.period(0.0005); -} - -void RGBLed::write(float red,float green, float blue) -{ - _redpin = red; - _greenpin = green; - _bluepin = blue; -} -void RGBLed::write(LEDColor c) -{ - _redpin = c.red; - _greenpin = c.green; - _bluepin = c.blue; -} - -//classes could be moved to include file //Setup RGB led using PWM pins and class RGBLed myRGBled(p24,p23,p22); //RGB PWM pins -const LEDColor red(1.0,0.0,0.0); -const LEDColor green(0.0,0.2,0.0); -//brighter green LED is scaled down to same as red and -//blue LED outputs on Sparkfun RGBLED -const LEDColor blue(0.0,0.0,1.0); -const LEDColor yellow(1.0,0.2,0.0); -const LEDColor white(1.0,0.2,1.0); -const LEDColor black(0.0,0.0,0.0); + char bred=0; char bgreen=0; char bblue=0; @@ -95,7 +27,8 @@ volatile bool songselect = false; volatile bool homescreen = true; volatile bool songchange = false; -uLCD_4DGL uLCD(p28,p27,p30); +volatile bool playing = false; +uLCD_4DGL uLCD(p28,p27,p30); SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card DigitalOut myled(LED1); DigitalIn pb1(p20); @@ -103,6 +36,8 @@ AnalogOut DACout(p18); wave_player waver(&DACout); Thread thread1, thread2, thread3; +Ticker nextsample; +int songNdx = 0; // mutex to make the lcd lib thread safe Mutex lcd_mutex; @@ -126,7 +61,7 @@ uLCD.locate(4,1); uLCD.printf("Revolution"); uLCD.locate(0,3); - uLCD.printf("Pick a song"); + uLCD.printf("Pick a song!"); uLCD.text_height(1.3); uLCD.text_width(1.9); uLCD.locate(3,5); @@ -136,7 +71,7 @@ uLCD.locate(3,9); uLCD.printf("Stacy's Mom"); uLCD.locate(3,11); - uLCD.printf("I Write Sins \n \t Not Tragedies"); + uLCD.printf("I Write Sins \n \t Not Tragedies"); uLCD.filled_circle(6, 43, 4, GREEN); //new selection with circle instead of rectangle homescreen = false;} if (songchange){ @@ -152,8 +87,7 @@ } // Thread 2 -//for song selection during homescreen - +// joystick control for song selection during homescreen void joystick_thread() { while(1){ @@ -190,17 +124,25 @@ } } -int main() -{ - //timestamp in terms of seconds +// Thread 4 +// this thread plays music using the ticker class +void playsound() { + if (playing) { + //DACout = song[songNdx++]; + //if (i>**songlength**) i + } else { + DACout = 0; + songNdx = 0; + } +} + +int main() { - //doesnt work yet, nee,d to ask hamblen - uLCD.media_init(); - uLCD.set_sector_address(0x001D, 0x4C01); - uLCD.display_image(0,0); + uLCD.baudrate(3000000); thread1.start(homescreen_thread); - thread2.start(joystick_thread); + thread2.start(joystick_thread); thread3.start(pbcontrol_thread); +// nextsample.attach(&playsound, 1.0/8000.0); //startup sound myRGBled = blue; //tested to make sure led works, we can use whatever color(s) here FILE *wave_file;