Robofun 機器人論壇
標題:
新手發問 按鍵問題
[打印本頁]
作者:
ming1104
時間:
2015-1-29 21:53
標題:
新手發問 按鍵問題
這是一個按鍵的範例程式
const int buttonPin = 2;
const int ledPin = 10;
boolean buttonState;
boolean ledState = HIGH;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
ledState=!ledState;
digitalWrite(ledPin, ledState);
delay(20);
while (1) {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) break;
}
delay(20);
}
}
我的疑問是
while (1) {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) break;
}
這段程式的作用是什麼??
本來應該是按一下然後一直亮著
再按一下就熄滅
我把它刪掉之後再編譯一次
按下去有時候會閃一下 有時候會一直亮著怎麼會這樣?
-------------------------------------------------------------------
小弟剛接觸Arduino幾個禮拜而已 一直有很多問題
之後會陸續發問 希望大家能多多幫忙~~感恩
作者:
mojamoja1202
時間:
2015-1-29 23:19
這篇文章可以參考看看
http://arduino.cc/en/tutorial/button
========
作者:
mojamoja1202
時間:
2015-1-29 23:43
因為您的需求是按一下按鍵,燈亮;再按一下按鍵,燈暗
所以應該偵測到按鈕為HIGH時便開燈,又偵測到按鍵為HIGH時再關燈
如果是小弟寫的話
===========
boolean ledState = false;
void setup(){
pinMode(2,INPUT);
pinMode(10,OUTPUT);
}
void loop(){
if(digitalRead(2) == LOW){ //按下開關
ledState = !ledState;
}
digitalWrite(10,ledState);
}
=============
我應該會這樣寫吧!
沒測試過,自己靠想像寫的,麻煩大大測試一下囉!
作者:
ming1104
時間:
2015-1-30 11:47
回復
3#
mojamoja1202
謝謝你的解答~~
可是好像還是有彈跳時間的問題~
作者:
mojamoja1202
時間:
2015-1-30 14:02
這篇?有符合您的需求?
http://arduino.cc/en/tutorial/button
作者:
ming1104
時間:
2015-1-30 15:22
回復
5#
mojamoja1202
我的書有您貼的中文版
可是小弟還是有看沒有懂啊QAQ
作者:
mojamoja1202
時間:
2015-2-4 11:50
哪一段看不懂????
作者:
mojamoja1202
時間:
2015-2-4 12:16
const int buttonPin = 2; // 按鈕的pin
const int ledPin = 13; // LED的pin
// variables will change:
int buttonState = 0; // 設一個變數來存放按鈕的狀況:通電時為1,不通電時為0
void setup() {
// LED的pin設為output
pinMode(ledPin, OUTPUT);
// 按鈕的pin設為input
pinMode(buttonPin, INPUT);
}
void loop(){
// 反覆偵測第二個pin接受到的值,並指定給buttonState
buttonState = digitalRead(buttonPin);
// 反覆偵測按鈕狀態
// 如果被按下,則會收到HIGH,HIGH代表1,LOW代表0
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
複製代碼
這段示範碼是當按下按鈕時,燈會亮,當放開按鈕時,燈會暗
但是您的需求是按一下,燈一直亮,再按一下,燈一直暗
所以後面IF的地方要做修改
可以改成
buttonState改成boolean函數,要嘛0(false),要嘛1(true)
boolean ledState = 0; //怕您看不懂,我把它改成ledState,代表小弟希望燈的狀態為0或1
後面的程式碼就變成
//一接收到按下按鈕,就改變ledState
if (digitalRead(2) == HIGH){
ledState = ledState + 1; //每次pin 2 收到GIGH,我的ledState就加1,因為是boolean,所以不是0就是1
digitalWrite(ledPin,ledState); //按一下,就改一次ledState,然後13pin就送出0或1
}
這樣可以嗎?
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2