Robofun 機器人論壇

標題: 五段調光~求檢視BUG [打印本頁]

作者: firelsas    時間: 2018-5-4 07:58
標題: 五段調光~求檢視BUG
int sw=A0;
int led=3;
int changelight=50;
int light=0;
boolean swstatus=true;

void setup()  {
  pinMode(led,OUTPUT);
  pinMode(sw,INPUT);
}

void loop()  {
  if (digitalRead(sw)==HIGH && swstatus==true){
    light=light+changelight;
    swstatus=false;
    analogWrite (led,light);
    if(light>255){
      light=0;
    }
  }
  else if(digitalRead(sw)==LOW && swstatus==false){
    swstatus=true;
  }
  }

結果:LED一直自動變換,按扭無功能。


作者: 超新手    時間: 2018-5-4 08:26
本帖最後由 超新手 於 2018-5-4 08:57 編輯

1) 會不會是按鍵沒加提昇電阻? 改成
pinMode(sw,INPUT_PULLUP);
2) 另一個可能就是沒有處理按鍵彈跳問題
    最簡單也是最笨的的解法就是加個小 DELAY
    else if(digitalRead(sw)==LOW && swstatus==false){
     swstatus=true;
     delay(200);
   }
3) 還有一種可能....
    很少看到按鍵是設計成 HIGH 動作....
    會不會是你寫反了?
4) 這邊寫的不好, light加完應該先判斷是不是超過 255
    再 analogWrite
    light=light+changelight;
    if(light>255){
      light=0;
    }
    swstatus=false;
    analogWrite (led,light);

作者: firelsas    時間: 2018-5-4 14:53
感謝回答:
1、兩種上拉電阻都試過~失敗
2、加上delay~失敗
3、我的按鍵式常開型,想說壓下去通電作動(比較口語化)
     衍伸疑問~HIGH作動跟LOW作動有什麼不同嗎(網路書籍找不到資料)
4、修正+學習

付上接線圖
目前狀況,LED保持恒亮,按鈕無功能

S__3235884.jpg (308.12 KB, 下載次數: 419)

S__3235884.jpg

作者: 超新手    時間: 2018-5-4 15:12
本帖最後由 超新手 於 2018-5-4 16:05 編輯

如果沒看錯
你的按鍵接法有問題
應該是
A0 接按鍵一邊, 按鍵另一邊接地
常開型
所以按下去時, A0 變成接地(LOW)
平常沒按, 等於A0空接, 但空接狀態會不一定,
要不程式使用 INPUT_PULLUP, 要不加個提昇電阻

然後程式改成
1) pinMode(sw, INPUT_PULLUP)
2) if (digitalRead(sw)==LOW&& swstatus==true){
   ..........
  }
  else if(digitalRead(sw)==HIGH&& swstatus==false){
..........
}



作者: 超新手    時間: 2018-5-4 19:00
仔細想想,應該還有簡單的改法
就是保持原有程式和電路
然後在 A0 接一個 k 歐姆的電阻到地
這樣應該也可以
作者: firelsas    時間: 2018-5-5 14:47
感謝回答
把LOW跟HIGH對調之後可以順利進行了




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2