PCA9624PW 8ch I2C 電圧スイッチ型LEDコントローラ ピッチ変換基板用のArduino サンプルスケッチです。
基板上の八つのLEDが同時に点灯し端から順番に消えていきます。
#include <Wire.h> //コントロールレジスタ #define MODE1 0x00 #define MODE2 0x01 #define PPWM0 0x02 #define GRPPWM 0x0A #define GRPFREQ 0x0B #define LEDOUT0 0x0C #define LEDOUT1 0x0D #define SUBADR1 0x0E #define SUBADR2 0x0F #define SUBADR3 0x10 #define ALLCALLADR 0x11 //スレーブアドレス #define addr 0x60 //LEDの数 #define MAX_LED 8 static unsigned char led_data[MAX_LED]; //LEDの明るさ設定用配列 //------ PCA9624PW 初期化 ------// void initLEDdriver(){ char cmd[3]; //MODE1レジスタ設定 cmd[0] = MODE1; cmd[1] = 0x00; //SLEEP = 0 i2cWrite(addr,cmd,2); //ポートモード設定 cmd[0] = LEDOUT0 | 0x80; //LEDOUT0から連続書き込み cmd[1] = 0xAA; //LED 3, 2, 1, 0 : PWM(=10) cmd[2] = 0xAA; //LED 7, 6, 5, 4 : PWM(=10) i2cWrite(addr,cmd,3); clearLEDdata(); //LEDの明るさ用データ初期化 writeLED(addr,led_data,0); //明るさデータをPCA9624に反映 } void i2cWrite(char slave_address,char *data, int num){ Wire.beginTransmission(slave_address); for(int i=0;i<num;i++){ Wire.write(*(data+i)); } Wire.endTransmission(); } void clearLEDdata(){ for(int i=0;i<MAX_LED;i++){ led_data[i] = 0; } } void writeLED(char slave_address, unsigned char *data, int offset){ char cmd[9]; int i; cmd[0] = PPWM0 | 0x80; //PWM0レジスタから連続書き込み for(i=0;i<8;i++){ cmd[i+1] = data[offset+i]; } i2cWrite(slave_address, cmd, 9); } void setup() { Wire.begin(); initLEDdriver(); } void loop() { int i; for(i=0;i<8;i++){ //LED0から7まで順番に明るくする led_data[i] = 35 * i + 10; } writeLED(addr,led_data,0); //PCA9624に反映 delay(2000); while(1){ //LED7が消えるまでループ for(i=0;i<8;i++){ //全てのLEDの明るさを1減らす if(led_data[i] > 0){ led_data[i]--; } } writeLED(addr,led_data,0); //PCA9624に反映 delay(10); if(led_data[7] == 0){ //LED7が消えたらループ終了 break; } } delay(1000); }
Last modified
9 years ago
Last modified on Jan 12, 2016 5:40:58 PM
Note:
See TracWiki
for help on using the wiki.