ИК-датчик не увеличивает и не уменьшает значение внутри цикла
Мой проект — автоматический контроллер освещения в помещении со счетчиком посетителей с использованием Arduino.
До этого мой проект работал правильно, но проблема началась, когда мы подключили к проекту модуль GSM, поскольку мы установили ограничение на комнату, поэтому при превышении лимита с использованием GSM администратору необходимо отправить сообщение.
Настоящая проблема заключается в том, что при превышении лимита код не выходит из цикла, и когда мы пытаемся увеличить или уменьшить количество людей, использующих ИК-датчик, этого не происходит.
Помогите мне, какой цикл мне следует использовать для автоматической отправки сообщений
#include<LiquidCrystal.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 5);
char msg;
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
#define in 14
#define out 19
#define relay 2
int count = 0;
void IN()
{
count++;
lcd.clear();
lcd.print("Person In Room:");
lcd.setCursor(0, 1);
lcd.print(count);
delay(1000);
}
void OUT()
{
count--;
lcd.clear();
lcd.print("Person In Room:");
lcd.setCursor(0, 1);
lcd.print(count);
delay(1000);
}
void setup()
{
lcd.begin(16, 2);
lcd.print("Visitor Counter");
delay(2000);
pinMode(in, INPUT);
pinMode(out, INPUT);
pinMode(relay, OUTPUT);
lcd.clear();
lcd.print("Person In Room:");
lcd.setCursor(0, 1);
lcd.print(count);
mySerial.begin(9600); // Setting the baud rate of GSM Module
Serial.begin(9600); // Setting the baud rate of Serial Monitor (Arduino)
Serial.println("GSM SIM900A BEGIN");
Serial.println("Enter character for control option:");
Serial.println("s : to send message");
Serial.println();
delay(100);
}
void loop()
{
if (digitalRead(in))
IN();
if (digitalRead(out))
OUT();
if (count <= 0)
{
lcd.clear();
digitalWrite(relay, LOW);
lcd.clear();
lcd.print("Nobody In Room");
lcd.setCursor(0, 1);
lcd.print("Light Is Off");
delay(200);
}
else
digitalWrite(relay, HIGH);
if (count >= 3)
{
SendMessage();
digitalWrite(relay, HIGH);
delay(100);
lcd.clear();
lcd.print("Limit exceeded");
lcd.setCursor(0, 1);
lcd.print(count);
return;
}
//else
// digitalWrite(relay, LOW);
if (Serial.available() > 0)
switch (Serial.read())
{
case 's':
SendMessage();
break;
case 'r':
ReceiveMessage();
break;
}
if (mySerial.available() > 0)
Serial.write(mySerial.read());
}
void SendMessage()
{
mySerial.println("AT+CMGF=1"); //Sets the GSM Module in Text Mode
delay(1000); // Delay of 1000 milli seconds or 1 second
mySerial.println("AT+CMGS=\"+918419906897\"\r"); // Replace x with mobile number
delay(1000);
mySerial.println("GSM TEST:Limit of the room exceeded");// The SMS text you want to send
delay(100);
mySerial.println((char)26);// ASCII code of CTRL+Z
delay(1000);
//Serial.end();
}
void ReceiveMessage()
{
mySerial.println("AT+CNMI=2,2,0,0,0"); // AT Command to recieve a live SMS
delay(1000);
if (mySerial.available() > 0)
{
msg = mySerial.read();
Serial.print(msg);
}
}
void Response()
{
int count = 0;
Serial.println();
while (1)
{
if (Serial.available())
{
char data = Serial.read();
if (data == 'K') {
Serial.println("OK");
break;
}
if (data == 'R') {
Serial.println("GSM Not Working");
break;
}
}
count++;
delay(10);
if (count == 1000) {
Serial.println("GSM not Found");
break;
}
}
}
@Nag Raju, 👍-1
0
Смотрите также:
- Проблема с получением SMS - GSM-модуль Arduino Uno и SIM900A
- Мини-модем SIM900a, IMEI 0, помощь с контактами TX RX
- Как получить данные из базы данных моего сервера в переменную в моем Arduino?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Как выбрать вывод передачи в библиотеке IRremote для Arduino Uno?
- Как проверить, работает ли GSM-модуль?
- Как отправлять сообщения на несколько номеров с помощью модуля Arduino uno и SIM800?