Нужна помощь, скетч для работы led подсветки с PIR датчиком

dagonn
Offline
Зарегистрирован: 04.05.2019

Уважаемые пользователи, очень нужна помощь с кодом для 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
     }  
  }
}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Тут скорее всего проблема в millis(). Она тоже ограничена и, соответственно, через некоторое время обнуляется и 74 строка начинает выдавать херню. Идея исправления - перезагружать motionTime периодически.

sadman41
Offline
Зарегистрирован: 19.10.2016

Схема подключения кнопки какова?

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

    Не покушайся на право UNO самому через PIN 13 моргать своим собственным диодом! Это для него не просто светодиод ... это индикатор настроения и сердцебиения. В скетче, который ты взял за основу, был другой пин под него занят.

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mykaida пишет:

Тут скорее всего проблема в millis(). Она тоже ограничена и, соответственно, через некоторое время обнуляется и 74 строка начинает выдавать херню. Идея исправления - перезагружать motionTime периодически.

Видит Бог, от Вас не ожидал :(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Присоединяюсь к #2

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

ЕвгенийП пишет:

Видит Бог, от Вас не ожидал :(

Евгений - водка зло! Присоединяюсь к #2

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

[/quote]

Евгений - водка зло! Присоединяюсь к #2

[/quote]

Водка - промывочеая жидкость для мозга, незаменима для его нормальной работы. При частой передозировке .. вымывает витамин В12. / спиртовик* с 18 летним стажем/.

* Спиртовик - это ИТР- работник спиртзавода.

dagonn
Offline
Зарегистрирован: 04.05.2019

Доброго дня, спасибо за ваш ответ, поменял 12,13 пины на 7,8. После нескольких дней тестирования могу твердо утверждать что проблема осталась. Я полный ноль в ардуино, и возможно снова что-то сделал не так. Может в коде есть ещё какие-то видимые недочеты, которые могут влиять на нормальную работу? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dagonn пишет:
проблема осталась.

Пост #2 игнорируется принципиально или беспринципно?

dagonn
Offline
Зарегистрирован: 04.05.2019

ЕвгенийП пишет:

dagonn пишет:
проблема осталась.

Пост #2 игнорируется принципиально или беспринципно?

Никаких принципов, просто на память не помню и все вмонтировано в коробочку, склееную эпоксидкой и приклеено к шкафу кухонного гарнитура.)) Сегодня вечером все разберу и пришлю фото или нарисую схему. Извиняюсь за игнор поста #2. 

PRC
Offline
Зарегистрирован: 03.02.2019
dagonn
Offline
Зарегистрирован: 04.05.2019

ЕвгенийП пишет:

dagonn пишет:
проблема осталась.

Пост #2 игнорируется принципиально или беспринципно?

Как и обещал прилагаю схему, нарисовал от руки, если слишком убого, предоставлю любой другой вариант. И закинул фотки самой платы с датчиком(которая находилась в коробочке). 
https://yadi.sk/d/XubWj78XHye2Qw

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

dagonn пишет:

Как и обещал прилагаю схему, нарисовал от руки, если слишком убого, предоставлю любой другой вариант. И закинул фотки самой платы с датчиком(которая находилась в коробочке). 

https://yadi.sk/d/XubWj78XHye2Qw

 

Похоже, что кроме прилепленного поста  "как вставить программу..." нуже еще пост "как вставить картинку..." и, в идеале "как вставить текст..."

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Не хочется опять жевать тему про конечные автоматы. А так простейшая задача и немного писанины.

Araris
Offline
Зарегистрирован: 09.11.2012

mykaida пишет:

Похоже, что кроме прилепленного поста  "как вставить программу..." нуже еще пост "как вставить картинку..." и, в идеале "как вставить текст..."

http://arduino.ru/forum/obshchii/sokhranenie-kartinok-na-forume

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dagonn пишет:

Как и обещал прилагаю схему, 

1. Вставляйте картинку в пост.

2. Ничего не имею против рисования от руки, но общепринятые обозначения для схем надо соблюдать. Я вот просто не понял что там за две детали под PIR и как они подключаются.