ECE 4180 Lab 1

Dependencies:   MCP23S17 ShiftBrite mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
aswild
Date:
Tue Jan 28 16:50:08 2014 +0000
Child:
1:0d16f1e4f642
Commit message:
testing 123

Changed in this revision

MCP23S17.lib Show annotated file Show diff for this revision Revisions of this file
ShiftBrite.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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MCP23S17.lib	Tue Jan 28 16:50:08 2014 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/romilly/code/MCP23S17/#068b1e8909bb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ShiftBrite.lib	Tue Jan 28 16:50:08 2014 +0000
@@ -0,0 +1,1 @@
+ShiftBrite#5948048ae480
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jan 28 16:50:08 2014 +0000
@@ -0,0 +1,113 @@
+/*
+ * Allen Wild
+ * Joseph Guinta
+ *
+ * ECE 4180 Lab 1
+ */
+
+#include "mbed.h"
+#include "rtos.h"
+#include "MCP23S17.h"
+#include "ShiftBrite.h"
+
+#define PB0_PIN p20
+#define LED_PIN p29
+#define PWM_PIN p21
+#define EX_CS_PIN p18
+
+void updateSBColor(void const *args);
+
+DigitalIn pb1(PB0_PIN);
+DigitalOut led(LED_PIN);
+PwmOut pwm(PWM_PIN);
+
+SPI ex_spi(p11, p12, p13);
+MCP23S17 ex(ex_spi, EX_CS_PIN, 0x40);
+
+// flags set when reading/writing the SPI extender,
+// helpful for knowing what's happening in the logic analyzer
+DigitalOut ex_read(p24);
+DigitalOut ex_write(p23);
+
+ShiftBrite sb(p5, p6, p7, p8);
+const int sbcolors[] = {0xff0000, 0xffff00, 0x00ff00, 0x00ffff, 0x0000ff, 0xff00ff};
+int sbci = 0;
+
+// brightness of PWM output
+float bright = 0.0f;
+bool pb1p = false;
+
+int main()
+{
+    // set extender as inputs, configure internal pullups
+    ex.direction(PORT_A, 0xFF);
+    ex.configurePullUps(PORT_A, 0x90);
+    // port B as outputs (for LED)
+    ex.direction(PORT_B, 0x00);
+    
+    ex_read = 0;
+    ex_write = 0;
+
+    sb.writeInit(32, 0, 0);
+    sb.fadeColor(0, 0xff0000, 0.5);
+    
+    // set PWM to 100Hz
+    pwm.period_ms(10);
+
+    // oh no, I'm multithreading this
+    // god help us all...
+    Thread sbThread(updateSBColor);
+
+    while (true)
+    {
+        // read button and turn on LED if pressed
+        pb1p = !pb1;
+        led = pb1p;
+        if (pb1p)
+            sbThread.signal_set(0x1);
+        while (!pb1);
+
+        // use pushbuttons on extender to control PWM brightness
+        // invert because active-low switches
+        ex_read = 1;
+        char edata = ~(ex.read(PORT_A));
+        ex_read = 0;
+
+        // if either button pressed, turn on ex LED
+        if (edata & 0x90)
+        {
+            ex_write = 1; // note: debugging signal only
+            ex.write(PORT_B, 1);
+            ex_write = 0;
+        }
+        else
+        {
+            ex_write = 1;
+            ex.write(PORT_B, 0);
+            ex_write = 0;
+        }
+
+        // if button 1 and below max brightness, increment by 1%
+        if ((edata&0x80) && bright < 1.0)
+            bright += 0.01;
+        // likewise for button 2 to decrement
+        if ((edata&0x10) && bright > 0)
+            bright -= 0.01;
+        pwm = bright;
+
+        Thread::wait(10);
+    }
+}
+
+// SB color fading happens in a different thread
+void updateSBColor(void const *args)
+{
+    while (true)
+    {
+        //Thread::wait(100);
+        Thread::signal_wait(0x1);
+        sb.fadeColor(sbcolors[(sbci != 0) ? sbci-1 : 5], sbcolors[sbci], 0.5);
+        if (++sbci > 5)
+            sbci = 0;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Tue Jan 28 16:50:08 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#f88660a9bed1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Jan 28 16:50:08 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file