Некоторые вопросы по ардуино и прототредам
Я делаю проект с двумя датчиками на 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;
}
}
Почему это вызывает бесконечный цикл? В чем ошибка? Как превратить его в один поток для отправки сообщения в модуль?