尝试通过在c中输入字符来更改Arduino中LED的亮度

尝试通过在c中输入字符来更改Arduino中LED的亮度,arduino,arduino-uno,Arduino,Arduino Uno,我们正在尝试制作一个程序,通过按键改变连接到Arduino的LED的亮度。c串口通信部分已经完成,但是Arduino部分出现了一些问题 int-LedPin=3; 内部亮度=90; 除焦器; 无效设置(){ Serial.begin(9600); 引脚模式(LED引脚,输出); } 空循环(){ 如果(Serial.available()>0) deger=Serial.read(); 如果(deger='C'){ 亮度=0; 模拟写入(LED引脚,亮度); }//在发生错误后将亮度设置为0 如

我们正在尝试制作一个程序,通过按键改变连接到Arduino的LED的亮度。c串口通信部分已经完成,但是Arduino部分出现了一些问题

int-LedPin=3;
内部亮度=90;
除焦器;
无效设置(){
Serial.begin(9600);
引脚模式(LED引脚,输出);
}
空循环(){
如果(Serial.available()>0)
deger=Serial.read();
如果(deger='C'){
亮度=0;
模拟写入(LED引脚,亮度);
}//在发生错误后将亮度设置为0
如果(deger='A'){
如果(亮度>=255)
亮度=0;
亮度=亮度+15;//在每次输入时将led亮度增加15
模拟写入(LED引脚,亮度);
}
如果(deger='B'){

如果(亮度您的代码的一个主要问题是因为您使用
deger
作为全局变量,并且重复调用
loop
,则每次循环运行时都会应用亮度的增加/减少,而不是仅在收到按键时才应用一次

您可以通过以下几种方法之一解决此问题。您可以在
循环
的末尾清除
deger
。您还可以根据第一个
if
条件将最后3个
if
语句括在括号中,以便它们仅在读取字符时运行

但是,最合乎逻辑的方法是使
deger
成为在“loop”开头声明的局部变量,因为不需要使它在调用之间保持不变:

void loop () {
    char deger = 0; 

首先,我会使用开关,而不是3个if

第二,将内部if修改为:

switch(deger)
{
case 'A':
        if(brightness+15>=255)
           {
            brightness = 0;
           }
        brightness=brightness+15;   
        analogWrite (LedPin, brightness);
break;
}

尝试将亮度设置为字符而不是整数。首先,将边界测试移到调整亮度的代码之后。否则,您最终将发送0-255以外的值到analogWrite。我对Arduinos不太熟悉,无法提供更具体的建议,但这在任何系统上都是一个常见问题。同意。在您的情况下,如果亮度为250,则condition brightness>255将为false,然后您将亮度增加15,并将该值写入模拟输出中。@Olaf如果您编辑标记并删除C(我同意)您至少可以编辑代码以指定语言,这样代码就不会失去颜色。另外,更正缩进也很好。@Olaf标记与语法突出显示相关。语言和突出显示是从标记中推断出来的。如果没有使用语言标记,则必须手动指定。代码w实际上,它正确地突出显示为C,但您的编辑删除了标记并破坏了突出显示。这就是为什么我发表了评论…(如果您修复它,它仍然会很好)