[問題] 請教新手問題

作者: pc148 (簡單點...)   2020-12-21 05:54:04
各位好,我是位國小老師
因為帶小朋友參賽科技作品而接觸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();
}
作者: azopper (az)   2020-12-21 18:56:00
改成收到1234訊號只開燈,計時器關燈另外寫
作者: chuegou (chuegou)   2020-12-21 20:14:00
每個情況的while裡面read serial 若是5就break
作者: MasterChang (我愛ASM)   2020-12-23 22:30:00
程式中所有的delay()拿掉,用TimedAction管理。

Links booklink

Contact Us: admin [ a t ] ucptt.com