無料ブログはココログ

« 自動踏切 | トップページ | 自動追っかけ運転 »

2021年8月24日 (火)

Arduinoでもっと電子工作を11

Lesson10

ネタ切れで中断したArduino電子工作ですが、RailComアドレスリーダをIIC(I2C)デバイスに出来たので、IICの続編とします。
ミント缶は2台目のミント缶からスロットルデータを受信するだけですが、アドレスリーダはマスターからの要求でアドレスを返すIICデバイスにしなければなりません。方法が分からないので、先ずはレーザ距離計で使ったVL53L0Xライブラリでマスターのコードを参照しました。
因みに、疑問だったIICアドレスも、Arduinoでは7ビットでRead/Writeビットはお任せの旨、同ライブラリのコメント欄に記述がありました。

 Wire.beginTransmission(address); //ADDRESS_DEFAULT 0b0101001
 Wire.write(reg); //読みだすデバイスのレジスタを指定
 last_status = Wire.endTransmission();

 Wire.requestFrom(address, (uint8_t)1); //1バイトのデータをリクエスト
 value = Wire.read();

まだスレーブの構築が分からないので、"Wire.requestFrom"でネット検索したら参考になるコードが見つかりました。Rephtone 電子工作
その結果デバイス側は次のコードでいけそうです。
//初期設定
void setup() {
 Wire.begin(myID);
 Wire.onReceive(receiveEvent);
 Wire.onRequest(requestEvent);
}
//マスターがデバイスのレジスタを指定した時
void receiveEvent() {
 while(Wire.available() > 0) {
  registerIndex = Wire.read();
 }
}
//マスターがデータを要求した時
void requestEvent() {
 Wire.write(data[registerIndex]);
}

 

« 自動踏切 | トップページ | 自動追っかけ運転 »

電子工作」カテゴリの記事

コメント

この記事へのコメントは終了しました。