新手学习按键LED,两个程序运行结果不一样,但是找不到...-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 469|回复: 5

[已解决] 新手学习按键LED,两个程序运行结果不一样,但是找不到...

[复制链接]
发表于 2022-5-5 03:41 | 显示全部楼层 |阅读模式
#define LED 13
#define KEY 2
int KEY_NUM=0;
void setup()
{
  pinMode(LED,OUTPUT);
  pinMode(KEY,INPUT_PULLUP);
}

void loop()
  {
    SCANKEY();
    if(KEY_NUM==1)
   {
    digitalWrite(LED,!digitalRead(LED));
    }
   }

void SCANKEY()
{
      KEY_NUM==0;
      if(digitalRead(KEY)==LOW)
    {
      delay(20);
    if(digitalRead(KEY)==LOW)
{
  KEY_NUM==1;
    while(digitalRead(KEY)==LOW);
    }
      }
       }

      以上是我自己写的,想通过2口接按键控制13口LED,但是运行结果不对
----------------------------------------------------------------------------
下面是原来的教程运行结果是对的,没找到不同的地方,求各位老师帮忙对比,我写的错误之处,新手见笑了~~

#define LED 13
#define KEY 2
int KEY_NUM=0;
void setup()
{
  pinMode(LED,OUTPUT);
  pinMode(KEY,INPUT_PULLUP);
}

void loop()
{
  ScanKey();
  if(KEY_NUM==1)
  {
    digitalWrite(LED,!digitalRead(LED));
  }
}

void ScanKey()
{
  KEY_NUM=0;
if(digitalRead(KEY)==LOW)
{
   delay(20);
   if(digitalRead(KEY)==LOW)
   {
    KEY_NUM=1;
   while(digitalRead(KEY)==LOW);
}
}
}



发表于 2022-5-5 22:55 | 显示全部楼层
124441255q 发表于 2022-5-5 22:05
确实如此,新手学习,看到凌晨3点没看出毛病,非常感谢

我早期也會犯這種錯,只要記得 if
的條件判斷式中,同符號都要用 2 個:
== 相等
&& 條件(and)皆需成立
|| 條件(or)只要一個成立就行
其他例如 != 、<、<=、>、>=
就都用一個符號就行

後來我有個心得,有時用變數做判斷
較易出錯,用旗標判斷比較不會出錯

比方說 int KEY_NUM=0; 然後讀取
KEY 狀態,若確定按下,在放開時設 KEY=1;
否則內定 KEY=0;
若 KEY==1 時 LED ON/OFF狀態切換
if(KEY_NUM==1)
  {
    digitalWrite(LED,!digitalRead(LED));
  }

這種簡單的 ON/OFF 控制可以改用
bool KEY_PRESS = false; 然後讀取
KEY 狀態,若確定按下,在放開時設
KEY_PRESS=true; 否則內定
KEY_PRESS=false; 若 KEY_PRESS
成立時 LED ON/OFF狀態切換
if(KEY_PRESS)
  {
    digitalWrite(LED,!digitalRead(LED));
  }
发表于 2022-5-5 07:35 | 显示全部楼层
将KEY_NUM==0; KEY_NUM==1;改成KEY_NUM=0;KEY_NUM=1;。
发表于 2022-5-5 10:21 | 显示全部楼层
同上,分清= 和 ==
可以下载个vscode,使用文件比对功能,看看两个代码有什么不同。
 楼主| 发表于 2022-5-5 22:05 | 显示全部楼层
lwq1947 发表于 2022-5-5 07:35
将KEY_NUM==0; KEY_NUM==1;改成KEY_NUM=0;KEY_NUM=1;。

确实如此,新手学习,看到凌晨3点没看出毛病,非常感谢
 楼主| 发表于 2022-5-5 22:06 | 显示全部楼层
coloz 发表于 2022-5-5 10:21
同上,分清= 和 ==
可以下载个vscode,使用文件比对功能,看看两个代码有什么不同。 ...

还有这样的软件,这样对比就明显了,非常感谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 07:30 , Processed in 0.135416 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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