注目の投稿

移転

移転しました(2020.03) →  https://akehi.github.io/ ---- ・GitHub Pages使ってみたかった ・HTMLファイルをそのまま公開できるのが手軽でいいなと思った ・・JupyterとかMarkdown+PlantUMLとかで書い...

2017/02/12

Arduinoでクラスを使う

Arduinoでクラスって使えないのかと思って調べてみたら使えるらしい.

このサイトが分かりやすかった.
http://srz-zumix.blogspot.jp/2013/10/arduino.html



厄介だったのは,自分で定義したクラスからシリアル通信とかI2C通信をするとき.
・SerialはHardWareSerialクラスのインスタンスである.
・同様にI2C通信ライブラリ内のWireはTwoWireというクラスのインスタンスである.

それぞれのヘッダファイル読むと,#includeした段階で勝手にインスタンス生成されている.全く気づかなかった.
https://github.com/esp8266/Arduino/blob/master/cores/esp8266/HardwareSerial.h
https://github.com/esp8266/Arduino/blob/master/libraries/Wire/Wire.h


なので,例えばTwoWireを引数にとる関数は以下のように書けばOK

void testfunc(TwoWire *test){
    test->begin();
    ....
}

関数の呼び出しは以下のように書けばOK
testfunc( &Wire);


一応プログラム側が親切で勝手に作ってくれやがったインスタンスなのでコピーせずに参照渡ししたほうが安全性高そう.

こんな感じで出来上がったライブラリも一応公開中.
秋月で買える安価な加速度センサ,ジャイロなどとのI2C通信が楽にできるはず.
その内,磁気センサとか気圧センサとかも増やしたい.

https://github.com/Akehi/Arduino