8pinoとTrinket
ここまで2ヶ月ほど、8pinoで(というより、開発環境側のMacで)苦労してしまいましたが、この8pinoは前回の品モノラボでゲットした貴重な一品。いろいろやっているうちに壊してしまったりすると悲しいので、8pinoのサイトに書かれていたAdafruit社のTrinketを購入することにしました。
購入先はスイッチサイエンスさんです。1週間もしないうちに届きました。
8pinoと比べてみたところ。
8pinoの小ささがよくわかります。
これからしばらくは、8pino向けの開発をTrinketでいろいろやってから、最後に8pinoに載せて行く方法を採りたいと思います。
で、早速、前回のBlinkプロジェクトをTrinketに書き込んだところが下の図。(あ、ただし、Trinketには付属のピンヘッダを半田づけしました)
8pinoと違って、GPIO#1の出力で赤いLEDが光ります。
では、ちょっとプログラムをいじってGPIO#1の出力をテストしてみたいと思います。
今度のプロジェクトは、先程のBlinkプロジェクトを簡単にして、GPIO#1を1msec On、1msec Offで繰り返すプログラムです。
/* Pulse Test Turns on an LED on for 1 mse\, then off for 1msec, repeatedly. */ // Pin 1 has an LED connected on most Arduino boards. // give it a name: int led = 1; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); }
// the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1); // wait for a second } |
GPIO#1の出力に10kΩをつけて、TrinketのGNDにプルダウンしておきます。その状態で、GPIO#1の出力をオシロでみたのが下の図です。
きれいに1msecでOn/Offしています。うん、ちゃんとできてる。
では、今度は、On/Offの間隔をだんだんと変えるプログラムを試してみます。
/* increasing and decreasing pulse Test */ // give it a name: int led = 1; int time = 0; int period = 1;
// the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); }
// the loop routine runs over and over again forever: void loop() { if (time >=100) if (time <= 0) { period = 1; } time = time + period; delay(time); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(100 - time); // wait for a second } |
loop()関数の中でdelayの時間を+1したり-1したりしています。if文で上限下限を見ているのがポイントですかね。
これを例によってコンパイルして書き込んで、オシロで波形を見てみたらこんな感じ。点灯時間が長い時と、短い時の2つの波形を別々にとってみました。
うん。これもまあまあ思った通りに光ってますね。ちょっと点灯時間が短い時にLEDがチカチカするので、この部分を滑らかに光らせるといいかもしれませんね。