Нужна помощь, скетч для работы 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 и как они подключаются.