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秒后,循环重新开始
}
|