ArduinoDemo分類:音樂盒與電子琴
總覽:
26-2利用Arduino板播放鋼琴入門音樂—小星星(Little Star)。小星星
簡譜如表11-3 所示,每一段有4 小節,每小節有4 拍,演奏速度是每分鐘120 拍。並使用6 個LED 顯示C、D、E、F、G、A 等6 個目前正在播放的音符。
32-2使用1 個TACK 按鍵開關SW,控制播放四首音樂,同時使用LED顯示播放的音符。
33-1使用七個按鍵開關實作一電子琴,要有C、D、E、F、G、A、B七個音階,並利用另外三個按鍵開關 切換成 低/中/高音模式。
const int speaker=2;
char toneName[]="CDEFGAB";
unsigned int frequency[7]={523,587,659,694,784,880,988};
byte led[]={14,15,16,17,18,19,20};
char beeTone[]="CCGGAAGFFEEDDCGGFFEEDGGFFEEDCCGGAAGFFEEDDC";
byte beeBeat[]={1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,
1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2};
const int beeLen=sizeof(beeTone);
unsigned long tempo=120;
int i,j;
void setup()
{
}
void loop()
{
for(i=0;i<beeLen;i++)
playTone(beeTone[i],beeBeat[i]);
delay(3000);
}
void playTone(char toneNo,byte beatNo)
{
unsigned long duration=beatNo*60000/tempo;
for(j=0;j<7;j++)
{
if(toneNo==toneName[j])
{
tone(speaker,frequency[j]);
analogWrite(led[j],255);
delay(duration);
noTone(speaker);
analogWrite(led[j],0);
}
}
}
const int speaker=2;
const int sw=4;
const int debounce=20;
char toneName[]="CDEFGAB";
unsigned int frequency[7]={523,587,659,694,784,880,988};
byte led[]={14,15,16,17,18,19,20,3};
char beeTone[]="GEEFDDCDEFGGGGEEFDDCEGGEDDDDDEFEEEEEFGGEEFDDCEGGC";
char starTone[]="CCGGAAGFFEEDDCGGFFEEDGGFFEEDCCGGAAGFFEEDDC";
char tigerTone[]="CDECCDECEFGEFGGAGFECGAGFECCGCCGC";
char trainTone[]="GGECGGECDEFFEFGGGEGEDECFDDDECCCDEFDCBC";
byte beeBeat[]={1,1,2,1,1,2,1,1,1,1,1,1,2,
1,1,2,1,1,2,1,1,1,1,4,
1,1,1,1,1,1,2,1,1,1,1,1,1,2,
1,1,2,1,1,2,1,1,1,1,4};
byte starBeat[]={1,1,1,1,1,1,2,1,1,1,1,1,1,2,
1,1,1,1,1,1,2,1,1,1,1,1,1,2,
1,1,1,1,1,1,2,1,1,1,1,1,1,2};
byte tigerBeat[]={1,1,1,1,1,1,1,1,1,1,2,1,1,2,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2};
byte trainBeat[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,2};
unsigned long tempo=180;
const int beeLen=sizeof(beeTone);
const int starLen=sizeof(starTone);
const int tigerLen=sizeof(tigerTone);
const int trainLen=sizeof(trainTone);
int len=0;
int num;
int keyVal=0;
void setup()
{
pinMode(sw,INPUT_PULLUP);
}
void loop()
{
if(digitalRead(sw)==0)
{
delay(debounce);
while(digitalRead(sw)==0)
;
keyVal++;
if(keyVal>4)
keyVal=0;
num=0;
if(keyVal==1)
len=beeLen;
else if(keyVal==2)
len=starLen;
else if(keyVal==3)
len=tigerLen;
else if(keyVal==4)
len=trainLen;
}
if(keyVal==1 && len>0)
{
playTone(beeTone[num],beeBeat[num]);
num++;
len--;
}
else if(keyVal==2 && len>0)
{
playTone(starTone[num],starBeat[num]);
num++;
len--;
}
else if(keyVal==3 && len>0)
{
playTone(tigerTone[num],tigerBeat[num]);
num++;
len--;
}
else if(keyVal==4 && len>0)
{
playTone(trainTone[num],trainBeat[num]);
num++;
len--;
}
}
void playTone(char toneNo,byte beatNo)
{
unsigned long duration=beatNo*60000/tempo;
int j;
for(j=0;j<7;j++)
{
if(toneNo==toneName[j])
{
tone(speaker,frequency[j]);
analogWrite(led[j],255);
delay(duration);
noTone(speaker);
analogWrite(led[j],0);
}
}
}
const int speaker=2;
const int key[]={11,12,13};
const int sw[]={4,5,6,7,8,9,10};
const int toneTable[7][5]={
{ 66, 131, 262, 523, 1046}, // C Do
{ 74, 147, 294, 587, 1175}, // D Re
{ 83, 165, 330, 659, 1318}, // E Mi
{ 88, 175, 349, 698, 1397}, // F Fa
{ 98, 196, 392, 784, 1568}, // G So
{110, 220, 440, 880, 1760}, // A La
{124, 247, 494, 988, 1976} // B Si
};
int i;
int val;
void setup()
{
for(i=0;i<8;i++)
pinMode(key[i],INPUT_PULLUP);
pinMode(sw[i],INPUT_PULLUP);
}
void loop()
{
for(i=0;i<8;i++)
{
val=digitalRead(sw[i]);
if(val==0)
tone(speaker,toneTable[i],100);
}
}
分類:LCD顯示器與溫度控制系統 總覽: 27-2控制LCD在第0列第3行顯示學號"0123456789",在第1列閃爍顯示電腦鍵盤輸入字元,按減號"-"鍵可以清除輸入字元。 37-2在第0行、第0列顯示字元"up counter",在第0行、第1列顯示0000~9999計數值,每秒上數加1。 46-1在第0行、第0列顯示"2013年08月05日",在第0行第1列顯示"I愛 LCD",愛心符號如圖10-16所示。 52-2控制LCD顯示兩位15~16數字字形計數00~99,每秒上數加1。
Dec 23, 2020分類:互動式感測器 總覽: 14-2使用Arduino 板讀取類比電壓值,並顯示於Serial Monitor 視窗。當類比電壓大於2.5V 則LED 亮,否則LED 不亮。 19-2使用Arduino 板讀取類比電壓值,控制LED 亮度。當類比電壓值愈小時,LED 較暗,當類比電壓值愈大時,LED 較亮。 30-2使用Arduino 板配合CDS 元件偵測光線的強弱,並以三個LED指示光線的強弱。當光線轉暗時,只有LED1 亮;當光線介於全暗與全亮之間時,只有LED2 亮;當光線轉強時,只有LED3 亮。 37-2配合移動偵測器設計自動小夜燈,當晚上有人靠近時,點亮LED 20秒後關閉,當無人靠近時,關閉LED。
Dec 23, 2020分類:串列埠 總覽: 33-2使用Arduino 板控制LED 單燈閃爍左移,同時將LED 目前狀態 傳送至電腦中。當LED 亮時,狀態為HIGH;當LED 暗時,狀態為LOW。 38-3從Arduino板接收傳腦傳送的訊息,並於Serial Monitor視窗顯示所接收的數字,須可接收與顯示 -32768以上到32767以下的數字。 44-1接收電腦鍵盤輸入鍵值來控制LED。輸入0 鍵則LED 暗,輸入1 鍵則LED 亮,輸入2 鍵則LED 快閃,輸入3 鍵則LED 慢閃。 33-2使用Arduino 板控制LED 單燈閃爍左移,同時將LED 目前狀態傳送至電腦中。當LED 亮時,狀態為HIGH;當LED 暗時,狀態為LOW。
Dec 23, 2020分類:LED與開關控制 總覽: 41-1控制四個LED 執行霹靂燈閃爍移位變化。 49-2控制兩個LED 輪流由最暗變化至最亮,再由最亮變化至最暗。 54-2控制四個LED 亮度變化並依序來回左右移。每一個LED 亮度由暗逐漸變亮,再由亮逐漸變暗。 59-2控制四個LED 模擬拖尾霹靂燈變化。
Dec 23, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up