立命館守山高校 Sci-tech部 Arduinoからe-GadgetのI2CLCD動いたよー

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Arduinoからe-GadgetのI2CLCD動いたよー

eG1.jpg
こいつについてるI2C液晶です
部室に転がってたのでArduinoの出力に丁度良いじゃんってことで、作ってみました。
クリップボード02
とは言っても、実質C-Styleからの移植ですが。
ただ、英数の他に半角カタカナを正常に表示できるように一工夫してあります。
まぁ、その一工夫が一番時間がかかったのですが…

Arduino IDEはUTF-8でしか書けません。
一方、I2C液晶はシフトJISだったので、文字列の変換が必要でした。
ソースコードを別のエディタで書いてIDEに読み込ませても当たり前ですがコンパイルできませんでしたし、文字コードをいちいち打ち込むのも億劫です。

日本語は半角カタカナが表示できればいいので、その部分だけの変換です。
Unicode対応 文字コード表に書いてあるように、UTF-8のカタカナは3bitでSJISは1bitです。で、「。」~「ソ」までは、下1バイトが同じなので、下1バイトだけにする変換を行えばいいのですが、「タ」~「゚」までは、+0x40ずれてるので、それだけ足しました。
実際の所割と意味が分からなかったので、シリアルで出力を見つつ、その場あわせのプログラムにしたので汎用性はあんまりありません。

自分としてはポインタの理解がちょっと深まったのと、文字コードの理解もちょっと深まったので万々歳とします。

で、共立に700円で売ってるI2C液晶を使わずに1台13000円もするe-GadgetのTJ3の唯一の差異である液晶を取っ払ってArduinoに取り付けて動かす用の関数とか一体どこの誰に需要があるのか解りませんが、一応公開しときます。
#include
char lcd_buf[65];
int a;
void setup(){
//I2C通信開始
Wire.begin();
//シリアル通信開始
Serial.begin(9600);

}

void loop(){
sprintf(lcd_buf,"アイウエオカキクケコサシスセロタ");
egLcdPuts(1,lcd_buf);
sprintf(lcd_buf,"0123456789abcdef");
egLcdPuts(2,lcd_buf);
delay(1000);
}

//----------------------------------------------------------------------------
//Arduinoからe-GadgetのI2C液晶に表示させる関数。英数、半角カナ対応
//lineは行数で1or2 *strには文字列、詳しくは身体で覚えてもらおうか
void egLcdPuts(unsigned char line, char *str){
char n = 0;

Wire.beginTransmission(0x16>>1); //通信開始
Wire.send(line); //行選択
//一文字ずつ送信
for (int i=0; i <= 16; i++){
//半角カナの識別
if (*str == 0xFFFFFFEF){
str ++;
str ++;
//半角カナの内タ以降の変換
if (*str >= 0xFFFFFF80 && *str <= 0xFFFFFF9F){
*str += 0x40;
}
Wire.send(*str++);
}else{ //英数の場合はそのまま
Wire.send(*str++);
}
if(*str == NULL) {
break;
}
delay (1); //処理が追いつかないのでディレー
}
while (n < 18){ //文字数に合わせるのが面倒なのでNULLを18回送信
Wire.send(NULL);
n++;
}
Wire.endTransmission();
}


こんなプログラムを書くぐらいなら明後日の数学のテストの勉強するべきですねそうですね。

コメントの投稿

非公開コメント

No title

普通のところは重要ないわな。

需要あり

僕はI2Cではないフツーの液晶使ってますが、
たぶん今後このプログラムを使って日本語出力させていただきます。
ちょうど最近、カタカナコードのテーブルルックアップ作るのは面倒くさいしArduinoのデータも食うしどうしようかなと思っていたところであります。
SJISっていう種類なんですね。
知りませんでした。

No title

>ZEROさん
お役に立てて嬉しい限りです。
ふつーの液晶だと、ピンも多いですし、共立の700円I2C液晶オススメですよ。一度命令を送るとずっと表示されますし
ちなみにSJISというのはシフトJISの略称です。
後、このソースかなり間に合わせで作った物なので、eGの液晶では動きますが、他に使うにはかなり工夫が要ると思います。

承認待ちコメント

このコメントは管理者の承認待ちです
プロフィール

立命館守山高校 Sci-tech部

Author:立命館守山高校 Sci-tech部
立命館守山高校、Sci-tech(サイテック)部のブログです。
研究の途中結果や、日記、連絡事項などを載せていきます。

主な成績
ロボカップジュニアレスキューセカンダリ2010
世界大会5位

やってること
バイオディーゼル燃料を使ったバイオカートの制作
AR(拡張現実)の研究
クルーレスソーラーボート大会への出場
ロボカップジュニアへの出場
レールガン制作
など

リンク
過去ログ
最新記事
最新コメント
アクセスカウンタ
合計閲覧者数

現在の閲覧者数
カテゴリ
検索フォーム
アクセス解析
    ブロとも申請フォーム

    この人とブロともになる

    QRコード
    QR
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。