Сообщение от
bahnhof
А я думал через цикл с счетчиком запускать, типа ie=0; for i=1 to 200 {ie=ie+digitalRead(pin);}
если по выходу ie>0, то путь занят. Или это по дилетантски?
Норм, рабочий вариант, только снизить с 200 до более вменяемого кол-ва.
Ну и запомнить, что во время этого цикла ардуина ничего более делать не может. Поэтому если у нее появятся другие задачи, то лучше без такого цикла.
- - - - - - - - - - Добавлено - - - - - - - - - -
Код:
bool NewState = 0;
bool State = 0;
unsigned long int CycleBuffer = 0;
void loop() {
bool test = digitalRead(3);
CycleBuffer = CycleBuffer << 1;
bitWrite(CycleBuffer,0, test);
NewState = CycleBuffer ? 1 : 0;
if (NewState != State) {
if (NewState) DoBusy(); else DoFree();
State = NewState;
}
...
}
Функции DoBusy() и DoFree(); для вызовов обработчиков смены состояния. Желательно, чтобы это были быстрые по скорости функции.