вот почти готовая функция которая требует только номер пира (чуть чуть допилить) и будет возвращать значение. тоесть если нужна массавая обработка пира то цикл в помощь, а так наоборот получается довольно гибкая функция.Alex писал(а):>
Спасибо, как буду разбираться с этим модулем обязательно посмотрю ваш пример. Я не стал засовывать ПИР в цикл потому, что для каждого ПИРа нужна индивидуальная реакция и код получается ещё больше.
По поводу кода...много статики (( переписывать придется индивидульано действительно, я тоже раньше что то подобное делал хотел как раз переехать на due )) из-за нехватки памяти и необходимой гибкости.
предлагаю сделать отдельный сетап файл с общими,отдельными для модулей настройками
Про printf я имел ввиду
например:
Код: Выделить всё
Serial.print("Connect to Laurent... ");
Код: Выделить всё
printf("Connect to Laurent... ");
вот немного переработал функцию пира для возврата значения
Код: Выделить всё
#define pirNumber 6
int pirPin[pirNumber]={22,23,24,25,26,30};
boolean pirState[pirNumber];
boolean pir[pirNumber];
void pirsInitX() {
for (int x = 0; x < pirNumber; x++)
{
pirState[x] = LOW;
pir[x] = 0;
pinMode (pirPin[x], INPUT);
}
modulPirs = 1;
}
// вызов функции pirsWorksX (x);
// вызов с присвоением boolean x = pirsWorksX (x);
// возвращает значение pirState[Pin];
boolean pirsWorksX(boolean Pin) {
pir[Pin] = digitalRead(pirPin[Pin]);
if (pir[Pin] == HIGH) {
if (pirState[Pin] == LOW) {
printf("Detect motion STD");
pirState[Pin] = HIGH;
}
} else {
if (pirState[Pin] == HIGH){
printf("End motion STD");
pirState[Pin] = LOW;
}
}
return pirState[Pin];
}