Нужна помощь, скетч для работы led подсветки с PIR датчиком
- Войдите на сайт для отправки комментариев
Уважаемые пользователи, очень нужна помощь с кодом для Arduino. Итак, на входе имеется имееться led подсветка arduino Uno, реле, PIR датчик, кнопка и диод. Суть идеи была следующая, при входе в комнату загарается свет и при отсутвии движения гаснит через 4 минуты. Имееться кнопка для "отключения PIR датчика", на тот случай если необходимо включить подсветку надолго и особых движений по помещению не будет.
И сущетсвует ПРОБЛЕМА. Через сутки-двое. Начинает гореть диод(означающий что кнопка нажата и датчик игнорируется), и следовательно подсветка или горит бесконечно или не включается пока не нажать на кнопку.
Я не могу найти природу бага и тем более не знаю как исправить. Очень надеюсь на помощь.
Вот код:
///////////////////////////// //VARS int pirPin = 2; //PIR датчик int ledPin = 3; //led подсветка int buttonLED = 12; //кнопка int buttonPin = 13; //Диод для отображения нажатой кнопки long maxTimeWithoutMotions = 240000; boolean buttonIsPressed = false; boolean activeLedLight = false; unsigned long motionTime; int calibrationTime = 10; void setup() { pinMode(pirPin, INPUT); pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(buttonLED, OUTPUT); digitalWrite(pirPin, LOW); //give the sensor some time to calibrate for(int i = 0; i < calibrationTime; i++){ delay(1000); } delay(1000); } void loop() { setButtonLedState(); checkButtonClick(); checkMotionInRoom(); checkTimeForOffLedLight(); setLedLightState(); } void setButtonLedState() { if(buttonIsPressed){ digitalWrite(buttonLED, HIGH); }else{ digitalWrite(buttonLED, LOW); } } void setLedLightState() { if(activeLedLight){ digitalWrite(ledPin, HIGH); }else{ digitalWrite(ledPin, LOW); } } void checkButtonClick() { if(digitalRead(buttonPin) == HIGH && !buttonIsPressed){ buttonIsPressed = true; delay(500); } if(digitalRead(buttonPin) == HIGH && buttonIsPressed){ buttonIsPressed = false; delay(500); } } void checkMotionInRoom() { if(!buttonIsPressed){ if(digitalRead(pirPin) == HIGH){ activeLedLight = true; //on led light motionTime = millis(); } } } void checkTimeForOffLedLight(){ if(!buttonIsPressed && activeLedLight){ if(millis() - motionTime >= maxTimeWithoutMotions){ activeLedLight = false; //off led light } } }
Тут скорее всего проблема в millis(). Она тоже ограничена и, соответственно, через некоторое время обнуляется и 74 строка начинает выдавать херню. Идея исправления - перезагружать motionTime периодически.
Схема подключения кнопки какова?
Не покушайся на право UNO самому через PIN 13 моргать своим собственным диодом! Это для него не просто светодиод ... это индикатор настроения и сердцебиения. В скетче, который ты взял за основу, был другой пин под него занят.
Тут скорее всего проблема в millis(). Она тоже ограничена и, соответственно, через некоторое время обнуляется и 74 строка начинает выдавать херню. Идея исправления - перезагружать motionTime периодически.
Видит Бог, от Вас не ожидал :(
Присоединяюсь к #2
Видит Бог, от Вас не ожидал :(
Евгений - водка зло! Присоединяюсь к #2
[/quote]
Евгений - водка зло! Присоединяюсь к #2
[/quote]
Водка - промывочеая жидкость для мозга, незаменима для его нормальной работы. При частой передозировке .. вымывает витамин В12. / спиртовик* с 18 летним стажем/.
* Спиртовик - это ИТР- работник спиртзавода.
Доброго дня, спасибо за ваш ответ, поменял 12,13 пины на 7,8. После нескольких дней тестирования могу твердо утверждать что проблема осталась. Я полный ноль в ардуино, и возможно снова что-то сделал не так. Может в коде есть ещё какие-то видимые недочеты, которые могут влиять на нормальную работу?
Пост #2 игнорируется принципиально или беспринципно?
Пост #2 игнорируется принципиально или беспринципно?
Никаких принципов, просто на память не помню и все вмонтировано в коробочку, склееную эпоксидкой и приклеено к шкафу кухонного гарнитура.)) Сегодня вечером все разберу и пришлю фото или нарисую схему. Извиняюсь за игнор поста #2.
https://3dtoday.ru/3d-models/for-home/lighting/derzhatel_na_stenu_dlya_lampy_iz_fixprice/ и никаких ардуин))
Пост #2 игнорируется принципиально или беспринципно?
Как и обещал прилагаю схему, нарисовал от руки, если слишком убого, предоставлю любой другой вариант. И закинул фотки самой платы с датчиком(которая находилась в коробочке).
https://yadi.sk/d/XubWj78XHye2Qw
Как и обещал прилагаю схему, нарисовал от руки, если слишком убого, предоставлю любой другой вариант. И закинул фотки самой платы с датчиком(которая находилась в коробочке).
https://yadi.sk/d/XubWj78XHye2Qw
Похоже, что кроме прилепленного поста "как вставить программу..." нуже еще пост "как вставить картинку..." и, в идеале "как вставить текст..."
Не хочется опять жевать тему про конечные автоматы. А так простейшая задача и немного писанины.
Похоже, что кроме прилепленного поста "как вставить программу..." нуже еще пост "как вставить картинку..." и, в идеале "как вставить текст..."
http://arduino.ru/forum/obshchii/sokhranenie-kartinok-na-forume
Как и обещал прилагаю схему,
1. Вставляйте картинку в пост.
2. Ничего не имею против рисования от руки, но общепринятые обозначения для схем надо соблюдать. Я вот просто не понял что там за две детали под PIR и как они подключаются.