датчик движения+зуммер(пищалка)

PEN
Offline
Зарегистрирован: 21.04.2017

при срабатывании датчика движения нужно, чтоб пищал зуммер. например 1 мин. движения нет зуммер не пищит.попрбоал сваять скетч зуммер пищит постоянно,что я сделал не так.понятно модуль для ардуино  ЗУММЕР АКТИВНЫЙ  на 3 провода.вот скетч

//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;      
//Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn;       
//Пауза, после которой движение считается оконченным
long unsigned int pause = 5000;
//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean lockLow = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime;
int pinPirSensor= 4;//вывод подключения PIR датчика
int pinBuzzer= 5;//вывод зуммера
 
 
void setup()
 {
  Serial.begin(9600);
  pinMode(pinPirSensor,INPUT);
  pinMode(pinBuzzer,OUTPUT);
  digitalWrite(pinBuzzer,LOW);   //отключим на всякий случай пищалку 
 //дадим датчику время на калибровку
  Serial.print("Calibrating");
  for(int i = 0; i < calibrationTime; i++)
  {
    Serial.print(".");
    delay(1000);
  }
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
  delay(50);
 
 
 
void loop()
 {
  //Если обнаружено движение
  if
   
  (digitalRead(pinPirSensor) == HIGH);
  
   {
    digitalWrite(pinBuzzer,HIGH);
    
   }
    
    {
  //Ели движения нет
  if(digitalRead(pinPirSensor) == LOW);
   {
   digitalWrite(pinBuzzer,LOW);
   delay(100);
}
}
}
Araris
Offline
Зарегистрирован: 09.11.2012

Уберите точки с запятыми после условий if.

http://arduino.ru/Reference/If

Ну и заодно уберите лишнюю пару фигурных скобок и delay(100);.

Ну будущее - ознакомьтесь с http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

 

PEN
Offline
Зарегистрирован: 21.04.2017

спасибо не ожидал,сечас начнется  иди в раздел -ищу иполнителя.А это нету с  ником П...... где скобки убрать?

PEN
Offline
Зарегистрирован: 21.04.2017
void loop()
 {
  //Если обнаружено движение
  if
   
  (digitalRead(pinPirSensor) == HIGH);
  
    digitalWrite(pinBuzzer,HIGH);
      
    
  
  //Ели движения нет
  if
  
  (digitalRead(pinPirSensor) == LOW);
   
   digitalWrite(pinBuzzer,LOW);
  
}

вот так

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Точки  с запятой вот здесь 

if(digitalRead(pinPirSensor) == LOW);

лишние, трактуюца как пустой оператор, убери их. Между условием if и фигурными скобками не должно быть ";"

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

Похоже ТС "запретили" писать так 

void loop(){
 if (digitalRead(pinPirSensor)) {   //Если обнаружено движение
    digitalWrite(pinBuzzer, HIGH);
  } else {                           //иначе движения нет
    digitalWrite(pinBuzzer, LOW);
  }
}

 

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

qwone пишет:

Похоже ТС "запретили" писать так 

void loop(){
 if (digitalRead(pinPirSensor)) {   //Если обнаружено движение
    digitalWrite(pinBuzzer, HIGH);
  } else {                           //иначе движения нет
    digitalWrite(pinBuzzer, LOW);
  }
}

 

Меня всегда раздражали подобные конструкции.

Почему не написаь просто:

digitalWrite(pinBuzzer, digitalRead(pinPirSensor));

 

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

andriano пишет:
Меня всегда раздражали подобные конструкции.

Тоже идиоткая запись. Для демотестов подойдет. А в приличную программу сувать нельзя. 

bwn
Offline
Зарегистрирован: 25.08.2014

qwone пишет:

andriano пишет:
Меня всегда раздражали подобные конструкции.

Тоже идиоткая запись. Для демотестов подойдет. А в приличную программу сувать нельзя. 

А по какой причине?

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

bwn пишет:
А по какой причине?

Если писать такие программы , то можно обойтись без МК совсем. Тупо перекинуть провода в обход МК.

bwn
Offline
Зарегистрирован: 25.08.2014

qwone пишет:

bwn пишет:
А по какой причине?

Если писать такие программы , то можно обойтись без МК совсем. Тупо перекинуть провода в обход МК.

Все таки цель ведь не в написании программы, а получении требуемого результата с меньшими затратами. Гвоздь можно забить камнем, молотком, топором, пневмомолотком. Если гвоздь один, нахрена мне пневмомолоток с его компрессорами и прочим, я это сделаю тем, что находится возле меня. Это будет проще, быстрее и приведет к требуемому результату.
Ни в коем случае не утверждаю, что развитие и познавание не требуются, но и самоцелью это становиться не должно. ИМХО.

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

bwn пишет:
Все таки цель ведь не в написании программы, а получении требуемого результата с меньшими затратами. Гвоздь можно забить камнем, молотком, топором, пневмомолотком. Если гвоздь один, нахрена мне пневмомолоток с его компрессорами и прочим, я это сделаю тем, что находится возле меня. Это будет проще, быстрее и приведет к требуемому результату.

Ни в коем случае не утверждаю, что развитие и познавание не требуются, но и самоцелью это становиться не должно. ИМХО.

 Если вы жили в пещере или очень далеко от людей, то да забивать гвоздь можно не только камнем, но и своей головой. А результат. Здесь тоже интересный вопрос. Если у вас будет сосед регулярно в 12 часов ночи забивать гвоздь в стену . Ну да он неуклюжий , да он он хочет научиться быстро забивать ,чем попало гвоздь в стену, но блин не получается.   А днем он на работе. Ну и так далее. 

bwn
Offline
Зарегистрирован: 25.08.2014

Вы невнимательно читаете: "Если гвоздь один". Если их сотня, я задумаюсь о компрессоре, если тысяча, сразу пойду покупать. А пример с забиванием гвоздей посреди ночи относится не к инструментам, которыми это делается, а отсутствию мозгов и воспитания у индивидуума.

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

Гвоздь не может быть один,их покупают пачками. Скорее всего надо забить один гвоздь. Но хорошо если у вас есть опыт забивать гвоздь в нужную поверхность, а не так " я знаю человека, который видел на канале ютуба , как забивают гвозди". Если у вас в квартире приличный ремонт и надо забить в стену гвоздь . Стена бетоная панельная и тому далее и прочее. И да у вас может получиться забить один гвоздь в стену. А может быть так https://www.youtube.com/watch?v=8PxZaFOByrU

ПС: Это могло быть весело, если бы не было так грусно. И так не только с гвоздями, но и со всеми вещами,

PEN
Offline
Зарегистрирован: 21.04.2017

извините что перебиваю ваш диалог но зуммер пищит постояно.Что я не так сделал-СТРОИТЕЛИ ?

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

PEN пишет:

извините что перебиваю ваш диалог но зуммер пищит постояно.Что я не так сделал-СТРОИТЕЛИ ?

Тут с народом побеседовал в соседней теме. Вы наверное разочаровались. Трагедии нет. Так это хорошо. Ведь разочарование это то что вас ждет в работе с Ардуиной. А если хотите больше, так надо глубже изучать программирование. 

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

PEN пишет:

извините что перебиваю ваш диалог но зуммер пищит постояно.Что я не так сделал-СТРОИТЕЛИ ?

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

PEN
Offline
Зарегистрирован: 21.04.2017
int pinPirSensor= 4;
int pinBuzzer= 5;


void setup()
 {
  Serial.begin(9600);
  pinMode(pinPirSensor,INPUT);
  pinMode(pinBuzzer,OUTPUT);
  digitalWrite(pinBuzzer,LOW);   //отключим на всякий случай пищалку 
 //дадим датчику время на калибровку
  Serial.print("Calibrating");
  for(int i = 0; i < calibrationTime; i++)
  {
    Serial.print(".");
    delay(1000);
  }
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
  delay(50);
} 



void loop()
{
 if (digitalRead(pinPirSensor))
 {   //Если обнаружено движение
    digitalWrite(pinBuzzer, HIGH);
  } else
  {                           //иначе движения нет
    digitalWrite(pinBuzzer, LOW);
  }

 

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

PEN
Offline
Зарегистрирован: 21.04.2017

Araris пишет:

PEN пишет:

извините что перебиваю ваш диалог но зуммер пищит постояно.Что я не так сделал-СТРОИТЕЛИ ?

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

Уберите точки с запятыми после условий if.

убрал выдает ошибку

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

Что за датчик движения - неизвестно, попробуйте заменить pinMode(pinPirSensor,INPUT); на pinMode(pinPirSensor,INPUT_PULLUP);

Вот это должно работать :

 if (digitalRead(pinPirSensor))
28  {   //Если обнаружено движение
29     digitalWrite(pinBuzzer, HIGH);
30   else
31   {                           //иначе движения нет
32     digitalWrite(pinBuzzer, LOW);
33   }

Где убрали ? Покажите результирующий скетч.

PEN
Offline
Зарегистрирован: 21.04.2017
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;      
//Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn;       
//Пауза, после которой движение считается оконченным
long unsigned int pause = 5000;
//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean lockLow = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime;
int pinPirSensor= 4;
int pinBuzzer= 5;


void setup()
 {
  Serial.begin(9600);
  pinMode(pinPirSensor,INPUT);
  pinMode(pinBuzzer,OUTPUT);
  digitalWrite(pinBuzzer,LOW);   //отключим на всякий случай пищалку 
 //дадим датчику время на калибровку
  Serial.print("Calibrating");
  for(int i = 0; i < calibrationTime; i++)
  {
    Serial.print(".");
    delay(1000);
  }
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
  delay(50);
} 



void loop()
{
 if (digitalRead(pinPirSensor))
 {   //Если обнаружено движение
    digitalWrite(pinBuzzer, HIGH)
  }
  else
  {      //иначе движения нет
    digitalWrite(pinBuzzer, LOW)
  }
}

 

PEN
Offline
Зарегистрирован: 21.04.2017

датчик движения hc-sr501 для ардуино, я пробую его настроить позже отпишусь хочу сделать сигнализацию а то замучили постоянно выставляют холодную зону(балкон на лестничной клетке)

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

OMG, да разберитесь уже с точками с запятыми наконец... Как Вы собираетесь дальше писать, не зная синтаксиса языка ?

digitalWrite(pinBuzzer, HIGH);

digitalWrite(pinBuzzer, LOW);
andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

qwone пишет:

bwn пишет:
А по какой причине?

Если писать такие программы , то можно обойтись без МК совсем. Тупо перекинуть провода в обход МК.

Отнюдь.

Естественно, когда я предлагал свой вариант, меня посетила мысль об отказе от МК. 

Но ведь далеко не всегда программа состояит из единственной строчки. Если, например, та кострукция, что я предпочитаю записывать в одну строку, а Вы - в четыре, находится после нескольких дополнительных условий, причем требующих запоминания предыдущего состояния и парсинга строки, то я крайне сомневаюсь, что такую схему будет проще собрать на россыпухе, нежели использовать МК. 

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

Мой способ записи проще и понятнее: то, что читаем в одном месте, его же нужно запихнуть в другое. Без всякого анализа, чему оно может быть равно.

 

PS. Писал по памяти, сейчас посмотрел - даже не 4, а 5 строк, учитывая закрывающую фигурною скобку. Кстати, скобки тут тоже не нужны (хотя я обычно ставлю).

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

Araris пишет:

 Как Вы собираетесь дальше писать, не зная синтаксиса языка ?

А нафига знать, когда есть Araris? :)

PEN
Offline
Зарегистрирован: 21.04.2017
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;      



int pinPirSensor= 4;// датчик движения
int pinBuzzer= 5; // зуммер
int ledPin = 13;   //вывод сигнального диода

void setup()
 {
  Serial.begin(9600);
  pinMode(pinPirSensor,INPUT_PULLUP);
  pinMode(pinBuzzer,OUTPUT);
  digitalWrite(pinBuzzer,LOW);   //отключим на всякий случай пищалку 
 //дадим датчику время на калибровку
  Serial.print("Calibrating");
  for(int i = 0; i < calibrationTime; i++)
   {
    //Во время калибровки будет мигать сигнальный диод
    i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);
    delay(1000);
  }
  //По окончанию калибровки зажжем сигнальный диод 
  digitalWrite(ledPin, HIGH);
  delay(50);
}


void loop()
 { 
if (digitalRead(pinPirSensor)==HIGH) //Если обнаружено движение   
 {
 digitalWrite(pinBuzzer, HIGH)  //пищалка пищит
 }
 
 else (digitalRead(pinPirSensor)==LOW)//Если  движение нет 
 { 
    digitalWrite(pinBuzzer, LOW)  //пищалка  непищит
 }
 }
 }

я  ни как не могу найти ошибку,уже новый скетч попробывал своять ,знаний мало

Araris
Offline
Зарегистрирован: 09.11.2012
digitalWrite(pinBuzzer, HIGH)
digitalWrite(pinBuzzer, LOW)

Рыдая, покидаю тему...

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

Araris пишет:

Рыдая, покидаю тему...

Правильно. Не надо было в неё входить. ТС уже имеет стойкую репутацию .... так что ....

PEN
Offline
Зарегистрирован: 21.04.2017

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

Araris пишет:

Рыдая, покидаю тему...

Правильно. Не надо было в неё входить. ТС уже имеет стойкую репутацию .... так что ....

 

А вот и  человек с буквой П .....ый.. где был а то мы соскучились долго ты добирался к нам еще не все темы обосрал

PEN
Offline
Зарегистрирован: 21.04.2017
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;      
int pinPirSensor= 4;// датчик движения
int pinBuzzer= 5; // зуммер
int ledPin = 13;   //вывод сигнального диода

void setup()
 {
  Serial.begin(9600);
  pinMode(pinPirSensor,INPUT_PULLUP);
  pinMode(pinBuzzer,OUTPUT);
  digitalWrite(pinBuzzer,LOW);   //отключим на всякий случай пищалку 
 //дадим датчику время на калибровку
  Serial.print("Calibrating");
  for(int i = 0; i < calibrationTime; i++)
   {
    //Во время калибровки будет мигать сигнальный диод
    i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);
    delay(1000);
  }
  //По окончанию калибровки зажжем сигнальный диод 
  digitalWrite(ledPin, HIGH);
  delay(50);
}


void loop()
 { 
if (digitalRead(pinPirSensor)==HIGH) //Если обнаружено движение   
 {
 digitalWrite(pinBuzzer, LOW);   //пищалка пищит
 
 
if (digitalRead(pinPirSensor)==LOW)//Если  движение нет 
 { 
    digitalWrite(pinBuzzer, HIGH);  //пищалка  непищит
 }
 }
 }

вроде исправил а как положено не работает

tokima
Offline
Зарегистрирован: 29.08.2015

PEN пишет:

...
  digitalWrite(pinBuzzer,LOW);   //отключим на всякий случай пищалку 
 ...
void loop()
 { 
if (digitalRead(pinPirSensor)==HIGH) //Если обнаружено движение   
 {
 digitalWrite(pinBuzzer, LOW);   //пищалка пищит
 
 
...

вроде исправил а как положено не работает

А пищалка по LOW должна пищать или не пищать?

b707
Offline
Зарегистрирован: 26.05.2017

tokima пишет:

А пищалка по LOW должна пищать или не пищать?

А это даже не важно, проблема кода ТС не в этом