プログラミングしていく!
ここで一旦通電チェックも含め、プログラムを書き込んでいきます。
プログラミングするための環境設定
今回使う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)がきちんと光ったら通電しているので、次のステップにいきましょう。通電してない場合はどこか違う配線になっているか、違う配線同士が接触していないかなど、問題を探して解決していきましょう。
