Сигнализация.

davidka-oganesy...
Offline
Зарегистрирован: 10.02.2017

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

Для примечания: пьезопищалку я пока что убрал с кода,ибо библиотека каким то магическим способом конфликтует с ней и выдает ошибку.

#define Trig 12 //ультразвук
#define Echo 13 //ультразвук(2)
#define ledPin 8 //светодиод
 //пьезопищалка
//все для приемника
#include "IRremote.h"
IRrecv irrecv(10); // Указываем пин, к которому подключен приемник
decode_results results;

void setup() 
{  
  pinMode(Trig, OUTPUT); //инициируем как выход 
  pinMode(Echo, INPUT); //инициируем как вход 
  pinMode(ledPin, OUTPUT); 

  Serial.begin(9600); 
  /* задаем скорость общения. В нашем случае с компьютером */
  //ПРИЕМНИК=======>
  irrecv.enableIRIn(); // Запускаем прием
} 
unsigned int impulseTime=0; 
unsigned int distance_sm=0; 

void loop() 
{  
  digitalWrite(Trig, HIGH); 
  /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(Trig, LOW); // Отключаем 
  impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса 
  distance_sm=impulseTime/58; // Пересчитываем в сантиметры 
  Serial.println(distance_sm); // Выводим на порт 
  int i = 0;
  if (distance_sm < 100 &&  i=0; ) // Если расстояние менее 100 сантиметром 
  {
 
  {
    digitalWrite(ledPin, HIGH); // Светодиод горит 
    delay(100);
    digitalWrite(ledPin, LOW); // Светодиод Потухает
    i++;
  }
 
  }
   if (irrecv.decode(&results));
   {
    int res = results.value;
    if(res== 0x24DB && 0x824DB)
    {
      int i=0;
       digitalWrite(ledPin, LOW);
    }
    }
    delay(100);
   }

  /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. 
   Это время называется периодом цикла (cycle period). 
   Рекомендованный период между импульсами должен быть не менее 50 мс.  */

 

b707
Онлайн
Зарегистрирован: 26.05.2017

вопрос-то в чем?

davidka-oganesy...
Offline
Зарегистрирован: 10.02.2017

Вопрос в том,что я  не могу полноценно дописать программу. Поэтому и пишу сюда

b707
Онлайн
Зарегистрирован: 26.05.2017

Мне кажется, вы неверно понимаете смысл форума. Тут помогают тем, кто задает конкретные вопросы.  А код за вас никто дописывать не станет, думаю. Хотя может найдется какой-нить благотворитель

davidka-oganesy...
Offline
Зарегистрирован: 10.02.2017

Так я и не прошу,чтобы мне ее за меня написали.Я прошу лишь помочь ее дописать,под этим я имею ввиду подсказать,где я допустил ошибку и где следовало бы ее исправить.Все.

b707
Онлайн
Зарегистрирован: 26.05.2017

davidka-oganesyan@mail.ru пишет:

Так я и не прошу,чтобы мне ее за меня написали.Я прошу лишь помочь ее дописать,под этим я имею ввиду подсказать,где я допустил ошибку и где следовало бы ее исправить.Все.

А какая ошибка - остальные должны догадаться? Хотя бы опишите ее, приведите код ошибки

davidka-oganesy...
Offline
Зарегистрирован: 10.02.2017

Как только датчик замечает расстояние меньше 100 см,начинает мигать светодиод,как и следует.Затем датчик видит расстояние больше 100 см и светодиод перестает мигать,что не приемлемо.Работать эта система должна по вышеописанным условиям.

davidka-oganesy...
Offline
Зарегистрирован: 10.02.2017

В этом то и дело,что где ошибка-я и не знаю)

b707
Онлайн
Зарегистрирован: 26.05.2017

скобки в строка 37 и 42 лишние.

Уточните, "сигнализация" - это мигание диода в строках с 38 по 41 ?

davidka-oganesy...
Offline
Зарегистрирован: 10.02.2017

Все верно.Якобы это сигнализация.Программа нужна для базового ''Фундамента'' умной комнаты

b707
Онлайн
Зарегистрирован: 26.05.2017

Строчку 33 надо перенести в setup()

Cтроки с 34 по 44 перепишите так:

if (distance_sm < 100 ||  i==1 ) // Если расстояние менее 100 сантиметром 
  {
 
    digitalWrite(ledPin, HIGH); // Светодиод горит 
    delay(100);
    digitalWrite(ledPin, LOW); // Светодиод Потухает
    i=1;
  
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

davidka-oganesyan@mail.ru пишет:

Как только датчик замечает расстояние меньше 100 см,начинает мигать светодиод,как и следует.Затем датчик видит расстояние больше 100 см и светодиод перестает мигать,что не приемлемо.Работать эта система должна по вышеописанным условиям.

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

Пока растояние больше 100, переменная принимает значение false. Как только расстояние станет меньше 100, переменная должна принять значение true. И затем, когда расстояние снова станет больше 100, эту переменную трогать не нужно, сбрасывать ее надо по Выбранному Вами внешнему действию - кнопка или что там у Вас, я уже не помню.

Соответственно, сигнализация (светодиод?) горит или мигает (как Вам удобнее) все время, пока переменная равно true.