はじめてのTinyduino

みんなが大好きFry'sをうろうろしていて発見したTinyduino。名前からして小さいArduinoなんだろうな、と思っていたけど、買わずにいた。ところが違う日に行ったらなんと値下げをしていた。

この前のワイヤレスリモコンの改造で使ったのはRaspberry Piだったけど、30usecみたいな時間をうまく作れなくて、測定して結果だけ合わせたっていう残念な経験があったから、これはLinuxのせいなのかPythonのせいなのかわからないけど、Arduionoのほうが軽量だしusec単位で時間管理できるんじゃないの?と期待がわいた。検索したところこれを発見。

www.arduino.cc

なるほど、usec単位で待てそうなAPIがあるじゃないか。1MHzで動いているとしたら1 clockが1usec。あんまり期待はできないけど、セールしてるとなると今買うしかない。

というわけで買ったまましばらく放置してしまったけど、初めてのTinyduinoをやってみたのでメモ。前置きが長い。

公式サイトにはたくさん無造作にチュートリアルがならんでて、どれを最初に見るべきかわかりにくかったけど、これを参考にした。

tinycircuits.com

つまづいたのは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のチュートリアルはこちら。

tinycircuits.com

こんな接続方法知らなかったけど、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);
}