大人の科学の付録8bitマイコン「Japanino」で小室さん復帰を祝ってPOVで「Get Wild」

 タイトル長いですが、そのまんまです。大人の科学の付録でJapaninoという8bitマイコンがついていたので、もちろん衝動買いしました。

大人の科学 Vol.27

 以前「5188円で始めるフィジカルコンピューティング」や「Arduinoでエアドラムのブチャラティ(Buccellati)作製」で使ったArduinoというマイコンの互換基板(親戚みたいなもの)です。Macだと書き込みのときリセットを手動でかけないといけなくてタイミングがシビアという噂をTwitterで見て少し後悔していたのですが、実際試してみたらほとんど失敗することもなく、自分としては許容範囲かなといったところ。

 早速試してみました。Japaninoには付属品としてPOVという表示器とスピーカがついていて、すぐ音や光を出力することができます。単四電池ボックスもついているので、アウトドアも可能と至れり尽くせりです。最近しばらく手をつけれてなかったけど、よいオモチャが手に入ったことだしまた何かちょいちょい作ってみようかな。
 とりあえず、小室さんのオリコン1位を祝して動作テストを兼ねてPOVで「Get Wild」と表示することにします。

大人の科学 Vol.27 コーディング中
 コーディング中。

大人の科学 Vol.27 Japanino
 完成したプログラムをマイコンに書き込み中。本誌にも注意書き書いてあるけど、Macの場合は、プログラムをマイコンに書き込むときリセットボタンを手動で押す必要があるので注意。プログラムサイズが表示された瞬間から、ゆっくり2秒押し続けてから離せばまず失敗しないよ。
 そんなこんなで完成。取りかかってから付録の組み立て、ソフトのインストール、コーディングで大体1時間くらいで完成できます。表示の様子を動画にしてみました。


 Get Wild and cheap!

8ビットマイコン (大人の科学マガジンシリーズ)

8ビットマイコン (大人の科学マガジンシリーズ)

  • 発売日: 2010/05/14
  • メディア: ムック
 こんな素敵な大人の科学 Vol.27は今なら全国の本屋さんで平積みされています。

 以下ソースコードです。付録のプログラムの表示部分を変えてコメント削除しただけですが、自分用のメモとして残しておきます。見たいという奇特な方は「続きを読む」をクリックして下さい。

#define LEDPIN 7 
#define SWPIN 6

// Get Wild
byte bitmap[] = {
0b00000000,
0b00111110,
0b01000001,
0b01001001,
0b00111000,
0b00001000,
0b00000000,
0b00000000,
0b01111111,
0b01001001,
0b01000001,
0b00000000,
0b00000001,
0b01111111,
0b00000001,
0b00000000,
0b00000000,
0b00000000,
0b00111111,
0b01000000,
0b00111000,
0b01000000,
0b00111111,
0b00000000,
0b00000000,
0b01000001,
0b01111111,
0b01000001,
0b00000000,
0b00000000,
0b01111111,
0b01000000,
0b01000000,
0b00000000,
0b00000000,
0b01111111,
0b01000001,
0b01000001,
0b00111110,
0b01000001,
0b00000000,
0b10000000
};

unsigned char pos = 0;
unsigned char i = 0;

void setup() {
for(char pin = LEDPIN; pin < LEDPIN + 7; pin++) {
  pinMode(pin, OUTPUT);
}
pinMode(SWPIN, INPUT);
digitalWrite(SWPIN, HIGH);
}

void loop() {

if(digitalRead(SWPIN) == LOW) {

  delay(6);
  pos = 0;

  while(bitmap[++pos] != 0b10000000) {
    for(i = 0; i < 7; i++) {
      digitalWrite(LEDPIN + 6 - i, (bitmap[pos] >> i) & 0b00000001);
    }
    delay(1);
  }

  for(i = LEDPIN; i < LEDPIN + 7; i++) {
    digitalWrite(i, LOW);
  }
 }
}