Некоторые вопросы по ардуино и прототредам

Я делаю проект с двумя датчиками на Arduino Uno R3, выход Arduino — это голосовой модуль, которому требуется последовательная связь. Я использую protothread для управления ими. Когда голосовой модуль получает сообщение, 5 секунд тратится на чтение чего-либо.

Серийный поток записи выглядит так:

      static struct pt pt1;
static int Serial(struct pt *pt){
 PT_BEGIN(pt);
 while(1){
  PT_WAIT_UNTIL(pt,distance<=50);
  Serial.Write(A);
  }
}

вопрос в том, когда расстояние меньше 50, запущено много потоков, несколько «А» были отправлены в течение 5 секунд, что привело к заклиниванию голосового модуля. Я уже использовал способ, описанный ниже, для решения, но он попадает в бесконечный цикл в первом потоке.

      static struct pt pt1,pt2;
int a;
static int Serial(struct pt *pt){
 PT_BEGIN(pt);
 while(1){
  PT_WAIT_UNTIL(pt,a=1);
  delay(500);
  PT_WAIT_UNTIL(pt,a=1);
  Serial.Write(A);
  a=0;
  }
}
static int a(struct pt *pt){
 PT_BEGIN(pt);
 while(1){
  PT_WAIT_UNTIL(pt,distance<=50);
  a=1;
  }
}

Почему это вызывает бесконечный цикл? В чем ошибка? Как превратить его в один поток для отправки сообщения в модуль?

0 ответов

Другие вопросы по тегам