八頭ものづくり教室(第三回)スケッチ
曲 | 曲名 | スケッチ内名称 |
---|---|---|
曲1 | 四季の歌 | shikinouta |
曲2 | ハウルのメインテーマ | haurunomaintame |
曲3 | たきび | takibi |
曲4 | Wake up | wakeup |
曲5 | RPG(sekai no owari) | rpg |
曲6 | おぼろ月夜 | oboroduki |
曲7 | ニンジャりバンバン | ninjaribanban |
曲8 | くつがなる | kutsuganaru |
曲9 | みかんの花咲く丘 | mikannnohanasakuoka |
曲10 | 千本桜(配信用) | senbonzakura |
曲11 | 箱根八里 | hakonehachiri |
曲12 | ジングルベル | bell |
曲13 | We Wish You a Merry Christma | merrychristmas |
曲14 | Let It Go(アナと雪の女王) | letitgo |
パターン | 光り方 | スケッチ内名称 |
---|---|---|
パターンA | 音が再生されるたびに発光箇所(一箇所)と色が変化 | patternFlushPoint |
パターンB | 音が再生されるたびにLEDの輪が回転 | patternFlushC |
パターンC | 3音再生されるたびに発光色が変化,すべてのLEDは同じ色 | patternFlushPointSlow |
パターンD | 音が再生される都度,LEDが円を描くように発光(色は順に変化) | patternFlushTurn |
パターンE | 音の高さに応じてすべてのLEDの色が変わる | patternPitch2Color |
パターンF | 音が再生されるたびに3箇所(ランダム)のLEDの色(ランダム)が変わる | patternRandom3 |
パターンG | 4音再生されるたびにすべてのLEDの色(ランダム)が変わる,3音目で消灯 | patternRandom3Blink |
//曲1
melody.setMelody(shikinouta_Melody,shikinouta_Duration,shikinouta_Length);
//曲2
melody.setMelody(haurunomaintame_Melody,haurunomaintame_Duration,haurunomaintame_Length);
//曲3
melody.setMelody(takibi_Melody,takibi_Duration,takibi_Length);
//曲4
melody.setMelody(wakeup_Melody,wakeup_Duration,wakeup_Length);
//曲5
melody.setMelody(rpg_Melody,rpg_Duration,rpg_Length);
//曲6
melody.setMelody(oboroduki_Melody,oboroduki_Duration,oboroduki_Length);
//曲7
melody.setMelody(ninjaribanban_Melody,ninjaribanban_Duration,ninjaribanban_Length);
//曲8
melody.setMelody(kutsuganaru_Melody,kutsuganaru_Duration,kutsuganaru_Length);
//曲9
melody.setMelody(mikannnohanasakuoka_Melody,mikannnohanasakuoka_Duration,mikannnohanasakuoka_Length);
//曲10
melody.setMelody(senbonzakura_Melody,senbonzakura_Duration,senbonzakura_Length);
//曲11
melody.setMelody(hakonehachiri_Melody,hakonehachiri_Duration,hakonehachiri_Length);
//曲12
melody.setMelody(bell_Melody,bell_Duration,bell_Length);
//曲13
melody.setMelody(merrychristmas_Melody,merrychristmas_Duration,merrychristmas_Length);
//曲14
melody.setMelody(letitgo_Melody,letitgo_Duration,letitgo_Length);
//パターンA
playPattern(patternFlushPoint,allcolor);
//パターンB
playPattern(patternFlushC,allcolor);
//パターンC
playPattern(patternFlushPointSlow,allcolor);
//パターンD
playPattern(patternFlushTurn,allcolor);
//パターンE
playPattern(patternPitch2Color,allcolor);
//パターンF
playPattern(patternRandom3,allcolor);
//パターンG
playPattern(patternRandom3Blink,allcolor);
// これより上は基本的に変更の必要なし
//3つのパターンについてそれぞれ別の曲を再生させている
//タクトスイッチを押せば次のパターンに変化
void loop(){
//曲名[merrychristmas]を設定(曲リストの「スケッチ内名称」を参照のこと)
//melody.setMelodyの引数として
// merrychristmas_Melody:音程リスト
// merrychristmas_Duration:音長さリスト
// merrychristmas_Length:曲長さ
//を設定している
melody.setMelody( merrychristmas_Melody, merrychristmas_Duration, merrychristmas_Length);
//パターン名[patternFlushPointSlow]を設定(パターンリストの「スケッチ内名称」を参照のこと)
//playPatternの引数として
// patternFlushPointSlow:パターン
// allcolor:使用する色リスト
//を指定すれば、そのパターンで発光&曲再生開始(タクトスイッチが押されると終了)
playPattern(patternFlushPointSlow,allcolor);
//曲名[bell]を設定し、パターン名[patternFlushTurn]で発光&曲再生開始
melody.setMelody( bell_Melody, bell_Duration, bell_Length);
playPattern(patternFlushTurn,allcolor);
//曲名[letitgo]を設定し、パターン名[patternRandom3Blink]で発光&曲再生開始
melody.setMelody( letitgo_Melody, letitgo_Duration, letitgo_Length);
playPattern(patternRandom3Blink,allcolor);
//余計なことを書かない
}
pin name | pin mode | connect circuit |
---|---|---|
d0 | OUT | Anode1 |
d1 | OUT | Anode2 |
d2 | OUT | Anode3 |
d3 | OUT | Anode4 |
d4 | OUT | Anode5 |
d5 | OUT | Cathode green |
d6 | OUT | Cathode blue |
d7 | OUT | Cathode red |
d8 | OUT | Buzzer |
d9 | PULLUP | Tact switch |
d10 | OUT | Anode6 |
d11 | OUT | Anode7 |
d12 | OUT | Anode8 |
d13 | OUT | Anode9 |
ファイル名 | 内容 |
---|---|
RGB_matrix.ino | スケッチのメイン |
led_fullcolor_9.h | 9個のフルカラーLEDをダイナミック点灯制御するためのライブラリ |
digiRW.h | 高速にIO処理を行うためのライブラリ |
playMelody.h | メロディの再生のためのライブラリ |
sounds.h | メロディを記述 |
pattern.ino | 発光パターンを記述 |
README.md | このファイル |
LICENCE | The MIT License |
[reference] | 参考プロジェクト |
namespaceで定義している
void init(); //初期化
void setInterval(int val); //ダイナミック点灯制御の切り替え周期[ms]
void set(byte bit,LedColor color); //{bit}番目のLEDを{color}色に設定
void setAll(LedColor color); //すべてのLEDを{color}色に設定
void lighting(); //設定された状態に発光({interval}[ms]以内に定期的に呼び出しする必要あり)
void lighting(LedColor data[]); //{data}の定義どおりに発光({interval}[ms]以内に定期的に呼び出しする必要あり)
void lightingWhile(unsigned long wait); //設定された状態に{wait}[ms]発光
void lightingWhile(LedColor data[],unsigned long wait); //{data}のどおりに{wait}[ms]発光
LedColor pattern1[9];
pattern1[0]=RED; //[RED,GREEN,BLUE]で色を指定
pattern1[1]=GREEN;
pattern1[2]=BLUE;
pattern1[3]=CYAN; //[CYAN,YELLOW,MAGENTA]からも選択可能
pattern1[4]=YELLOW;
pattern1[5]=MAGENTA;
pattern1[6]=WHITE; //[WHITE]を選択可能
pattern1[7]=OFF; //光らせない時は[OFF]
pattern1[8]=OFF;
Led::lightingWhile(pattern1,1500); //pattern1を1500[ms]出力し続ける
Led::setAll(OFF);
Led::set(0,BLUE); //set(led,color):指定ledを指定色に設定
Led::set(3,RED);
Led::set(5,GREEN);
Led::set(8,BLUE);
Led::lightingWhile(800); //設定済みの色で800[ms]出力し続ける
Led::setAll(OFF); //すべて同じ色ならsetAll()で設定可能
Led::lightingWhile(2000); //設定済みの色で2000[ms]出力し続ける
classとして定義している
曲ごとに宣言する想定
PlayMelody(int pin);
void setMelody(int* _melodyArr,int* _durationArr,int _length); //メロディーの設定
int play(); //再生(戻り値[1:新しい音の出力][0:前回と同じ音を出力])
void pause(); //一時停止、再び再生するときは停止したところから
void stop(); //停止、再び再生するときははじめから
void moveTo(int _position); //再生位置移動
int getPosition(); //再生位置を返す
int getPitch(); //再生中の音程を返す
int getDuration(); //再生中の音の再生時間を返す[ms]
int getRest(); //再生中の音の残り再生時間を返す[ms]
int getRestRate(); //再生中の音の残り再生時間を返す(1~0)
int isPlaying(); //戻り値[0:再生終了][その他:再生中の音程]
曲の再生と1000[ms]の無音を交互に繰り返すスケッチ (曲はsound.h内に定義)
#include "sounds.h"
#include "playMelody.h"
#include "led_fullcolor_9.h"
#define BUZZER_PIN 8
#define SWITCH_PIN 9
#define playPattern(x,y) playPat(x,y,(int)(sizeof(y)/sizeof(y[0])))
int playPat(int (*pattern)(LedColor*,int),LedColor*,int);
LedColor allcolor[7] = {WHITE,RED,GREEN,BLUE,CYAN,YELLOW,MAGENTA};
PlayMelody melody(BUZZER_PIN);
PlayMelody song1(BUZZER_PIN);
void setup(){
song1.setMelody(melody1,noteDurations1,82);
pinMode( SWITCH_PIN, INPUT_PULLUP);
analogReference(INTERNAL);
randomSeed(analogRead(0));
Led::init();
Led::setInterval(3);
}
void loop(){
song1.play();
while( song1.isPlaying() ) song1.play();
song1.stop();
delay(1000);
melody.setMelody( haurunomaintame_Melody, haurunomaintame_Duration, haurunomaintame_Length);
playPattern(patternA,allcolor);
}