char buffer[18];
int red,green,blue;
int RedPin = 6;
int GreenPin = 5;
int BluePin = 4;
int length;//定義一個變量用來表示共有多少個音符
int tonePin = 7; //蜂鳴器的pin
int tune[] =
{
356,450,600,
};
//曲子的節拍,即音符持續時間
float duration[] =
{
1,0.5 ,1,
};
void setup()
{
{
pinMode(tonePin, OUTPUT); //設置蜂鳴器的pin為輸出模式
length = sizeof(tune) / sizeof(tune[0]); //這里用了一個sizeof函數,查出數組里有多少個音符
}
Serial.begin(9600);
Serial.flush();
pinMode(RedPin, OUTPUT);
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
int index=0;
delay(100);
int numChar = Serial.available();
if (numChar>15)
{
numChar=15;
}
while (numChar--)
{
buffer [index++] = Serial.read();
}
splitString(buffer);
}
}
void splitString(char* data)
{
Serial.print("Data entered: ");
Serial.println(data );
char* parameter;
parameter = strtok (data, ",");
while (parameter !=NULL)
{
setLED(parameter);
parameter = strtok (NULL, ",");
}
for (int x=0; x<16; x++)
{
buffer[x]='\0';
}
Serial.flush();
}
void setLED(char* data)
{
delay(500);
if ((data[0] == 'g')|| (data[0] == 'G'))
{
int Ans = strtol(data+1,NULL,10);
Ans = constrain(Ans,0,255);
analogWrite(GreenPin, Ans);
Serial.print("Green is set to: ");
Serial.println(Ans);
}
if ((data[0] == 'b')|| (data[0] == 'B'))
{
int Ans = strtol(data+1,NULL,10);
Ans = constrain(Ans,0,255);
analogWrite(BluePin, Ans);
Serial.print("Blue is set to: ");
Serial.println(Ans);
}
if ((data[0] == 'r')|| (data[0] == 'R'))
{
int Ans = strtol(data+1,NULL,10);
Ans = constrain(Ans,0,255);
analogWrite(RedPin, Ans);
Serial.print("Red is set to: ");
Serial.println(Ans);
}
yinyue();
}
void yinyue()
{
for (int x = 0; x < length; x++) //循環音符的次數
{
tone(tonePin, tune[x]); //依次播放tune數組元素,即每個音符
delay(400 * duration[x]); //每個音符持續的時間,即節拍duration,400是調整時間的越大,曲子速度越慢,越小曲子速度越快
noTone(tonePin);//停止當前音符,進入下一音符
}
delay(500);//等待0.5秒后,循環重新開始
}
|