Library for NXP MCU I2C RGB LED DEMO board (6 x PCA9635)
Warning
When the original NXP demo board is connected to another mcu board : Disable the on-board 8051 mcu.
PCA9635_6.h@1:b89b54759940, 2014-04-01 (annotated)
- Committer:
- frankvnk
- Date:
- Tue Apr 01 20:03:30 2014 +0000
- Revision:
- 1:b89b54759940
- Parent:
- 0:1258ad754d9c
Added global intensity function
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
frankvnk | 0:1258ad754d9c | 1 | /************************************************************************************************** |
frankvnk | 0:1258ad754d9c | 2 | ***** ***** |
frankvnk | 0:1258ad754d9c | 3 | ***** Name: PCA9635_6.h ***** |
frankvnk | 0:1258ad754d9c | 4 | ***** Date: 09/03/2014 ***** |
frankvnk | 0:1258ad754d9c | 5 | ***** Auth: Frank Vannieuwkerke ***** |
frankvnk | 0:1258ad754d9c | 6 | ***** Func: library for I2C RGB LED Demo board (6 x PCA9635) ***** |
frankvnk | 0:1258ad754d9c | 7 | ***** Ported from http://mbed.org/users/JimCarver/code/RGB2/ ***** |
frankvnk | 0:1258ad754d9c | 8 | **************************************************************************************************/ |
frankvnk | 0:1258ad754d9c | 9 | |
frankvnk | 0:1258ad754d9c | 10 | #ifndef PCA9635_6_H |
frankvnk | 0:1258ad754d9c | 11 | #define PCA9635_6_H |
frankvnk | 0:1258ad754d9c | 12 | |
frankvnk | 0:1258ad754d9c | 13 | #include "mbed.h" |
frankvnk | 0:1258ad754d9c | 14 | |
frankvnk | 0:1258ad754d9c | 15 | typedef struct |
frankvnk | 0:1258ad754d9c | 16 | { |
frankvnk | 0:1258ad754d9c | 17 | uint8_t address; /* slave address to sent/receive message */ |
frankvnk | 0:1258ad754d9c | 18 | uint8_t *buf; /* pointer to application message buffer */ |
frankvnk | 0:1258ad754d9c | 19 | } I2C_MESSAGE; |
frankvnk | 0:1258ad754d9c | 20 | |
frankvnk | 0:1258ad754d9c | 21 | /** Class for I2C RGB LED Demo board (6 x PCA9635). |
frankvnk | 0:1258ad754d9c | 22 | * |
frankvnk | 0:1258ad754d9c | 23 | * 'en' pin can be any digital pin. |
frankvnk | 0:1258ad754d9c | 24 | * Uses I2C bus. |
frankvnk | 0:1258ad754d9c | 25 | */ |
frankvnk | 0:1258ad754d9c | 26 | |
frankvnk | 0:1258ad754d9c | 27 | class PCA9635_6 { |
frankvnk | 0:1258ad754d9c | 28 | public: |
frankvnk | 0:1258ad754d9c | 29 | /** Create a PCA9635_6 object connected to enable pin and I2C bus. |
frankvnk | 0:1258ad754d9c | 30 | * |
frankvnk | 0:1258ad754d9c | 31 | * @param sda = SDA pin. |
frankvnk | 0:1258ad754d9c | 32 | * @param scl = SCL pin. |
frankvnk | 0:1258ad754d9c | 33 | * @param en = Board enable pin. |
frankvnk | 0:1258ad754d9c | 34 | * @return none |
frankvnk | 0:1258ad754d9c | 35 | */ |
frankvnk | 0:1258ad754d9c | 36 | PCA9635_6(PinName sda, PinName scl, PinName en); |
frankvnk | 0:1258ad754d9c | 37 | |
frankvnk | 0:1258ad754d9c | 38 | /** Send RGB color to a LED. |
frankvnk | 0:1258ad754d9c | 39 | * |
frankvnk | 0:1258ad754d9c | 40 | * @param LEDn = LED number. |
frankvnk | 0:1258ad754d9c | 41 | * @param R = Red. |
frankvnk | 0:1258ad754d9c | 42 | * @param G = Green. |
frankvnk | 0:1258ad754d9c | 43 | * @param B = Blue. |
frankvnk | 0:1258ad754d9c | 44 | * @return none. |
frankvnk | 0:1258ad754d9c | 45 | * |
frankvnk | 0:1258ad754d9c | 46 | * Lookup the buffer and index to set the desired values |
frankvnk | 0:1258ad754d9c | 47 | * in the appropriate locations within the I2C message buffers |
frankvnk | 0:1258ad754d9c | 48 | * update_LED() actually sends the buffers through I2C to the drivers |
frankvnk | 0:1258ad754d9c | 49 | */ |
frankvnk | 0:1258ad754d9c | 50 | void set_LED(int LEDn, uint8_t R, uint8_t G, uint8_t B); |
frankvnk | 0:1258ad754d9c | 51 | |
frankvnk | 0:1258ad754d9c | 52 | /** Initalization of the buffers. |
frankvnk | 0:1258ad754d9c | 53 | * |
frankvnk | 0:1258ad754d9c | 54 | * @param none. |
frankvnk | 0:1258ad754d9c | 55 | * @return none. |
frankvnk | 0:1258ad754d9c | 56 | */ |
frankvnk | 0:1258ad754d9c | 57 | void Init_Buffers(void); |
frankvnk | 0:1258ad754d9c | 58 | |
frankvnk | 0:1258ad754d9c | 59 | /** Fill all the PWM register of a device with a RGB setting. |
frankvnk | 0:1258ad754d9c | 60 | * |
frankvnk | 0:1258ad754d9c | 61 | * @param A,B,C --> Primary colors. |
frankvnk | 0:1258ad754d9c | 62 | * @return none. |
frankvnk | 0:1258ad754d9c | 63 | */ |
frankvnk | 0:1258ad754d9c | 64 | void Set_Same_Color_Single_Device(uint8_t A, uint8_t B, uint8_t C); |
frankvnk | 0:1258ad754d9c | 65 | |
frankvnk | 0:1258ad754d9c | 66 | /** Set the I2C address to the ALL CALL Address and send the I2C_Write command. |
frankvnk | 0:1258ad754d9c | 67 | * |
frankvnk | 0:1258ad754d9c | 68 | * @param none. |
frankvnk | 0:1258ad754d9c | 69 | * @return none. |
frankvnk | 0:1258ad754d9c | 70 | */ |
frankvnk | 0:1258ad754d9c | 71 | void Write_All_Devices(void); |
frankvnk | 0:1258ad754d9c | 72 | |
frankvnk | 0:1258ad754d9c | 73 | /** Set the I2C address to the required address and send the I2C_Write command. |
frankvnk | 0:1258ad754d9c | 74 | * |
frankvnk | 0:1258ad754d9c | 75 | * @param I2C Address of the targetted device (LSB = 0). |
frankvnk | 0:1258ad754d9c | 76 | * @return none. |
frankvnk | 0:1258ad754d9c | 77 | */ |
frankvnk | 0:1258ad754d9c | 78 | void Write_To_Device(uint8_t I2C_Address); |
frankvnk | 0:1258ad754d9c | 79 | |
frankvnk | 0:1258ad754d9c | 80 | /** Set the I2C address to the required address and send the I2C_Write command. |
frankvnk | 0:1258ad754d9c | 81 | * Wait (delay) before moving to the next step. |
frankvnk | 0:1258ad754d9c | 82 | * |
frankvnk | 0:1258ad754d9c | 83 | * @param I2C Address of the targetted device (LSB = 0). |
frankvnk | 0:1258ad754d9c | 84 | * @param Delay = delay in ms. |
frankvnk | 0:1258ad754d9c | 85 | * @return none. |
frankvnk | 0:1258ad754d9c | 86 | */ |
frankvnk | 0:1258ad754d9c | 87 | void Write_To_Device_And_Wait(uint8_t I2C_Address, uint8_t Delay_Value); |
frankvnk | 0:1258ad754d9c | 88 | |
frankvnk | 0:1258ad754d9c | 89 | /** Swtich of ALL the LEDs using the ALL CALL address. |
frankvnk | 0:1258ad754d9c | 90 | * |
frankvnk | 0:1258ad754d9c | 91 | * @param none. |
frankvnk | 0:1258ad754d9c | 92 | * @return none. |
frankvnk | 0:1258ad754d9c | 93 | */ |
frankvnk | 0:1258ad754d9c | 94 | void ALL_LED_OFF(void); |
frankvnk | 0:1258ad754d9c | 95 | |
frankvnk | 0:1258ad754d9c | 96 | /** Write new values to PCA9635. |
frankvnk | 0:1258ad754d9c | 97 | * |
frankvnk | 0:1258ad754d9c | 98 | * @param none. |
frankvnk | 0:1258ad754d9c | 99 | * @return none. |
frankvnk | 0:1258ad754d9c | 100 | */ |
frankvnk | 0:1258ad754d9c | 101 | void update_LED(void); |
frankvnk | 0:1258ad754d9c | 102 | |
frankvnk | 0:1258ad754d9c | 103 | /** Read current RGB LED values. |
frankvnk | 0:1258ad754d9c | 104 | * |
frankvnk | 0:1258ad754d9c | 105 | * @param LEDn = LED number. |
frankvnk | 0:1258ad754d9c | 106 | * @param *R = Pointer to Red return value. |
frankvnk | 0:1258ad754d9c | 107 | * @param *G = Pointer to Green return value. |
frankvnk | 0:1258ad754d9c | 108 | * @param *B = Pointer to Blue return value. |
frankvnk | 0:1258ad754d9c | 109 | */ |
frankvnk | 0:1258ad754d9c | 110 | void read_LED( int LEDn, uint8_t *R, uint8_t *G, uint8_t *B); |
frankvnk | 0:1258ad754d9c | 111 | |
frankvnk | 1:b89b54759940 | 112 | /** Send GLOBAL_INTENSITY to LED board. |
frankvnk | 1:b89b54759940 | 113 | * |
frankvnk | 1:b89b54759940 | 114 | * @param none. |
frankvnk | 1:b89b54759940 | 115 | * @return none. |
frankvnk | 1:b89b54759940 | 116 | */ |
frankvnk | 1:b89b54759940 | 117 | void LED_INTENSITY(void); |
frankvnk | 1:b89b54759940 | 118 | |
frankvnk | 1:b89b54759940 | 119 | /** Change GLOBAL_INTENSITY. |
frankvnk | 1:b89b54759940 | 120 | * |
frankvnk | 1:b89b54759940 | 121 | * @param intensity value. |
frankvnk | 1:b89b54759940 | 122 | * @return none. |
frankvnk | 1:b89b54759940 | 123 | */ |
frankvnk | 1:b89b54759940 | 124 | void set_global_intensity(uint8_t globi); |
frankvnk | 1:b89b54759940 | 125 | |
frankvnk | 0:1258ad754d9c | 126 | private: |
frankvnk | 0:1258ad754d9c | 127 | void i2cfail(void); |
frankvnk | 0:1258ad754d9c | 128 | void I2C_Write(I2C_MESSAGE *mp); |
frankvnk | 0:1258ad754d9c | 129 | I2C _i2c; |
frankvnk | 0:1258ad754d9c | 130 | DigitalOut _en; |
frankvnk | 0:1258ad754d9c | 131 | }; |
frankvnk | 0:1258ad754d9c | 132 | |
frankvnk | 0:1258ad754d9c | 133 | #endif |