秋月I2C液晶をeXodusinoで使う
Cortex-M0 Arduino互換環境 eXodusinoではArduino I2C(Wireクラス)をソフトウェアでエミュレートしています。*1
が、、時々ACKを取りこぼしたりする現象が確認できたので、Wireクラスのデバッグもかねて動作させてみました。
秋月I2C液晶はこれを使ってます↓
http://akizukidenshi.com/catalog/g/gP-05693/
I2C接続キャラクタLCDモジュール[16x2行]白色バックライト付
[ACM1602NI-FLW-FBW-M01]
液晶制御用のソースコードは1から書くのがスーパーめんどくさかったので、実績のあるコードを拝借することに。
参考ブログ:
ThinkAboutPCB::ワンチップArduinoで秋月I2C LCDを使う (orion_cosmo さん)
構想100年::秋月のI2C接続キャラクタLCDモジュールACM1602NIをArduinoで使う (まりす さん)
ありがとうございます。
どちらでもArduino向け秋月I2C液晶クラスが手に入ります。
まりすさんはArduino 1.0以降とArduino-0023以前のどちらのクラスにも対応されている上、ご自身のLiquidCrystalクラスを継承されている模様で、使っているインターフェースに関わらずキャラクタ液晶をポータブルに取り扱うことができます。
さて、今回はorion_cosmoさんのAkiI2CLcdクラスを使わせていただきました。
オリジナルとの変更点としては、
- インクルードファイルをarduino.h から libmary.hに変更した
- byte型変数をuint8_t型に直した
- eXodusinoはArduino-0023ベースなのでWire.writeをWire.sendに変更した
これだけで、特に大きな変更は加えませんでした。なお、ライセンスが不明なのでこの変更を加えたAkiI2CLcdクラスを公表することは致しません。orion_cosmo氏のページから頂いてきて各自変更ができると思います。
akiI2Clcd.cpp/.hの各ファイルをeXodusinoプロジェクトに追加し、実機動作させてみます。
なお、eXodusinoでは任意のIOピンをI2Cに利用することができます。ただし、諸事情により1chのみです。(ぉぃ
user_application.cppを以下のように変更します。
#include "libmary.h" #include <Wire.h> #include <akiI2Clcd.h> akiI2Clcd AKI=akiI2Clcd(0x50); //スレーブアドレス指定 void setup() { Wire.begin(2,4); // SDA=2番ピン,scl=4番ピンを指定する Serial.begin(9600); Serial.println("Start!"); AKI.I2CLCD_init(); AKI.I2CLCD_clear(); } void loop() { char a[] = "Hello World!"; char b[] = "ACM1602NI"; AKI.I2CLCD_setCursor(0,0); AKI.I2CLCD_print(a); AKI.I2CLCD_setCursor(0,1); AKI.I2CLCD_print(b); Serial.println("end"); for(;;); }
これを、TeraTermやCuteComをつかってeXodusino本体に書き込むと、、
おしまい。*2