Я работаю над управлением двумя моторными реле через ардуино. Настройка такова:Управление ретрансляторами двигателей через Arduino с использованием прототипов
Каждое реле управляется простой настройкой переключателя. Когда переключатель замкнут, реле активно. Когда переключатель разомкнут, реле неактивно.
Я решил дать protothreads, так как я хочу, чтобы два переключателя управляли двигателями в параллеле. Для этого я написал следующий код:
#include <pt.h>
#define yMaxLimitLeft 8 //these are the limit switches that control the relays
#define yMaxLimitRight 9 //these are the limit switches that control the relays
#define leftRelay 4
#define rightRelay 5
static struct pt pt1, pt2; // each protothread needs one of these
void setup() {
Serial.begin(9600);
PT_INIT(&pt1); // initialise the two
PT_INIT(&pt2); // protothread variables
pinMode(leftRelay, OUTPUT); //set pins
pinMode(rightRelay, OUTPUT);
pinMode(yMaxLimitLeft,INPUT);
pinMode(yMaxLimitRight,INPUT);
}
void loop() {
digitalWrite(leftRelay, HIGH);//enable relays
digitalWrite(rightRelay, HIGH);//enable relays
runLeft(&pt1); //protothreads that controls relay number 1
runRight(&pt2); //protothreads that controls relay number 2
}
/////////////////////////////////////////////////////////////////////////////
// This function controls the left relay
static int runLeft(struct pt *pt) {
PT_BEGIN(pt);
while(1){
PT_WAIT_UNTIL(pt, digitalRead(yMaxLimitLeft)==HIGH); //wait until the switch is closed
Serial.println("left off");
digitalWrite(leftRelay, LOW);//disable relay
}
PT_END(pt);
}
//this function controls the right relay
static int runRight(struct pt *pt) {
PT_BEGIN(pt);
while(1){
PT_WAIT_UNTIL(pt, digitalRead(yMaxLimitRight)==HIGH); //wait until the switch is closed
Serial.println("Right off");
digitalWrite(rightRelay, LOW);//disable relay
}
PT_END(pt);
}
Проблема заключается в следующем. Пока я нажимаю только один переключатель, соответствующее реле отвечает. Однако, когда я нажимаю оба переключателя, срабатывает только одно реле (предположительно тот, который был вызван как можно раньше).
Как исправить код, чтобы при одновременном удерживании обоих переключателей оба реле реагировали одновременно?
Большое спасибо за ваше время и помощь заранее