C++ 使用Arduino发送两种不同类型的传感器数据

C++ 使用Arduino发送两种不同类型的传感器数据,c++,arduino,arduino-ide,C++,Arduino,Arduino Ide,我正在尝试用PIR运动检测器配置Arduino,将运动检测器数据和一些随机生成的温度发送到网关 我想让它发送“MO/1”一旦运动被检测到,仍然保持发送温度每20秒像“T/26” 我使用过此代码,但没有成功: void loop() { if (motion == HIGH) { // Motion Detected // Send to Gateway } while (1) { temp = random(1,5) + 28;

我正在尝试用PIR运动检测器配置Arduino,将运动检测器数据和一些随机生成的温度发送到网关

我想让它发送“MO/1”一旦运动被检测到,仍然保持发送温度每20秒像“T/26”

我使用过此代码,但没有成功:

void loop() {
    if (motion == HIGH) {
       // Motion Detected
       // Send to Gateway
    }

    while (1) {
       temp = random(1,5) + 28;
       // Send to Gateway
       delay(20000);
    }
}

您可能会注意到,一旦Arduino在时进入
,它将不会注意
if
块!因为我是Arduino的新手,我想有人可以帮我做这件事。

这不会像你注意到的那样起作用

您需要使用一个变量来计算自上次检查以来经过的时间

unsigned long t1;
void setup() {
  ...
  t1=millis();
}

void loop() {
  if (motion == HIGH) {
     // Motion Detected
     // Send to Gateway
  }
  if(millis()-t1>20000) {
    temp = random(1, 5) + 28;
    // Send to Gateway
    t1=millis();
  }
}

这不会像你注意到的那样起作用

您需要使用一个变量来计算自上次检查以来经过的时间

unsigned long t1;
void setup() {
  ...
  t1=millis();
}

void loop() {
  if (motion == HIGH) {
     // Motion Detected
     // Send to Gateway
  }
  if(millis()-t1>20000) {
    temp = random(1, 5) + 28;
    // Send to Gateway
    t1=millis();
  }
}

据我所知,
循环
函数将不断被反复调用。你不需要在里面有一个循环。如果你需要每20秒发生一件事,那么你应该用其他方式来检查通话之间的时间,并检查是否至少20秒已经过去。@某个程序员,我知道如何在JS中完成,但不是在C++中。我理解,但如果你能告诉我怎么做,我也很感激。据我所知,
循环
函数将不断被反复调用。你不需要在里面有一个循环。如果你需要每20秒发生一件事,那么你应该用其他方式来检查通话之间的时间,并检查是否至少20秒已经过去。@某个程序员,我知道如何在JS中完成,但不是在C++中。我理解,但如果你能告诉我怎么做,我也很感激。