Как заставить оба бита кода выполняться одновременно

#c #arduino #arduino-uno

#c #arduino #arduino-uno

Вопрос:

Привет всем, я новичок в Arduino и c , и у меня возникли проблемы с некоторым кодом, и я надеялся, что кто-нибудь просто скажет мне, что не так, и я смогу это исправить.

По сути, я пытаюсь заставить светофор и скрипт приемника запускаться одновременно. В настоящее время происходит то, что по завершении светового цикла код приемника выполняется один раз и фиксируется только один передаваемый сигнал. Я хочу, чтобы он был постоянно готов к приему информации от передатчика.

Я попытался создать две отдельные функции, но они по-прежнему либо не работают (не горят), либо выполняются один раз за цикл

 #include <RH_ASK.h>
#include <SPI.h>

int ledPins[] = {2,3,4};
RH_ASK rf_driver;

void setup() {
  int index;
  for (index = 0; index <= 2; index  ) {  // Intilaize ASK object 
    rf_driver.init();
    // Setup Serial Moniter
    Serial.begin(9600);
  }
  {
    pinMode(ledPins[index], OUTPUT);
  }
}

void loop() { /****** LOOP: RUNS CONSTANTLY ******/
  int oneAfterAnotherLoop();
  int RadioController();
} //--(end main loop )---

void oneAfterAnotherLoop() {
  int delayTime = 100;
  digitalWrite(ledPins[0], HIGH);
  delay(4000);
  digitalWrite(ledPins[0], LOW);
  digitalWrite(ledPins[1], HIGH);
  delay(5000);
  digitalWrite(ledPins[1], LOW);
  digitalWrite(ledPins[2], HIGH);
  delay(4000);
  digitalWrite(ledPins[2], LOW);
}

void RadioController() {
  uint8_t buf[19];
  uint8_t buflen = sizeof(buf);
  if (rf_driver.recv(buf, amp;buflen)) {
    Serial.print("Message Recived: ");
    Serial.println((char*)buf);  
  }
}
 

Комментарии:

1. Arduinos — это только один поток AFAIK. Таким образом, вам всегда придется приостанавливать одно, чтобы делать другое.

2. не используйте delay . Делайте все в одном цикле. Проверьте millis для последовательности светодиодов. Проверьте, не блокируется ли путь, если есть доступные данные, затем прочитайте его, затем проанализируйте и, если все в порядке, выведите сообщение

3. Прочитайте здесь arduinoplusplus.wordpress.com/2019/07/06 / … Также обратите внимание, что если у вас есть Arduino на базе STM32, работающий под управлением FreeRTOS , вы действительно можете запускать несколько задач / задач. Удачи!

4. Посмотрите другие комментарии, а также взгляните на вашу setup(); Ваш цикл for — беспорядок и не устанавливает все выводы для вывода.