
pinMode(i, OUTPUT); //設定輸出腳位
digitalWrite(led[i],HIGH); //LED是否亮(HIGH為亮 LOW為暗),已達成閃爍效果
2.結合LED閃爍和蜂鳴器


讓蜂鳴器響時LED同時閃
void playNote(char note, int duration)
{
int led[]={2,3,4,5,6,7,9,10,11};
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
for (int i = 0; i < 8; i++)
{
if (names[i] == note)
{
digitalWrite(led[i],HIGH); //LED亮
playTone(tones[i], duration); //蜂鳴器響
digitalWrite(led[i],LOW); //LED暗
}
}
}
void setup()
{
for(int i=2;i<=13;i++) pinMode(i, OUTPUT); //設定輸出腳位
}
3.1利用button換歌

if (sensorVal == HIGH)
{
for (int i = 0; i < length; i++)
{
if (ttlsnotes[i] == ' ')
{
delay(ttlsbeats[i] * tempo);
}
else
playNote(ttlsnotes[i], ttlsbeats[i] * tempo);
if(digitalRead(button)==LOW) break; //離開迴圈,重新偵測button值
delay(tempo / 2);
}
}
else
{
for (int i = 0; i < lengths; i++)
{
if (jbnotes[i] == ' ')
{
delay(jbbeats[i] * tempo);
}
else
playNote(jbnotes[i], jbbeats[i] * tempo);
if(digitalRead(button)==LOW) break; //離開迴圈,重新偵測button值
delay(tempo / 2);
}
因為digitalRead(button)預設值是HIGH,所以會重播第一首
3.2解決重播問題

int now=0; //0代表第一首 1代表第二首
void loop()
{
if (now == 0) //播第一首
{
for (int i = 0; i < length; i++)
{
if (ttlsnotes[i] == ' ')
{
delay(ttlsbeats[i] * tempo);
}
else
playNote(ttlsnotes[i], ttlsbeats[i] * tempo);
if(digitalRead(button)==LOW){ //按鈕按下
now=1; //準備換第二首
break;
}
delay(tempo / 2);
}
}
else //1 播第二首
{
for (int i = 0; i < lengths; i++)
{
if (jbnotes[i] == ' ')
{
delay(jbbeats[i] * tempo);
}
else
playNote(jbnotes[i], jbbeats[i] * tempo);
if(digitalRead(button)==LOW){ //按鈕按下
now=0; //準備換第一首
break;
}
delay(tempo / 2);
}
}
}
沒有留言:
張貼留言