[問題] 請教新手問題

看板ASM (組合語言)作者 (簡單點...)時間9月前 (), 編輯推噓1(102)
留言3則, 3人參與, 9月前最新討論串1/1
各位好,我是位國小老師 因為帶小朋友參賽科技作品而接觸arduino 目前是用mblock寫完後 貼到IDE上改參數 卡關一個基本問題好久 因此抱著求教來請高手解答 現在想利用藍芽來傳輸 分別傳輸訊號1~4控制LED燈亮10秒、20秒、30秒、40秒 現在是卡在訊號5為熄燈,想讓這些燈可以在開燈中途因為傳輸5而熄滅 以下是語法 再煩請提點 感謝~~ #include <Arduino.h> #include <Wire.h> #include <SoftwareSerial.h> SoftwareSerial btSerial(2, 3); // RX, TX float i = 0; double currentTime = 0; double lastTime = 0; double getLastTime(){ return currentTime = millis()/1000.0 - lastTime; } void _delay(float seconds) { long endTime = millis() + seconds * 1000; while(millis() < endTime) _loop(); } void setup() { Serial.begin(9600); btSerial.begin(9600); pinMode(11,OUTPUT); i = 0; while(1) { if(btSerial.available() > 0){ i = btSerial.read(); if(i == 1.000000){ lastTime = millis()/1000.0; digitalWrite(11,1); while(!((getLastTime() == 10.000000) || (i == 5.000000))) { _loop(); } digitalWrite(11,0); _delay(0.5); } if(i == 2.000000){ lastTime = millis()/1000.0; digitalWrite(11,1); while(!((getLastTime() == 20.000000) || (i == 5.000000))) { _loop(); } digitalWrite(11,0); _delay(0.5); } if(i == 3.000000){ lastTime = millis()/1000.0; digitalWrite(11,1); while(!((getLastTime() == 30.000000) || (i == 5.000000))) { _loop(); } digitalWrite(11,0); _delay(0.5); } if(i == 4.000000){ lastTime = millis()/1000.0; digitalWrite(11,1); while(!((getLastTime() == 40.000000) || (i == 5.000000))) { _loop(); } digitalWrite(11,0); _delay(0.5); if(i == 5.000000){ digitalWrite(11,0); } } } _loop(); } } void _loop() { } void loop() { _loop(); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.171.226.63 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1608501248.A.D93.html

12/21 18:56, 9月前 , 1F
改成收到1234訊號只開燈,計時器關燈另外寫
12/21 18:56, 1F

12/21 20:14, 9月前 , 2F
每個情況的while裡面read serial 若是5就break
12/21 20:14, 2F

12/23 22:30, 9月前 , 3F
程式中所有的delay()拿掉,用TimedAction管理。
12/23 22:30, 3F
文章代碼(AID): #1VtyW0sJ (ASM)
文章代碼(AID): #1VtyW0sJ (ASM)