viniedodo jin
/
LPC812MAXdemoTest_revPA1
LPC812MAXdemoTest_revPA1
main.cpp
- Committer:
- viniedodo
- Date:
- 2013-10-13
- Revision:
- 0:c2c6f009e2d1
File content as of revision 0:c2c6f009e2d1:
#include "mbed.h" 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() { //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) { //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