Отправляйте два разных типа данных датчиков с помощью Arduino

Я пытаюсь настроить Arduino с датчиком движения PIR, чтобы отправлять данные датчика движения и некоторую случайно сгенерированную температуру на шлюз.

Я хочу, чтобы он отправлял «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 входит while, он не обращает внимания на блок if! Поскольку я новичок в Arduino и их программировании, я подумал, что кто-то может помочь с этим.


person mamsoudi    schedule 24.07.2017    source источник
comment
Насколько я понимаю, функция loop будет постоянно вызываться снова и снова. Вам не нужна петля внутри. Если вам нужно, чтобы что-то происходило каждые 20 секунд, вам следует использовать другой способ проверить время, прошедшее между вызовами, и проверить, прошло ли не менее 20 секунд.   -  person Some programmer dude    schedule 24.07.2017
comment
@Someprogrammerdude Я знаю, как это сделать на JS, но не на C ++. Я понимаю, но я также признателен, если вы скажете мне, как это сделать.   -  person mamsoudi    schedule 24.07.2017


Ответы (1)


Это не сработает, как вы заметили.

Вам нужно использовать переменную, чтобы рассчитать время, прошедшее с момента последней проверки.

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();
  }
}
person dda    schedule 24.07.2017