プログラミングしていく!
ここで一旦通電チェックも含め、プログラムを書き込んでいきます。
プログラミングするための環境設定
今回使うLilyPad Arduino 328はプログラミングする際にArduino IDEというソフトウェアを使います。このArduino IDEはフリーソフトです。公式サイトから各自のパソコンにダウンロードしてください。
ライブラリのインストール
LilyPad Arduino 328はもともとArduino IDEにボードがインストールされているため、今回はボードのインストールは行いません。よって、NeoPixel(LED)を光らせるためのライブラリのみインストールしていきます。
まず[Arduino]>[Preferences]をクリックしてください。
上記のAdafruitのURLをコピーして、追加のボードマネージャーのURLに貼り、OKをクリックしてください。
https://www.adafruit.com/package_adafruit_index.json
コピー&ペーストが完了したら、NeoPixelを光らせるために必要なライブラリをインストールします。[スケッチ]>[ライブラリ]を[インクルード]>[ライブラリを管理]をクリックしてください。
画面が表示されるので、検索欄に「Neopixel」と入力しましょう。下記のようになります。「Adafruit Neopixel by Adafruit」を選択してインストールしてください。
プログラミングを書き込む
以下のプログラムをArduino IDEにコピー&ペーストしてください。
#include <Adafruit_NeoPixel.h> #define N_PIXELS 4 // 使用するNeopixel LED の数 #define MIC_PIN A0 // Mic Ampを接続するピン番号 #define LED_PIN 7 // NeoPixel LED を接続するピン番号 #define DC_OFFSET 0 // DC offset i #define NOISE 80// Mic Amp 信号のNoise/hum/interference #define SAMPLES 60 // ダイナミックレベル調節でブッファーの長さ設定 #define TOP (N_PIXELS) byte peak = 0, dotCount = 0, volCount = 0; int vol[SAMPLES], lvl = 20, minLvlAvg = 0, maxLvlAvg = 1024; Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800); void setup() { memset(vol,0,sizeof(int)*SAMPLES); strip.begin(); } void loop() { uint8_t i; uint16_t minLvl, maxLvl; int n, height; n = analogRead(MIC_PIN); n = abs(n - 512 - DC_OFFSET); n = (n <= NOISE) ? 0 : (n - NOISE); lvl = ((lvl * 7) + n) >> 3; height = TOP * (lvl - minLvlAvg) / (long)(maxLvlAvg - minLvlAvg); if(height < 0L) height = 0; else if(height > TOP) height = TOP; if(height > peak) peak = height; uint8_t bright = 255; #ifdef POT_PIN bright = analogRead(POT_PIN); #endif strip.setBrightness(bright); for(i=0; i<N_PIXELS; i++) { if(i >= height) strip.setPixelColor(i, 100, 0, 100); else strip.setPixelColor(i,Wheel(map(i,100,strip.numPixels()-1,30,150))); } strip.show(); vol[volCount] = n; if(++volCount >= SAMPLES) volCount = 0; minLvl = maxLvl = vol[0]; for(i=1; i<SAMPLES; i++) { if(vol[i] < minLvl) minLvl = vol[i]; else if(vol[i] > maxLvl) maxLvl = vol[i]; } if((maxLvl - minLvl) < TOP) maxLvl = minLvl + TOP; minLvlAvg = (minLvlAvg * 63 + minLvl) >> 6; maxLvlAvg = (maxLvlAvg * 63 + maxLvl) >> 6; } uint32_t Wheel(byte WheelPos) { if(WheelPos < 85) { return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170) { WheelPos -= 85; return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else { WheelPos -= 170; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } }
次にボード、プロセッサ、シリアルポート、書込装置を以下の写真と同じものに設定していきます。
- ボード:LilyPad Arduino
- プロセッサ:ATmega328P
- シリアルポート:/dev/cu.usbserial-Al04HO4K ※Windowsの場合表記が異なります。
- 書込装置:AVRISP mkll
書き込みのボタン(→)をクリックするとプログラムがLilyPadマイコンに書き込まれます。
書き込みが終了したら以下の写真のように表示されるので、そうなったらケーブルを外しても大丈夫です。
ここでNeoPixel(LED)がきちんと光ったら通電しているので、次のステップにいきましょう。通電してない場合はどこか違う配線になっているか、違う配線同士が接触していないかなど、問題を探して解決していきましょう。