Changes between Initial Version and Version 1 of PCA9624PW


Ignore:
Timestamp:
Jan 12, 2016 5:40:58 PM (6 years ago)
Author:
soumura
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PCA9624PW

    v1 v1  
     1[https://www.switch-science.com/catalog/2389/ PCA9624PW 8ch I2C 電圧スイッチ型LEDコントローラ ピッチ変換基板]用のArduino サンプルスケッチです。
     2
     3基板上の八つのLEDが同時に点灯し端から順番に消えていきます。
     4
     5{{{
     6#include <Wire.h>
     7
     8//コントロールレジスタ
     9#define MODE1       0x00
     10#define MODE2       0x01
     11#define PPWM0       0x02
     12#define GRPPWM      0x0A
     13#define GRPFREQ     0x0B
     14#define LEDOUT0     0x0C
     15#define LEDOUT1     0x0D
     16#define SUBADR1     0x0E
     17#define SUBADR2     0x0F
     18#define SUBADR3     0x10
     19#define ALLCALLADR  0x11
     20
     21//スレーブアドレス
     22#define addr        0x60
     23
     24//LEDの数
     25#define MAX_LED     8
     26
     27static unsigned char led_data[MAX_LED]; //LEDの明るさ設定用配列
     28
     29//------ PCA9624PW 初期化 ------//
     30void initLEDdriver(){
     31  char cmd[3];
     32
     33  //MODE1レジスタ設定
     34  cmd[0] = MODE1;     
     35  cmd[1] = 0x00;      //SLEEP = 0
     36  i2cWrite(addr,cmd,2);
     37
     38  //ポートモード設定
     39  cmd[0] = LEDOUT0 | 0x80;  //LEDOUT0から連続書き込み
     40  cmd[1] = 0xAA;            //LED 3, 2, 1, 0 : PWM(=10)
     41  cmd[2] = 0xAA;            //LED 7, 6, 5, 4 : PWM(=10)
     42  i2cWrite(addr,cmd,3);
     43
     44  clearLEDdata();           //LEDの明るさ用データ初期化
     45  writeLED(addr,led_data,0);               //明るさデータをPCA9624に反映
     46 
     47}
     48
     49void i2cWrite(char slave_address,char *data, int num){
     50  Wire.beginTransmission(slave_address);
     51  for(int i=0;i<num;i++){
     52    Wire.write(*(data+i));
     53  }
     54  Wire.endTransmission();
     55}
     56
     57void clearLEDdata(){
     58  for(int i=0;i<MAX_LED;i++){
     59    led_data[i] = 0;
     60  }
     61}
     62
     63void writeLED(char slave_address, unsigned char *data, int offset){
     64  char cmd[9];
     65  int i;
     66  cmd[0] = PPWM0 | 0x80;   //PWM0レジスタから連続書き込み
     67  for(i=0;i<8;i++){
     68    cmd[i+1] = data[offset+i];
     69  }
     70  i2cWrite(slave_address, cmd, 9);
     71}
     72
     73void setup() {
     74  Wire.begin();
     75  initLEDdriver();
     76}
     77
     78void loop() {
     79  int i;
     80
     81  for(i=0;i<8;i++){          //LED0から7まで順番に明るくする
     82    led_data[i] = 35 * i + 10;
     83  }
     84  writeLED(addr,led_data,0);   //PCA9624に反映
     85  delay(2000);
     86
     87  while(1){                     //LED7が消えるまでループ
     88    for(i=0;i<8;i++){         //全てのLEDの明るさを1減らす
     89      if(led_data[i] > 0){
     90        led_data[i]--;
     91      }
     92    }
     93    writeLED(addr,led_data,0);  //PCA9624に反映
     94    delay(10);
     95    if(led_data[7] == 0){       //LED7が消えたらループ終了
     96      break;
     97    }
     98  }
     99  delay(1000);
     100}
     101}}}