Код (Text): int hallSensorPin = 2; // Задаем переменную hallSensorPin со значением 2 int ledPin = 13; // Задаем переменную ledPin со значением 13 int state = 0; // Задаем переменную state со значением 0 int flag = 0; // Задаем переменную flag со значением 0 void setup() { Serial.begin(115200); pinMode(hallSensorPin, INPUT); // Назначаем значение переменной hallSensorPin == 2 как номер пина, т.е. PIN №2 pinMode(ledPin, OUTPUT); // Назначаем значение переменной ledPin == 13 как номер пина, т.е. PIN №13 } void loop() { state = digitalRead(hallSensorPin); // Считываем состояние с пина hallSensorPin и записываем в переменную state if(state==LOW&&flag==0) //если дверь открыта и перемення flag равна 0 , то ... { digitalWrite(ledPin, HIGH); // светодиод включаем flag=1; // переменной flag назначаем 1, чтобы отправить сообщение об открытии только один раз // sendMesage() //+ отправляем сообщение "дверь открылась" Serial.print("Дверь открылась: "); Serial.println(!state); // при этом будет state=0, flag=1 } if(state==HIGH&&flag==1) //если дверь закрыта и переменная flag равна 1 ,то ... { digitalWrite(ledPin, LOW); // светодиод отключаем flag=0; // переменной flag назначаем 0, чтобы отправить сообщение об закрытии только один раз // sendMesage() //+ отправляем сообщение "дверь закрылась" Serial.print("Дверь закрылась: "); Serial.println(!state); // при этом будет state=1, flag=0 } // если дверь все еще открыта, то мигаем светодиодом if(state==LOW&&flag==1) //если дверь все еще открыта и переменная flag равна 1 ,то ... { delay(500); digitalWrite(ledPin, LOW); // светодиод отключаем delay(500); digitalWrite(ledPin, HIGH); // светодиод включаем Serial.print("Дверь все еще открыта"); // sendMesage() //+ отправляем сообщение "дверь еще открыта" } delay(500); // Ждём 500 милисекунд }
Добрый вечер! Схему подправил, комментарии добавляю. При открытии двери у меня включается свет над ней, собрано на транзисторах. Захотел перейти на ESP чтобы еще отправлялось сообщение на телефон по MQTT (типа сигнализация). Написал код проверить датчик Холла, и пока без Wifi и Mqtt. Код (C++): int hallSensorPin = 14; // Задаем переменную hallSensorPin со значением 14 int ledPin = 15; // Задаем переменную ledPin со значением 15 int state = 0; // Задаем переменную state со значением 0 int flag = 0; // Задаем переменную flag со значением 0 void setup() { Serial.begin(115200); pinMode(hallSensorPin, INPUT); // Назначаем значение переменной hallSensorPin =14 как номер пина, т.е. PIN №2 pinMode(ledPin, OUTPUT); // Назначаем значение переменной ledPin =13 как номер пина, т.е. PIN №13 } void loop() { state = digitalRead(hallSensorPin); // Считываем состояние с пина hallSensorPin и записываем в переменную state if(state==HIGH&&flag==0) //если дверь открыта и перемення flag равна 0 , то ... { digitalWrite(ledPin, HIGH); // светодиод включаем flag=1; // переменной flag назначаем 1, чтобы отправить сообщение об открытии только один раз // вставить КОД об отправки сообщения по MQTT -- "дверь открылась" Serial.print("Дверь открылась: "); Serial.println(!state); // при этом будет state=0, flag=1 } if(state==LOW&&flag==1) //если дверь закрыта и переменная flag равна 1 ,то ... { digitalWrite(ledPin, LOW); // светодиод отключаем flag=0; // переменной flag назначаем 0, чтобы отправить сообщение об закрытии только один раз // вставить КОД об отправки сообщения по MQTT -- "дверь закрылась" Serial.print("Дверь закрылась: "); Serial.println(!state); // при этом будет state=1, flag=0 } // если дверь все еще открыта, то мигаем светодиодом if(state==HIGH&&flag==1) //если дверь все еще открыта и переменная flag равна 1 ,то ... { delay(500); digitalWrite(ledPin, LOW); // светодиод отключаем delay(500); digitalWrite(ledPin, HIGH); // светодиод включаем Serial.print("Дверь все еще открыта"); // вставить КОД об отправки сообщения по MQTT -- "дверь еще открыта" } delay(500); // Ждём 500 милисекунд } Принцип работы: Три состояния по трем If 1 - магнит далеко от датчика. Включаем светодиод. После настройки MQTT добавляем сообщение "открылась". 2 - магнит возле датчика. Отключаем светодиод. После настройки MQTT добавляем сообщение "закрылось". 3 - мигаем светодиодом (чтобы была видна работа кода), что дверь еще открыта. После настройки MQTT добавляем сообщение "еще открыто" и убираем мигание. Схема подключения: Датчик Холла униполярный цифровой подключается + к пину VCC - к пину GND сигнальный к пину 14 при этом между пином VCC и 14 стоит резистор 10кОм, чтобы при открытии двери на пин 14 был HIGH. Далее хочу прикрутить MQTT, но не знаю на каком облачном сервисе настроить брокер.
Традиционный совет - поставьте между датчиком и пином Ардуины резистор в диапазоне 220-1000 ом. Если Ардуина вдруг переключит пин с режима входа на режим выход - резистор защитит от КЗ (из-за конфликта выходов). Закон Мерфи - если косяк может случиться - он случится.