[问题] 请教新手问题

楼主: 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