ECE 4180 Final

Dependencies:   mbed wave_player mbed-rtos C12832_lcd 4DGL-uLCD-SE LCD_fonts SDFileSystem

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;