Arduinoって読めないよ… でも買ってみた ノ巻
RaspberryPiに比べると、さらに非力で読み方もよくわからないので、近づかないでいたArduino(あるでゅいの)も入手してみた。
Arduinoには実験用と本番用(?)でいくつかのボードの種類があり、互換ボードも合わせるとさらに種類があるようだ。しかし標準的なものでないと、ネットにあるサンプルスケッチ(Arduinoでのプログラムのこと)が動かない場合があるらしく、標準的なUno R3にした。USBの口がmicroBになったLeonardoもあったが、USBシリアルのあたりが変わっているとかで一部に互換がないということで無難なUno R3にした。
使い方はPCからUSB経由でスケッチをコンパイル・転送してボードのリセットが入り、新しいプログラムが動くという仕掛け。書きこんだプログラムは電源を切っても動き続ける。
スケッチの構造はsetup()に初回の初期化で実行する処理、loop()で以降に繰り返す処理を記述する構造が基本となっている。書式はほとんどCなので、適当に関数を作って呼んでも動いた。
LiquidCrystalライブラリが用意されており、RaspberryPiでも繋いでいたLCDモジュール(SC162C)が簡単に繋がりそうだったので、さっそくつないでみた。あっさり文字が出力され、RaspberryPiよりもライブラリ資産が充実しているのかもしれないと思った。しかし、半角カナは残念ながら文字化けし、調べたところ文字列はUNICODEで処理されているとのこと。ファイルの文字コードを指定する方法もなさそうで、Webで調べると16進データで直接指定する方法しか見つからず。。
いちいち文字コードを引くのは面倒なので、UNICODDEの半角カナをSJISのコードに置き換えるprint2()関数をかますことでそれっぽくした。ライブラリ化できるといいな。
今回少し触ってみただけだが、ネットでサーバとかではRaspberryPiになるけど、センサーとかモーターとかを使った電子工作という点ではArduinoのほうが使いやすいのかも?
Arduinoには実験用と本番用(?)でいくつかのボードの種類があり、互換ボードも合わせるとさらに種類があるようだ。しかし標準的なものでないと、ネットにあるサンプルスケッチ(Arduinoでのプログラムのこと)が動かない場合があるらしく、標準的なUno R3にした。USBの口がmicroBになったLeonardoもあったが、USBシリアルのあたりが変わっているとかで一部に互換がないということで無難なUno R3にした。
使い方はPCからUSB経由でスケッチをコンパイル・転送してボードのリセットが入り、新しいプログラムが動くという仕掛け。書きこんだプログラムは電源を切っても動き続ける。
スケッチの構造はsetup()に初回の初期化で実行する処理、loop()で以降に繰り返す処理を記述する構造が基本となっている。書式はほとんどCなので、適当に関数を作って呼んでも動いた。
LiquidCrystalライブラリが用意されており、RaspberryPiでも繋いでいたLCDモジュール(SC162C)が簡単に繋がりそうだったので、さっそくつないでみた。あっさり文字が出力され、RaspberryPiよりもライブラリ資産が充実しているのかもしれないと思った。しかし、半角カナは残念ながら文字化けし、調べたところ文字列はUNICODEで処理されているとのこと。ファイルの文字コードを指定する方法もなさそうで、Webで調べると16進データで直接指定する方法しか見つからず。。
いちいち文字コードを引くのは面倒なので、UNICODDEの半角カナをSJISのコードに置き換えるprint2()関数をかますことでそれっぽくした。ライブラリ化できるといいな。
今回少し触ってみただけだが、ネットでサーバとかではRaspberryPiになるけど、センサーとかモーターとかを使った電子工作という点ではArduinoのほうが使いやすいのかも?
α700 + CarlZeissJena Flektogon 1:2.8 35mm
// include the library code: #include <LiquidCrystal.h> #include <string.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // UTF-8をShift JISへ変換 // 半角カナのみ int utf82sjis (char *dest, char *src) { int i, j; unsigned char c; unsigned int s, d; j = 0; for (i = 0; i < strlen(src); i ++) { c = src[i]; if (c >= 0xe0 && c <= 0xef) { // UTF-8 3バイトエリア s = ((unsigned int)src[i + 1] << 8) | ((unsigned int)src[i + 2] & 0xff); i = i + 2; d = 0; if (c = 0xef) if (s >= 0xBDA1 && s <= 0xBDBF) { // 半角カナ1 d = (s - 0xBD00); } else if (s >= 0xBE80 && s <= 0xBE9F) { // 半角カナ2 d = (s - 0xBDC0); } dest[j] = d & 0xff; j ++; } else { // 無変換 dest[j] = c; j ++; } } dest[j] = 0; return j; } int print2 (char *data) { char buf[256]; utf82sjis(buf, data); lcd.print(buf); } void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); print2("hello, world!"); lcd.setCursor(0, 1); print2("コンニチハ,セカイ!"); } void loop() { }
コメント
コメントを投稿