Форум программистов, компьютерный форум, киберфорум
Наши страницы
Робототехника и умный дом
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
DaeRiuS
0 / 0 / 1
Регистрация: 24.03.2019
Сообщений: 6
1

Включение освещения в Умном доме

28.03.2019, 14:42. Просмотров 806. Ответов 2
Метки нет (Все метки)

Здравствуйте, форумчане. Осуществляю популярную и известную всем систему "Умный дом". Сделан макет, напиханы датчики, скоро буду делать нормальную проводку, но сейчас занялся самым сложным - кодом. И решил начать с освещения. Вроде бы ничего сложного, реакцию на смену состояния делаю таким же способом, как и всегда - отдельная функция, где происходит смена значения переменной 1 -> 0, 0 -> 1:
C++
1
2
3
4
5
6
void BUTTON_CHECK(){
  if (digitalRead(BUTTON_PIN == HIGH)){
    button_state = !button_state;
    delay(200);
  }
}
Весь код, с использованием нескольких датчиков(не все будут использоваться для этого в будущем) вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#define PIR_PIN A0   // Датчик присутствия
#define BUTTON_PIN A1   // Сенсорная кнопка
#define MICRO_PIN A3    // Датчик звука
#define GAS_PIN A4   // Датчик дыма и газов
#define BUZ 4     // Пъезо-пищалка
boolean button_state = false;
boolean pir_state = false;
boolean gas_state = false;
boolean micro_state = false;
 
 
void setup() {
Serial.begin(9600);
pinMode(PIR_PIN, INPUT);
pinMode(GAS_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT);
pinMode(MICRO_PIN, INPUT);
pinMode(BUZ, OUTPUT);
}
 
void loop() {
  BUTTON_CHECK();
  PIR_CHECK();
  GAS_CHECK();
  MICRO_CHECK();
  Serial.println(button_state);
  Serial.println(pir_state);
  Serial.println(gas_state);
  Serial.println(micro_state);
  Serial.println(" ");
  if ((button_state || pir_state || micro_state || gas_state) == true){
    BUZZER();   
  }
}
 
//////////////////////////////////////////////
void BUTTON_CHECK(){
  if (digitalRead(BUTTON_PIN == HIGH)){
    button_state = !button_state;
    delay(200);
  }
}
void PIR_CHECK(){
  if (digitalRead(PIR_PIN == HIGH)){
    pir_state = !pir_state;
    delay(200);
  }
}
void GAS_CHECK(){
  if (digitalRead(GAS_PIN == LOW)){
    gas_state = !gas_state;
    delay(200);
  }
}
void MICRO_CHECK(){
  if (digitalRead(MICRO_PIN == HIGH)){
    micro_state = !micro_state;
    delay(100);
  }
}
void BUZZER(){
  tone(BUZ, 25);
  delay(2000);
}
И сама проблема заключается в том, что с этим очень примитивным кодом(я писал его разными способами, поэтому выкладываю сюда, возможно не лучший, но последний, который был использован) у переменных состояния каждого датчика просто меняется само по себе состояние 1 -> 0, 0 -> 1 поочередно. У меня все далее выводится в порт, и видно, что пишет так:
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2019, 14:42
Ответы с готовыми решениями:

Включение/отключение освещения по расписанию
Здравствуйте. Появилась задача организовать в помещении включение и выключения лампы 220В в...

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

ЧПУ в умном фильтре битрикса
Здравствуйте, уважаемые форумчане! Возникла потребность сделать ЧПУ в умном фильтре и в принципе...

Перегрузка оператора разыменования в умном указателе
#include <stdio.h> template <class Type> class SmartPointer{ private: Type* pointer;...

Какой микроконтроллер находится в умном браслете от фирмы xiaomi?
Здравствуйте, не знаете ли какой микроконтроллер находится в умном браслете от фирмы xiaomi? Может...

2
marat_miaki
190 / 167 / 99
Регистрация: 08.04.2013
Сообщений: 692
28.03.2019, 19:04 2
Лучший ответ Сообщение было отмечено DaeRiuS как решение

Решение

а вы точно знаете как должен писаться digitalRead();
и чем вам поможет в вашем случае digitalRead(BUTTON_PIN == HIGH); ????

Добавлено через 4 минуты
C++
1
2
3
4
5
6
void BUTTON_CHECK(){
  if (digitalRead(BUTTON_PIN)==HIGH){
    button_state = !button_state;
    delay(200);
  }
}
остальное анологично

Добавлено через 2 минуты
это для общего развития тоже не помешает
http://robotosha.ru/arduino/multi-tasking-arduino.html
1
DaeRiuS
0 / 0 / 1
Регистрация: 24.03.2019
Сообщений: 6
30.03.2019, 09:20  [ТС] 3
Спасибо, о Превеликий Волшебник. Я всего лишь не там поставил скобки... а столько проблем. А про многозадачность почитаю. Спасибо за помощь и доп. литературу
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2019, 09:20

Изменение дизайна и положения всплывающего окна при фильтрации товаров в умном фильтре
Скажите пожалуйста, где в битриксе можно изменить дизайн и положение всплывающего окна при...

Включение пункта меню после включение чекбокса
Как правильно сделать, чтобы наличие галочки screenTimeOutTile пункта настроек включало неактивный...

Убрать освещения
Доброго времени суток, как можно убрать освещения, т.е. что бы блок был со всех сторон одинаково...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru