みんなが大好きFry'sをうろうろしていて発見したTinyduino。名前からして小さいArduinoなんだろうな、と思っていたけど、買わずにいた。ところが違う日に行ったらなんと値下げをしていた。
この前のワイヤレスリモコンの改造で使ったのはRaspberry Piだったけど、30usecみたいな時間をうまく作れなくて、測定して結果だけ合わせたっていう残念な経験があったから、これはLinuxのせいなのかPythonのせいなのかわからないけど、Arduionoのほうが軽量だしusec単位で時間管理できるんじゃないの?と期待がわいた。検索したところこれを発見。
なるほど、usec単位で待てそうなAPIがあるじゃないか。1MHzで動いているとしたら1 clockが1usec。あんまり期待はできないけど、セールしてるとなると今買うしかない。
というわけで買ったまましばらく放置してしまったけど、初めてのTinyduinoをやってみたのでメモ。前置きが長い。
公式サイトにはたくさん無造作にチュートリアルがならんでて、どれを最初に見るべきかわかりにくかったけど、これを参考にした。
つまづいたのはFTDI USBチップのドライバインストール。こんなこと初めてMac上でやったけど、インストールしても認識されなかった。なんで???と思ったけど、パソコンを再起動したら認識された。/dev/cu.usbserial-Dxxxxx ってやつ。あと、手順には書いてなかったけど、プロセッサは3.3V 8MHzを選択した。これは必須なのではないだろうか。
あとは、サンプルから01 BasicsのBlinkを実行してみた。
でも、そもそも電源入れただけで16個あるLEDがぐるぐる回り出したから、最初から何かが書き込んであったっぽいね。
TinyShield Protoというのに、5V, VCC, BATっていうシルク文字があるけど、5VはUSBをつないだときだけ5Vがくる、つないでないと1.4Vとか謎の電圧、VCCはUSBつないでると4.9V、つないでないと電池電圧と同じ。
さて、16 Edge LED Tinyshieldのチュートリアルはこちら。
こんな接続方法知らなかったけど、IOを節約しつつたくさんLEDつけるにはこんな方法があるのね。
こんなサンプルコードがのってるけど、LEDは16個あるのに、forが1から15までしかまわってないから、コネクタのとなりのLEDが光っていないというバグがあります。
/* TinyDuino Edge LED Demo April 9 2014, by Ben Rose This example code is in the public domain. http://www.tiny-circuits.com */ void setup() { LedOn(0);//Pass a zero to turn all LEDs off } void loop() { for(int i=1;i<16;i++){ LedOn(i); delay(20); }; for(int i=16;i>1;i--){ LedOn(i); delay(20); }; } void LedOn(int ledNum) { for(int i=5;i<10;i++){ pinMode(i, INPUT); digitalWrite(i, LOW); }; if(ledNum<1 || ledNum>16) return; char highpin[16]={5,6,5,7,6,7,6,8,5,8,8,7,9,7,9,8}; char lowpin[16]= {6,5,7,5,7,6,8,6,8,5,7,8,7,9,8,9}; ledNum--; digitalWrite(highpin[ledNum],HIGH); digitalWrite(lowpin[ledNum],LOW); pinMode(highpin[ledNum],OUTPUT); pinMode(lowpin[ledNum],OUTPUT); }