Soraken’s Style

つれづれ

8pinoとTrinket

ここまで2ヶ月ほど、8pinoで(というより、開発環境側のMacで)苦労してしまいましたが、この8pinoは前回の品モノラボでゲットした貴重な一品。いろいろやっているうちに壊してしまったりすると悲しいので、8pinoのサイトに書かれていたAdafruit社のTrinketを購入することにしました。

 

購入先はスイッチサイエンスさんです。1週間もしないうちに届きました。

8pinoと比べてみたところ。

f:id:soraken:20141008205426p:plain

8pinoの小ささがよくわかります。

これからしばらくは、8pino向けの開発をTrinketでいろいろやってから、最後に8pinoに載せて行く方法を採りたいと思います。

 

で、早速、前回のBlinkプロジェクトをTrinketに書き込んだところが下の図。(あ、ただし、Trinketには付属のピンヘッダを半田づけしました)

f:id:soraken:20141008214952p:plain

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の出力をオシロでみたのが下の図です。

 

f:id:soraken:20141008223432p:plain

きれいに1msecでOn/Offしています。うん、ちゃんとできてる。

では、今度は、On/Offの間隔をだんだんと変えるプログラムを試してみます。

/*

increasing and decreasing pulse Test

*/

// Pin 1 has an LED connected on most Arduino boards.

// 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)
  {
    period = -1;
  }

  if (time <= 0)

  {

    period = 1;

  }

  time = time + period;

  digitalWrite(led, HIGH);         // turn the LED on (HIGH is the voltage level)

  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つの波形を別々にとってみました。

f:id:soraken:20141008230722p:plain

f:id:soraken:20141008230730p:plain

うん。これもまあまあ思った通りに光ってますね。ちょっと点灯時間が短い時にLEDがチカチカするので、この部分を滑らかに光らせるといいかもしれませんね。