Member 13646916 Ответов: 1

Я не могу увеличить или уменьшить нет. Лиц, когда цикл запущен


мой проект-автоматический контроллер освещения комнаты со счетчиком посетителей с помощью arduino. мой проект работал правильно до этого, но проблема, когда мы подключили gsm-модуль к нашему проекту, потому что мы дали предел thye room, поэтому, когда после превышения лимита с помощью gsm msg должен быть отправлен администратору. Фактическая проблема заключается в том,что когда предел превышает, код не выходит из цикла и когда мы пытаемся увеличить или уменьшить количество людей, использующих ИК-датчик, но этого не происходит. Помогите мне, какие петли я копировать использовать автоматически отправить сообщение

Что я уже пробовал:

<pre>#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;}

}
}

1 Ответов

Рейтинг:
1

CPallini

Я смотрю, у вас есть две проблемы: IR датчик (или код, обрабатывающий его) не работает и отсутствует уведомление.
Вы могли бы сначала поиздеваться над IR датчик (простым способом было бы изменение с if (digitalRead(in)) к if (1) для того чтобы протестировать уведомительную часть кода. Тогда вы могли бы столкнуться с проблемой обнаружения людей. Есть много ресурсов, доступных в интернете по этой самой теме, см., например Обзор | датчик движения PIR | система обучения Adafruit[^].