ECE 4180 Final

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

Files at this revision

API Documentation at this revision

Comitter:
yqin70
Date:
Tue Dec 03 21:24:00 2019 +0000
Child:
1:a1aa9a79070a
Commit message:
kk

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
C12832_lcd.lib Show annotated file Show diff for this revision Revisions of this file
LCD_fonts.lib Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
wave_player.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/4DGL-uLCD-SE.lib	Tue Dec 03 21:24:00 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#2cb1845d7681
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832_lcd.lib	Tue Dec 03 21:24:00 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/dreschpe/code/C12832_lcd/#c9afe58d786a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LCD_fonts.lib	Tue Dec 03 21:24:00 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/dreschpe/code/LCD_fonts/#d0b7d7bf1f56
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Tue Dec 03 21:24:00 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/neilt6/code/SDFileSystem/#e4d2567200db
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Dec 03 21:24:00 2019 +0000
@@ -0,0 +1,207 @@
+// example to test the mbed Lab Board lcd lib with the mbed rtos
+// Pot1 changes the contrast
+// Pot2 changes the speed of the sin wave
+#include "mbed.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"
+#include "stdio.h"
+#include "C12832_lcd.h"
+
+//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(p23,p22,p21); //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; 
+
+volatile bool songselect = false;
+volatile bool homescreen = true;
+uLCD_4DGL uLCD(p28,p27,p30); 
+SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+DigitalOut myled(LED1);
+DigitalIn pb1(p20);
+DigitalIn pb2(p19);
+
+// mutex to make the lcd lib thread safe
+Mutex lcd_mutex;
+int songnum = 1;
+AnalogIn joy_pot(p16);
+// Thread 1
+// print counter into first line and wait for 1 s
+void thread1(void const *args)
+{
+    
+    while(true) {       // thread loop
+        
+        if (homescreen){
+            lcd_mutex.lock();
+            uLCD.cls();
+            uLCD.text_height(1.8);
+            uLCD.text_width(1.8);
+            uLCD.color(WHITE);
+            uLCD.locate(0,0);
+            uLCD.printf("Pick a song");
+            uLCD.text_height(2);
+            uLCD.text_width(2);
+            uLCD.locate(1,2);
+            uLCD.printf("Song1");
+            uLCD.locate(1,4);
+            uLCD.printf("Song2");
+            uLCD.locate(1,6);
+            uLCD.printf("Song3");
+            uLCD.rectangle(5, songnum*30, 100, songnum*30+25 ,GREEN);
+            lcd_mutex.unlock();
+            if (songselect){
+                myled = 0;
+                homescreen = false;
+                lcd_mutex.lock();
+                uLCD.cls();
+                uLCD.printf("You selected song %2d",songnum);
+                lcd_mutex.unlock();
+                
+                }
+            //FILE *fp = fopen("/sd/sdtest.txt", "r");
+            //char c = fgetc(fp);
+            //while(c){
+            //    c = fgetc(fp);
+            //    }
+            }
+            Thread::wait(200);    
+    }
+}
+
+void thread2(void const *args)
+{
+
+   while(1){
+        //if (homescreen){
+            if ((joy_pot <= (1.4/3.3)) && songnum>1) {
+                songnum--;
+                } 
+            else if ((joy_pot >= (1.8/3.3)) && songnum<3){
+                songnum++;
+                }
+        //    }
+        Thread::wait(250);
+        
+    }
+}
+
+// Thread 3
+// print a sin function in a small window
+// the value of pot 1 changes the speed of the sine wave
+void thread3(void const *args)
+{
+    pb1.mode(PullUp);
+    pb2.mode(PullUp);
+    while(true) {       // thread loop
+        if (!pb2)
+            {
+            homescreen = true;
+            songselect = false;
+            }
+        if (!pb1)
+            {
+            songselect = true;
+            }
+        Thread::wait(100);   // value of pot1 / 100
+    }
+}
+
+int main()
+{
+    uLCD.media_init();
+    uLCD.set_sector_address(0x001D, 0x4C01);
+    uLCD.display_image(0,0);
+//    t1.start(thread1);
+//   t2.start(thread2);
+//    t3.start(thread3);
+    Thread t1(thread1);
+    Thread t2(thread2);
+    myled = 1;
+    Thread t3(thread3);
+    while(1) 
+    {
+        
+        Thread::wait(100);    
+        }
+}
+        
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Tue Dec 03 21:24:00 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#58563e6cba1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Dec 03 21:24:00 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/0ab6a29f35bf
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wave_player.lib	Tue Dec 03 21:24:00 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/sravet/code/wave_player/#acc3e18e77ad