編集履歴一覧に戻る
akira.keiのアイコン画像

akira.kei が 2026年06月11日17時59分01秒 に編集

コメント無し

本文の変更

[<前の記事](https://elchika.com/article/e82c2871-c24c-4905-bed0-f859ada7fb2f/) : 次の記事> ## 自前ライブラリAQMCHAR Arduino IDEでスケッチを新規で作って名前をつけて保存した後、そのinoファイルが含まれるフォルダにArduinoライブラリの公式ページから```LyquidCrystal.cpp```および```LyquidCrystal.h```をコピーする。更にそれぞれを```AQMCHAR.cpp```と```AQMCHAR.h```に変更したコピーを同じフォルダに入れておく。 例えばスケッチを```AQM1602test.ino```とすると、同じフォルダ内には以下の5つのファイルが含まれる。 1. ```AQM1602test.ino``` 1. ```AQMCHAR.cpp``` 1. ```AQMCHAR.h``` 1. ```LyquidCrystal.cpp``` 1. ```LyquidCrystal.h``` Arduino IDEでこのスケッチを開いていると以下のように上部にタブが並ぶようになる。 ![Arduino IDE](https://camo.elchika.com/004a394c12d299b345367f6097a1bbd6b635e453/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33363031626666382d633530632d343762382d613765362d3531663731393163323336642f31363238623562392d306632322d346561352d396163332d343162393532373038373765/) ちなみに、この自前ライブラリが出来たらスケッチの内容は以下のように出来るようになる。 ```Arduino:AQM1602test.ino #include <Wire.h> #include "AQM1602.h" AQM1602 lcd=AQM1602(0x3E); void setup() { Wire.begin(); lcd.begin(16,2); lcd.setContrast(10); lcd.print("AQM1602XA-RN-GBW"); lcd.setCursor(0,1); for(byte i=0xB1;i<0xB1+16;i++) lcd.write(i); delay(3000); lcd.home(); } byte cnt=0; void loop() { lcd.write(cnt++); delay(10); } ``` ## まずはヘッダファイルAQMCHAR.h 冒頭のラベル```LiquidCrystal_h```を```AQMCHAR_h```に変更する。但し、変更しなくても問題ない。単に重複しないラベルならなんでもいいからだ。 この下にはHD44780(日立)の定義が並んでいるが、その最後に以下を追加する。 ```Arduino: #define LCD_EXTENDED_IS 0x01 #define LCD_NORMAL_IS 0x00 ``` これは拡張モードに関する定義でオリジナルのHD44780には無い。今は初期化とコントラスト調整に少しだけ簡易的に使っているが、そのうち整理していきたい。 コンストラクタの定義は前の記事にも示したように、以下のようなシンプルなものだ。 ```Arduino: class AQM1602 : public Print { public: AQM1602(uint8_t addr); void begin(uint8_t cols, uint8_t rows); ``` ```LyquidCrystal```の方には初期化シーケンスとして```init```が用意されていたが、初期化は```begin```内で行うことにしてある。```setup()```内で```Wire.bigin()```してから```lcd.begin(16,2);```のように初期化する。

+

コントラストはコマンドで設定する必要があるので```void command(uint8_t);```の後に ```Arduino: void setContrast(uint8_t); ``` を追加する。```private```の辺りは以下のようにハードウェア関連の接続情報は全て削除してある。I2Cアドレスを保管しておく```uint8_t adr;```を追加してある。 ```Arduino: private: uint8_t _adrs; uint8_t _displayfunction; uint8_t _displaycontrol; uint8_t _displaymode; uint8_t _numlines; uint8_t _row_offsets[4]; }; ``` ## ライブラリ本体: AQMCHAR.cpp ライブラリの本体である```AQMCHAR.cpp```の冒頭には```#include "Wire.h"を追加しておく。コンストラクタはシンプルで、I2Cアドレスを内部変数に保管するだけだ。 ```Arduino: ```