![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - Arduino問題..
(https://www.pcdvd.com.tw/showthread.php?t=1151721)
|
---|
以下是我最早拿範例做修改並拿掉else..幾次試下來加上拉電組比較穩(摸電線亂亮LED)
問題還是在loop內控制2個LED.我只想做各1次亮滅後停止(紅外線ON時不要無限閃爍). 然後.. 斷開紅外線pinMode(2, INPUT)後.再紅外線ON時.2顆LED亮滅各1次.. 斷開紅外線pinMode(2, INPUT)後.再紅外線ON時.2顆LED亮滅各1次.. 斷開紅外線pinMode(2, INPUT)後.再紅外線ON時.2顆LED亮滅各1次.. . . . . int buttonState = 0; void setup() { pinMode(2, INPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); } void loop() { buttonState = digitalRead(2); if (buttonState == HIGH) { digitalWrite(3, HIGH); digitalWrite(4, LOW); // 停止 delay(1000); digitalWrite(3, LOW);digitalWrite(4, LOW); delay(1000); digitalWrite(3, LOW);digitalWrite(4, HIGH); // 上升 delay(1000); digitalWrite(3, LOW);digitalWrite(4, LOW); } } |
引用:
上面程式只要紅外線是on就會無限閃爍 要在程式裡加計數器限制就好了 void setup() { pinMode(2, INPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); digitalWrite(3, LOW); digitalWrite(4, LOW); int sun=0; } void loop() { if (digitalRead(2 == HIGH && sun == 0) ){ digitalWrite(3, HIGH); delay(1000); digitalWrite(3, LOW); delay(1000); digitalWrite(4, HIGH); delay(1000); digitalWrite(3, LOW); digitalWrite(4, LOW); sun += 1; } else if (digitalRead(2 == LOW && sun == 1)) { sun = 0; } } 這樣就會在紅外線在ON的時候只執行一次 |
if (digitalRead(2 == HIGH && sun == 0) ){
這一行紅字.. :cry: exit status 1 'sun' was not declared in this scope |
引用:
int sun=0; void setup() { pinMode(2, INPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); digitalWrite(3, LOW); digitalWrite(4, LOW); } void loop() { if (digitalRead(2 == HIGH && sun == 0) ){ digitalWrite(3, HIGH); delay(1000); digitalWrite(3, LOW); delay(1000); digitalWrite(4, HIGH); delay(1000); digitalWrite(3, LOW); digitalWrite(4, LOW); sun += 1; } else if (digitalRead(2 == LOW && sun == 1)) { sun = 0; } } 這樣應該可以了 |
這應該是C語言吧 ?
那個判斷式 有問題吧? 計數器 宣告掛外面才能被ref 到, 但是... 這樣很惡搞. 還有 不是你把他取成 loop 他就會一直 loop , 他會loop 是因為一直有人call. 不如把計數器 變成狀態值, 根據狀態去做動作就好. 狀態轉換定義好, 其他的就很簡單了. 也比較不會出包. 吐一些 帶 time stamp 的trace, 才會好抓蟲. |
在arduino裡
void loop() 條件成立是會無窮迴圈跑下去的 不成立也會無窮迴圈跑 只是不會執行if裡面的程式 只跑一次用狀態值也是可以 如果後面改成跑2次以上 用計數器程式碼會比較好修改 |
引用:
這樣(2)LOW時34一直閃.. ![]() 加個off delay timer就解決2一直ON時LED一直閃爍. [照明] 幫女王做的NE555單穩態觸發電路.按一下亮30秒...7/24補電路圖 這個教學pinMode(2, INPUT) 可以用電容放電變LOW(HIGH)..我在研究這個方法.. [YOUTUBE]E_5SRNp2brA&t&start=307[/YOUTUBE] 第2題好像是我要的解決答案.. [YOUTUBE]AmZut5u4SWo&t[/YOUTUBE] |
樓主,我人用手機,不便回,簡單來說,你放一個global變數bool lock = false.
在loop裡,用個if包起來,if lock==false才執行設定紅字的內容,執行完紅字就做lock=true,這樣就只會執行一次。 |
我照著 Arduino 教學 CH02-08 While & do...while loop 迴圈 影片第2題修改..
void setup() { pinMode(2, INPUT_PULLUP); pinMode(3, OUTPUT);digitalWrite(3, LOW); pinMode(4, OUTPUT);digitalWrite(4, LOW); while(true){ if(!digitalRead(2)){ digitalWrite(3, HIGH);digitalWrite(4, LOW); delay(1000); digitalWrite(3, LOW);digitalWrite(4, LOW); delay(1000); digitalWrite(3, LOW);digitalWrite(4, HIGH); delay(1000); digitalWrite(3, LOW);digitalWrite(4, LOW); while(!digitalRead(2)){}; delay(200); }}} void loop() {} 測試OK..INPUT(2)按鍵不管是吋動還是一直按著.都能讓LED(3)(4)各自亮暗1次 謝謝各位大力幫忙.感恩.. :) |
引用:
你提到的按鈕不穩定問題 參考一下這個教學 [YOUTUBE]JOqezO2zI_M&t=278s[/YOUTUBE] 下面是我的紅外線模組及arduino UNO 連接出來的電路 我的紅外線模組當有遮蔽物時,會發送低電位訊號LOW 無遮蔽物時,會送出高電位訊號HIGH 紅外線的感應很快,用手遮擋離開的一瞬間,LED又閃了一次 要放慢紅外線感應的速度,在IF前加了delay(300); 這樣整個運作就正常了 int sun=0; void setup() { pinMode(2, INPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); digitalWrite(3, LOW); digitalWrite(4, LOW); } void loop() { delay(300); if (digitalRead(2) == LOW && sun == 0){ digitalWrite(3, HIGH); delay(1000); digitalWrite(3, LOW); delay(1000); digitalWrite(4, HIGH); delay(1000); digitalWrite(3, LOW); digitalWrite(4, LOW); sun += 1; } else if (digitalRead(2) == HIGH && sun == 1) { sun = 0; } } 上面的程式IF判斷式是以我的紅外線模組設計的,可以正常運作, 不會有你說的紅外線在無遮蔽時,會一直閃, 不可直接複制貼上 先確認你的紅外線模組在有遮蔽的狀況下所發送的訊號是高電位HIGH還是低電位LOW 再來修改IF裡面digitalRead(2) == HIGH或LOW |
所有的時間均為GMT +8。 現在的時間是03:08 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。