The example program is LPC812MAXdemo board default program supplied by mbed.org

Dependencies:   mbed

Fork of mbed_blinky by Mbed

Files at this revision

API Documentation at this revision

Comitter:
okwh
Date:
Wed Nov 06 15:20:37 2013 +0000
Parent:
0:7dec7e9ac085
Commit message:
1st default program

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 7dec7e9ac085 -r 7620606cdb4e main.cpp
--- a/main.cpp	Fri Oct 11 12:42:44 2013 +0000
+++ b/main.cpp	Wed Nov 06 15:20:37 2013 +0000
@@ -1,12 +1,283 @@
 #include "mbed.h"
 
-DigitalOut myled(LED1);
+DigitalOut ledRed(LED_RED);
+DigitalOut ledGreen(LED_GREEN);
+DigitalOut ledBlue(LED_BLUE);
+
+int flashPattern = 0;
+
+const unsigned char I2C_ADDR_PCF8591T  = 0x9E;
+const unsigned char I2C_ADDR_PCA9672PW = 0x46;
+
+const unsigned char LED_ON  = 0;
+const unsigned char LED_OFF = 1;
+bool keyPressed;
+char response[1];
+
+I2C m_i2c(P0_10, P0_11);
+
+unsigned char i2c_wait(int ms)
+{
+    for(int n=0; n<ms; n+=50) {
+        //read PCA9672PW
+        if (m_i2c.read(I2C_ADDR_PCA9672PW, response, 1) == 0) {
+            //check if push-button pressed (bit #7 = 0)
+            if ((keyPressed == false) && ((response[0] & 0x80) == 0))
+                return 1;
+        } else {
+            //error reading from I2C device
+            while(1) {
+                for(int i=0; i<10; i++) {
+                    ledBlue = LED_ON;
+                    wait(0.05);
+                    ledBlue = LED_OFF;
+                    wait(0.05);
+                }
+                wait(1.0);
+            }
+        }
+        wait(0.05);
+    }
+    return 0;
+}
 
-int main() {
+int main()
+{
+    //init RGB-LED to be off
+    ledRed   = LED_OFF;
+    ledGreen = LED_OFF;
+    ledBlue  = LED_OFF;
+
+    //test i2C connection with PCF8591T  (1.0.0.1.1.1.1.rw)
+    const char command1[] = {0x00};
+    if (m_i2c.write(I2C_ADDR_PCF8591T, command1, 1) != 0) {
+        while(1) {
+            for(int i=0; i<10; i++) {
+                ledRed = LED_ON;
+                wait(0.05);
+                ledRed = LED_OFF;
+                wait(0.05);
+            }
+            wait(1.0);
+        }
+    }
+
+    //test i2C connection with PCA9672PW (0.1.0.0.0.1.1.rw)
+    const char command2[] = {0xff};
+    if (m_i2c.write(I2C_ADDR_PCA9672PW, command2, 1) != 0) {
+        while(1) {
+            for(int i=0; i<10; i++) {
+                ledBlue = LED_ON;
+                wait(0.05);
+                ledBlue = LED_OFF;
+                wait(0.05);
+            }
+            wait(1.0);
+        }
+    }
+
+    //startup flash behaviour
+    for(int i=0; i<10; i++) {
+        ledGreen = LED_ON;
+        wait(0.05);
+        ledGreen = LED_OFF;
+        wait(0.05);
+    }
+    wait(1.0);
+
+    //enter forever loop, change RGB flash patterns with user push-button
+    keyPressed = false;
+    i2c_wait(1);
     while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
+        //read user push-button
+#if 1
+        i2c_wait(1);
+        //check if push-button pressed (bit #7 = 0)
+        if ((keyPressed == false) && ((response[0] & 0x80) == 0)) {
+            keyPressed = true;
+            flashPattern++;
+        }
+
+        //check if push-button released (bit #7 = 1)
+        else if ((keyPressed == true) && ((response[0] & 0x80) != 0))
+            keyPressed = false;
+#else
+        if (m_i2c.read(I2C_ADDR_PCA9672PW, response, 1) == 0) {
+            //check if push-button pressed (bit #7 = 0)
+            if ((keyPressed == false) && ((response[0] & 0x80) == 0)) {
+                keyPressed = true;
+                flashPattern++;
+                ledRed = LED_OFF;
+                ledGreen = LED_OFF;
+                ledBlue = LED_OFF;
+            }
+
+            //check if push-button released (bit #7 = 1)
+            else if ((keyPressed == true) && ((response[0] & 0x80) != 0))
+                keyPressed = false;
+        }
+        //error reading from I2C device
+        else {
+            while(1) {
+                for(int i=0; i<10; i++) {
+                    ledBlue = LED_ON;
+                    wait(0.05);
+                    ledBlue = LED_OFF;
+                    wait(0.05);
+                }
+                wait(1.0);
+            }
+        }
+#endif
+        //flash RGB-LED according to pattern
+        switch(flashPattern) {
+            case 0:
+                ledRed = LED_ON;
+                if (i2c_wait(80) != 0) break;
+                ledRed = LED_OFF;
+                if (i2c_wait(500) != 0) break;
+
+                ledGreen = LED_ON;
+                if (i2c_wait(15) != 0) break;
+                ledGreen = LED_OFF;
+                if (i2c_wait(550) != 0) break;
+
+                ledBlue = LED_ON;
+                if (i2c_wait(80) != 0) break;
+                ledBlue = LED_OFF;
+                if (i2c_wait(500) != 0) break;
+                break;
+            case 1:
+                for(float a=0; a<0.01; a+=0.0004) {
+                    ledGreen = LED_ON;
+                    wait(a/2);
+                    ledGreen = LED_OFF;
+                    wait(0.01-a);
+                }
+                ledGreen = LED_ON;
+                if (i2c_wait(1) != 0) break;
+                for(float a=0.01; a>0.0; a-=0.0002) {
+                    ledGreen = LED_ON;
+                    wait(a/2);
+                    ledGreen = LED_OFF;
+                    wait(0.01-a);
+                }
+                if (i2c_wait(400) != 0) break;
+                break;
+            case 2:
+                ledRed = LED_ON;
+                if (i2c_wait(150) != 0) break;
+                ledRed = LED_OFF;
+                if (i2c_wait(150) != 0) break;
+
+                ledGreen = LED_ON;
+                if (i2c_wait(100) != 0) break;
+                ledGreen = LED_OFF;
+
+                ledBlue = LED_ON;
+                if (i2c_wait(150) != 0) break;
+                ledBlue = LED_OFF;
+                break;
+            case 3:
+                ledRed = LED_ON;
+                ledGreen = LED_ON;
+                ledBlue = LED_ON;
+                if (i2c_wait(10) != 0) break;
+
+                ledGreen = LED_OFF;
+                ledBlue = LED_OFF;
+                ledRed = LED_OFF;
+                if (i2c_wait(500) != 0) break;
+                break;
+            case 4:
+                for(float a=0; a<0.01; a+=0.0008) {
+                    ledRed = LED_ON;
+                    wait(a);
+                    ledRed = LED_OFF;
+                    wait(0.01-a);
+                }
+                ledRed = LED_ON;
+                if (i2c_wait(1) != 0) break;
+                for(float a=0; a<0.01; a+=0.0008) {
+                    ledBlue = LED_ON;
+                    wait(a);
+                    ledBlue = LED_OFF;
+                    wait(0.01-a);
+                }
+                ledBlue = LED_ON;
+                if (i2c_wait(1) != 0) break;
+                for(float a=0.01; a>0.0; a-=0.0008) {
+                    ledRed = LED_ON;
+                    wait(a);
+                    ledRed = LED_OFF;
+                    wait(0.01-a);
+                }
+                if (i2c_wait(1) != 0) break;
+                for(float a=0.01; a>0.0; a-=0.0008) {
+                    ledBlue = LED_ON;
+                    wait(a);
+                    ledBlue = LED_OFF;
+                    wait(0.01-a);
+                }
+                if (i2c_wait(200) != 0) break;
+                break;
+            default:
+                flashPattern = 0;
+                break;
+        }
     }
 }
+
+#if 0
+//https://github.com/mbedmicro/mbed/tree/master/libraries/mbed/vendor/NXP/capi/LPC812
+P0_0 = 0,
+P0_1 = 1,
+P0_2 = 2,
+P0_3 = 3,
+P0_4 = 4,
+P0_5 = 5,
+P0_6 = 6,
+P0_7 = 7,
+P0_8 = 8,
+P0_9 = 9,
+P0_10 = 10, //SDA
+P0_11 = 11, //SCL
+P0_12 = 12,
+P0_13 = 13,
+P0_14 = 14,
+P0_15 = 15,
+P0_16 = 16,
+P0_17 = 17,
+
+D0 = P0_0,
+D1 = P0_4,
+D2 = P0_6,
+D3 = P0_8,
+D4 = P0_9,
+
+D7 = P0_7,
+D8 = P0_17,
+D9 = P0_16,
+D10 = P0_13,
+D11 = P0_14,
+D12 = P0_15,
+D13 = P0_12,
+
+A4 = P0_10,
+A5 = P0_11,
+
+// LPC800-MAX board
+LED_RED = P0_7,
+LED_GREEN = P0_17,
+LED_BLUE = P0_16,
+
+// mbed original LED naming
+LED1 = LED_BLUE,
+LED2 = LED_GREEN,
+LED3 = LED_RED,
+LED4 = LED_RED,
+
+// Serial to USB pins
+USBTX = P0_6,
+USBRX = P0_1,
+#endif