本帖最后由 IXDD 于 2022-2-8 17:15 编辑
是一个小的控制二极管发光的装置。按动左侧按钮后,右侧对应的二极管就会发光(按第一个按钮,右侧第一个二极管会发光)但是现在发现按了按扭后,对应的二极管不一定发光,而可能是另外三个二极管发光,变得很随机。
以下是程序(用了多个if,但是之前用else if 也存在这个问题)
int btn1=8,btn2=9,btn3=10,btn4=11;
int key1=-1,key2=-1,key3=-1,key4=-1;
int led1=2,led2=3,led3=4,led4=5;
void setup() {
// initialize digital pin LED_BUILTIN as an output.
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(8,INPUT);
pinMode(9,INPUT);
pinMode(10,INPUT);
pinMode(11,INPUT);
}
void loop() {
key1=digitalRead(btn1);//读取针脚电平
if(key1==0){//判断按键是否被按下
for(int x=0 ; x<=255 ; x += 15)//led渐亮
{
analogWrite(led1,x);
delay(50);
}
for(int x=255;x>=0;x-=5)//led渐暗
{analogWrite(led1,x);
delay(30);
key1==1;
}
}
key2=digitalRead(btn2);
if(key2 == 0){
for(int y=0 ; y<=255 ; y += 15)
{
analogWrite(led2,y);
delay(50);
}
for(int y=255;y>=0;y-=5)
{analogWrite(led2,y);
delay(30);
}
}
key3=digitalRead(btn3);
if (key3 == 0){
for(int z=0 ; z<=255 ; z += 15)//led渐亮
{
analogWrite(led3,z);
delay(50);
}
for(int z=255;z>=0;z-=5)//led渐暗
{analogWrite(led3,z);
delay(30);
}
}
key4=digitalRead(btn4);
if(key4 == 0){
for(int a=0 ; a<=255 ; a += 15)
{
analogWrite(led4,a);
delay(50);
}
for(int a=255;a>=0;a-=5)
{analogWrite(led4,a);
delay(30);
}
}
}
|