Умный дом. PIR датчик движения

Ernar
Offline
Зарегистрирован: 22.10.2016

Прошу помочь в написание программы для управление сигнализации.

 есть PIR датчик ,кнопка(активация сигнализации), ардуино

PIR датчик движения:

1)если кнопка не нажата включает освещение

2)если кнопка нажата(активируем режим сигнализации) включает пищалку, пищалка должна отключаться после отжатии кнопки

 

int ledPin = 9;  // инициализируем пин для светодиода
int inputPin = 4;  // инициализируем пин для получения сигнала от пироэлектрического датчика движения
int pirState = LOW;  // начинаем работу программы, предполагая, что движения нет
int val = 0;  // переменная для чтения состояния 4 пина
int Sigpin = 11; //  инициализируем пин для пищалки
int button = 12; // пин для кнопки
pinMode(button, INPUT);
 
void loop()  
{ val = digitalRead(inputPin);  // считываем значение с датчика
         if (val == HIGH && button==0)
         {  
            digitalWrite(ledPin, HIGH);  // включаем светодиод
                if (pirState == LOW) 
                 pirState = HIGH;
         } else     digitalWrite(ledPin, LOW); // выключаем светодиод
                    if (pirState == HIGH)
                        pirState = LOW;
 
if (val == HIGH && button==1 )
        {
           digitalWrite(Sigpin, HIGH);
         }  else
            {
               digitalWrite(Sigpin, LOW); // выключаем светодиод
             }
}

не получается когда нажимаю на кнопку,если до этого датчик срабатывал то сразу включается пищалка. 

при отключение сигнализации датчик не обнуляется. Помогите с реализации

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

1. Читаем и точно следуем правилам: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii Без этого Ваш код скорее всего и смотреть никто не будет.

2. таки тем здесь 100500 и там всё давно разжёвано. Кнопка "Поиск" в правом верхнем углу.

Ernar
Offline
Зарегистрирован: 22.10.2016






int ledPin = 9;  // инициализируем пин для светодиода
int inputPin = 4;  // инициализируем пин для получения сигнала от пироэлектрического датчика движения
int pirState = LOW;  // начинаем работу программы, предполагая, что движения нет
int sigState = LOW;
int val = 0;  // переменная для чтения состояния 4 пина
int Sigpin = 11; //  инициализируем пин для пищалки
int button = 12; // пин для кнопки
pinMode(button, INPUT);
void loop()  
val = digitalRead(inputPin);  // считываем значение с датчика
         if (val == HIGH && button==0)
         {  
            digitalWrite(ledPin, HIGH);  // включаем светодиод
                if (pirState == LOW) 
                 pirState = HIGH;
         } else     digitalWrite(ledPin, LOW); // выключаем светодиод
                    if (pirState == HIGH)
                        pirState = LOW;
 
if (val == HIGH && button==1 )
        {
           RemoteXY.led_1_r = 255;
           digitalWrite(Sigpin, HIGH);
 
         }  else
            {
               digitalWrite(Sigpin, LOW); // выключаем светодиод
       
             }
}

 

Ernar
Offline
Зарегистрирован: 22.10.2016

искал, не нашел..

1)не получается когда нажимаю на кнопку(активирую сигнализацию),если до этого датчик срабатывал то сразу включается пищалка. не могу обнулить значение PIR датчика при включение сигнализации

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

Попытка вставить код не защитана. Потренируйтесь ещё (там кстати есть "предпросмотр", вовсе не обязательно постить все попытки сюда.

Без нормально вставленного кода обсуждать его невозможно (хотя бы потому, что номеров строк нет).

Так что тренируйтесь.

Как вставите - посмотрим на код.

Ernar
Offline
Зарегистрирован: 22.10.2016

нету у меня кода, не получается написать. если мог то не поднимал бы вопрос

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/*
#1 PIR датчик -> 4(PIR_pin) 1 движение / 0 нет движения
          GND -> GND
освещение     -> 11 (Led_pin) 1 включено / 0 выключено
          GND -> GND
тублер        -> 12 (btn_pin) 0  свет  / 1 сигнализация
          GND -> GND
пищалка       -> 9 (Sign_pin)
          GND -> GND
*/
//#1
const int PIR_pin = 4; // пин пирометра
uint8_t PIR; // величина на пирометре
const int btn_pin = 12; // пин тумблера  0 включаем свет /  1 включаем сигнализацию
uint8_t btn; // величина на тумблере
const int Led_pin = 11; // пин светодиода
const int Sign_pin = 9; // пин пищалки
const int frequency = 1000; // частота звука сигнализации Гц
const int duration = 500; // длительность посылок миллисекундах
void setup() {
  //#1
  pinMode(PIR_pin, INPUT);
  pinMode(Led_pin, OUTPUT);
  digitalWrite(Led_pin, 0);
  pinMode(btn_pin, INPUT_PULLUP);
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //#1
  static uint32_t future1 = 0 ;
  if (MILLIS >= future1)   {
    future1 = MILLIS + 1000 ;
    PIR = digitalRead(PIR_pin);
    btn = digitalRead(btn_pin);
    digitalWrite(Led_pin, PIR && ! btn);
    if (PIR && btn)   tone(Sign_pin, frequency, duration);
  }
}

 

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

Ernar пишет:

нету у меня кода, не получается написать. если мог то не поднимал бы вопрос

 

ну. на нет. и суда нет

Ernar
Offline
Зарегистрирован: 22.10.2016

Спасибо qwone, ни то что некоторые умники