IOエクスパンダを使ったプログラム例1

次に、プログラムを作成します。

以下は、STEP02の課題「ドットマトリクス LED の右上の LED1 つだけを点灯させる」をIOエクスパンダ経由で実現するプログラム例です。詳しい解説は後ほど行いますので、まずはこの通りにプログラムを書いてマイコンに書き込んでみましょう。

main.cpp 11-1

#include <Arduino.h> // Arduino.h の読み込み
#include <Wire.h> // Wire.h の読み込み

// IOエクスパンダのI2C上でのアドレス
int ioxAdr = 0x27;

/*
 * setup 関数
 */
void setup() {
  /* ここにプログラムの最初に1回だけ実行したい処理を上から順に記述していきます */

  // シリアル通信を115200bpsで開始
  Serial.begin(115200);

  Serial.println("初期設定の開始");

  // I2Cの初期化
  Wire.begin();

  // IOエクスパンダの初期設定
  Wire.beginTransmission(ioxAdr); // IOエクスパンダとの通信の開始
  Wire.write(0x00); // レジスタのアドレスの設定(0x00=GPIOA入出力設定レジスタ)
  Wire.write(0x00); // GPIOAのピンを出力に設定(0x00=GPIOA入出力設定レジスタに0x00を書き込み)
  Wire.write(0x00); // GPIOBのピンを出力に設定(0x01=GPIOB入出力設定レジスタに0x00を書き込み)
  Wire.endTransmission(); // データを送信し通信を完了

  // IOエクスパンダのピンの初期値の設定
  Wire.beginTransmission(ioxAdr); // IOエクスパンダとの通信の開始
  Wire.write(0x12); // レジスタのアドレスの設定(0x12=GPIOA出力レベル設定レジスタ)
  Wire.write(0b00000001); // GPIOAのピンの出力レベルの設定(0x12=GPIOA出力レベル設定レジスタ)
  Wire.write(0b11111110); // GPIOBのピンの出力レベルの設定(0x13=GPIOB出力レベル設定レジスタ)
  Wire.endTransmission(); // データを送信し通信を完了

  Serial.println("初期設定の完了");
}

/*
 * loop 関数
 */
void loop() {
  /* ここにプログラム中で繰り返し実行したい処理を上から順に記述していきます */

  delay(1); // 時間待ち
}
Code language: Arduino (arduino)

LEDは点灯しましたか?

IOエクスパンダを用いたLEDの点灯

前の記事

IOエクスパンダとは

次の記事

I2C通信