小白请教多按键分别控制多个二极管发光的问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 947|回复: 8

[已解决] 小白请教多按键分别控制多个二极管发光的问题

[复制链接]
发表于 2022-2-7 17:13 | 显示全部楼层 |阅读模式
本帖最后由 IXDD 于 2022-2-8 17:15 编辑

是一个小的控制二极管发光的装置。按动左侧按钮后,右侧对应的二极管就会发光(按第一个按钮,右侧第一个二极管会发光)但是现在发现按了按扭后,对应的二极管不一定发光,而可能是另外三个二极管发光,变得很随机。
53f17751d63e31da84a99907d870f59.jpg
以下是程序(用了多个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);
}
}
}

发表于 2022-2-7 17:29 | 显示全部楼层
开关共用上拉电阻?这神仙操作么......
 楼主| 发表于 2022-2-7 17:40 | 显示全部楼层
t3486784401 发表于 2022-2-7 17:29
开关共用上拉电阻?这神仙操作么......

我麻了 所以应该怎么处理比较好
发表于 2022-2-7 20:39 | 显示全部楼层
IXDD 发表于 2022-2-7 17:40
我麻了 所以应该怎么处理比较好

去掉外部上拉,直接开启内部上拉
发表于 2022-2-7 21:46 | 显示全部楼层
只有一張照片看不出你電路怎麼接,
貼電路圖上來吧
发表于 2022-2-8 00:24 | 显示全部楼层
IXDD 发表于 2022-2-7 17:40
我麻了 所以应该怎么处理比较好

目测是接成右边这个样子了,相当于四只开关并联,一只闭合全部闭合,就有了随机的效果:

2022-02-08_002128 - 副本.png
发表于 2022-2-8 03:04 | 显示全部楼层
本帖最后由 topdog 于 2022-2-8 03:09 编辑

你这是多任务多线程的设计,需要用到freeROST。或者使用中断来解决。
 楼主| 发表于 2022-2-8 17:13 | 显示全部楼层
t3486784401 发表于 2022-2-8 00:24
目测是接成右边这个样子了,相当于四只开关并联,一只闭合全部闭合,就有了随机的效果:

啊啊,谢谢您,换了个接法后我现在尝试已经成功了。
 楼主| 发表于 2022-2-8 17:18 | 显示全部楼层
topdog 发表于 2022-2-8 03:04
你这是多任务多线程的设计,需要用到freeROST。或者使用中断来解决。

是的,虽然我用原来的方法改了一下电路差不多成功了,不过我觉的我的程序如果用稍微进阶一点的语言会稳妥。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 15:48 , Processed in 0.090373 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表