本帖最后由 bgsdd 于 2021-12-12 21:18 编辑
按照教程用串口监视器控制LED灯亮度,输入一个数值就能把LED调节到相应亮度,在输入一个数值就继续调节亮度,可教程上是每一次调节都能保持当前亮度,可我这出来的亮度调节到数值后停顿了一下然后自动恢复到0,程序都一样,接线也都一样,不知道什么原因,UNO兼容板:
//利用串口发送指令控制LED灯,0-255之间调节亮度
//逐步调节亮度
//不明白为何循环结束后变量seria1Data会变成0
int brightness; //定义LED亮度变量
int seria1Data; //定义串口数据变量
void setup(){
Serial.begin(9600);//定义串口通信
pinMode(LED_BUILTIN,OUTPUT); //定义LED为输出模式
pinMode(9,OUTPUT); //定义9号端口为输出模式
}
void loop(){
if(Serial.available()>0){ //如果串口监视器有数据
seria1Data=Serial.parseInt(); //读取接收的字符存储到seria1Data变量
Serial.print("seria1Data=");Serial.println(seria1Data);
if(seria1Data >= 0 && seria1Data <= 255){ //如果指令在0-255之间
if(seria1Data>=brightness){ //如果接受指令大于等于当前LED亮度
for (brightness;brightness<=seria1Data;brightness++){ //当前亮度累加调节亮度
analogWrite(9,brightness);//那么端口9输出高电平,值为当前数值
Serial.print("当前亮度=");Serial.println(brightness);//打印实时亮度
delay(10);//调节亮度间隔时间
}
}
else{
for(brightness;brightness >= seria1Data;brightness--){ //当前亮度累减调节亮度
analogWrite(9,brightness);//那么端口9输出高电平,值为当前数值
Serial.print("当前亮度=");Serial.println(brightness);//打印实时亮度
delay(10);//调节亮度间隔时间
}
}
}
}
}
串口监视器的输出,输入了4,接受输入范围是0-255
seria1Data=4
当前亮度=-1
当前亮度=0
当前亮度=1
当前亮度=2
当前亮度=3
当前亮度=4
seria1Data=0
当前亮度=5
当前亮度=4
当前亮度=3
当前亮度=2
当前亮度=1
当前亮度=0
|