Добрый день всем. Ардуиной занялся недавно, поэтому прошу не бейте больно. Задача: нужно организовать постоянный опрос PIR датчика движения ( из стандартного набора ардуины). По последним 20-ти результатам вычислить среднее и сравнить его с порогом ( это типа чтобы уйти от ложных срабатываний). Написал код. Вопрос:что не так ? Почему опроса нет Serial.print дает "0"-ли. Спасибо! const uint8_t pinMovement = 8; const uint8_t pinLedRed = 13; uint8_t StateMovSen = LOW; uint8_t ValMovSen = 0; uint16_t arrMovement[20]; uint8_t valMovement; uint8_t limMovement = 0.25; void setup() { pinMode( pinMovement,INPUT); pinMode(pinLedRed, OUTPUT); Serial.begin(9600); } void loop() { valMovement = 0; for(int i=0; i<19; i++) { arrMovement=arrMovement[i+1]; delay(1000); Serial.print("Значение показаний : "); Serial.print("\t"); Serial.println(arrMovement); } arrMovement[19]=digitalRead(pinMovement); for(int i=0; i<20; i++) { valMovement+=arrMovement; if (valMovement == HIGH) { digitalWrite(pinLedRed, HIGH); delay (100); if (StateMovSen == LOW) { StateMovSen = HIGH; } } else { digitalWrite(pinLedRed, LOW); delay(100); if (StateMovSen == HIGH) { StateMovSen = LOW; } } } valMovement/=20; Serial.print(digitalRead(pinMovement),DEC); Serial.print(" СРЕДНЕЕ :"); Serial.print("\t\t\t\t\t"); Serial.print( valMovement,DEC); Serial.println(""); }
Код (Text): const uint8_t pinMovement = 8; const uint8_t pinLedRed = 13; uint8_t StateMovSen = LOW; uint8_t ValMovSen = 0; uint16_t arrMovement[20]; uint8_t valMovement; uint8_t limMovement = 0.25; void setup() { pinMode( pinMovement,INPUT); pinMode(pinLedRed, OUTPUT); Serial.begin(9600); } void loop() { valMovement = 0; for(int i=0; i<19; i++) { arrMovement=arrMovement[i+1]; delay(1000); Serial.print("Значение показаний : "); Serial.print("\t"); Serial.println(arrMovement); } arrMovement[19]=digitalRead(pinMovement); for(int i=0; i<20; i++) { valMovement+=arrMovement; if (valMovement == HIGH) { digitalWrite(pinLedRed, HIGH); delay (100); if (StateMovSen == LOW) { StateMovSen = HIGH; } } else { digitalWrite(pinLedRed, LOW); delay(100); if (StateMovSen == HIGH) { StateMovSen = LOW; } } } valMovement/=20; Serial.print(digitalRead(pinMovement),DEC); Serial.print(" СРЕДНЕЕ :"); Serial.print("\t\t\t\t\t"); Serial.print( valMovement,DEC); Serial.println(""); }
Про это я понял , uint8_t limMovement = 0.25; спасибо. Говорю же , что только пытаюсь и прошу помощи, так что извиняйте. Наверное мне не повезло что с С++ в башке я не родился, я только учусь.
А кто Вам сказал что датчик PIR вычисляет какие то значения?Только 0 и 1.Как подключить PIR датчик к Ардуино и что делать дальше?
Расскажите, пожалуйста, о назначении каждой из переменных и объясните почему им выбран тот или иной тип?
А зачем? На таких примерах не надо учиться. Слушайте, я программированием AVR занимаюсь два года с большими перерывами. . Мне нравятся эти 8-ми битные МК из-за их очевидной простоты. При этом я не гнушаюсь прочтением даташитов и апноутов и прочих полезных статей, авторы которых кандидаты от наук. Задачу с подсчетом количества ногодрыга я бы решал так. Настроил таймер 0 на прерывание (любое), стартовал таймер по внешнему импульсу. В обработке прерывания крутил бы счетчик. Приходит импульс - стартует таймер, по окончании счета таймер вызывает прерывание, в прерывании инкрементируем счетчик импульсов. Таймер для защиты дребезга. Всё время МК находится в IDLE. Т.е. счетчик тикает, МК ничего не делает. Как-то так.
Хм, а можно и вообще счетчик на первом таймере организовать. И диапазон шире и МК не привлекается вообще.