Как отправлять сообщения на несколько номеров с помощью модуля Arduino uno и SIM800?

Я использую следующий код для отправки сообщения с помощью Arduino Uno & Модуль SIM800. Но мне нужно отправить одно и то же сообщение на несколько номеров, тогда какие изменения я должен внести в свой код.

const int buttonPin = 8;   // Датчик главных ворот 1
const int buttonPin1 = 7;  // Датчик главных ворот 2
const int buttonPin2 = 9;  // Датчик кладовой 1
const int buttonPin3 = 10; // Датчик кладовой 2

bool i = false;
bool j = false;
bool k = false;
bool l = false;

void setup()
{
  Serial.begin(9600);

  pinMode(buttonPin, INPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);

  digitalWrite(buttonPin, LOW);
  digitalWrite(buttonPin1, LOW);
  digitalWrite(buttonPin2, LOW);
  digitalWrite(buttonPin3, LOW);

  delay(1000);
}
void loop()

{
  sensor1();
  sensor2();
}
  void sensor1()
  {
  if (digitalRead(buttonPin1)== LOW && digitalRead(buttonPin) == HIGH  && i == false)

  {
    Serial.println("OK");
    delay(1000);
    Serial.print("AT+CMGF=1\r\n");
    delay(500);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91...................");
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Main Gate is Closed");
    Serial.write(0x1A);
    delay(1000);
    i = true;
    j = false;

  }

  if (digitalRead(buttonPin)== LOW && digitalRead(buttonPin1) == HIGH &&  j == false)
  {
    Serial.println("OK");
    delay(1000);
    Serial.print("AT+CMGF=1\r\n");
    delay(500);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91........................");
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Main Gate is open");
    Serial.write(0x1A);
    delay(1000);
    j = true;
    i = false;
  }
  }
  void sensor2()
  {
  if (digitalRead(buttonPin2) == HIGH && digitalRead(buttonPin3)==LOW && k == false)
  {
    Serial.println("OK");
    delay(1000);
    Serial.print("AT+CMGF=1\r\n");
    delay(500);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91....................");
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Store room is Closed");
    Serial.write(0x1A);
    delay(1000);
    k = true;
    l = false;
  }
  if (digitalRead(buttonPin3) == HIGH &&digitalRead(buttonPin2)== LOW && l == false)
  {
    Serial.println("OK");
    delay(1000);
    Serial.print("AT+CMGF=1\r\n");
    delay(500);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91....................");
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Store room is Open");
    Serial.write(0x1A);
    delay(1000);
    l = true;
    k = false;
  }
}

, 👍2

Обсуждение

Напишите функцию, которая отправляет любое сообщение на любой номер, и вызывайте ее несколько раз., @Majenko


3 ответа


Лучший ответ:

1

@nilesh просто добавьте небольшую задержку между двумя сеансами массажа

Я изменил ваш код, проверьте его

const int Main1 = 8;
const int Main2 = 9;
const int Store1 = 7;
const int Store2 = 10;
bool i = false;
bool j = false;
bool k = false;
bool l = false;

void setup()
{
  Serial.begin(9600);

  pinMode(Main1, INPUT);
  pinMode(Main2, INPUT);
  pinMode(Store1, INPUT);
  pinMode(Store2, INPUT);

  digitalWrite(Main1, LOW);
  digitalWrite(Main2, LOW);
  digitalWrite(Store1, LOW);
  digitalWrite(Store2, LOW);

  delay(1000);
}
void loop()

{
  sensor1();
  sensor2();
}
void sensor1()
{
  if (digitalRead(Main1) == HIGH && digitalRead(Main2) == LOW && i == false)

  {
    Serial.println("OK");
    delay(1000);
    Serial.print("AT+CMGF=1\r\n");
    delay(500);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91-----------");// первое число
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Main gate closed");
    Serial.write(0x1A);
    delay(5000);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91-----------");// Второе число
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Main gate closed");
    Serial.write(0x1A);
    delay(1000);
    i = true;
    j = false;

  }
  if (digitalRead(Main2) == HIGH && digitalRead(Main1) == LOW && j == false)
  {
    Serial.println("OK");
    delay(1000);
    Serial.print("AT+CMGF=1\r\n");
    delay(500);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91---------------");//первое число
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Main gate Open");
    Serial.write(0x1A);
    delay(5000);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91--------------"); second number
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Main gate Open");
    Serial.write(0x1A);
    delay(1000);
    j = true;
    i = false;
  }
}
void sensor2()
{
  if (digitalRead(Store1) == HIGH && digitalRead(Store2) == LOW && k == false)
  {
    Serial.println("OK");
    delay(1000);
    Serial.print("AT+CMGF=1\r\n");
    delay(500);
    Serial.print("AT+CMGS=\"");
   Serial.print("+91-----------");// первое число
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Store room is closed");
    Serial.write(0x1A);
    delay(10000);
    Serial.print("AT+CMGS=\"");
    Serial.print("+91-----------");// второе число
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Store room is Closed");
    Serial.write(0x1A);
    delay(1000);
    k = true;
    l = false;
  }
  if (digitalRead(Store2) == HIGH && digitalRead(Store1) == LOW && l == false)
  {
    Serial.println("OK");
    delay(1000);
    Serial.print("AT+CMGF=1\r\n");
    delay(500);
    Serial.print("AT+CMGS=\"");
   Serial.print("+91-----------");// первое число
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Store room is Open");
    Serial.write(0x1A);
    delay(5000);
    Serial.print("AT+CMGS=\"");
   Serial.print("+91-----------");// Второе число
    Serial.print("\"\r\n");
    delay(2000);
    Serial.print("Store room is Open");
    Serial.write(0x1A);
    delay(1000);
    l = true;
    k = false;
  }
}

спасибо

[email protected]

,

-1

Попробуйте этот. Здесь я сделал код для двух чисел. Просто добавьте новую функцию для каждого нового числа. Я надеюсь, что это поможет вам.

const int buttonPin = 8;   // Датчик главных ворот 1
const int buttonPin1 = 7;  // Датчик главных ворот 2
const int buttonPin2 = 9;  // Датчик кладовой 1
const int buttonPin3 = 10; // Датчик кладовой 2

bool i = false;
bool j = false;
bool k = false;
bool l = false;

void setup()
{
  Serial.begin(9600);

  pinMode(buttonPin, INPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);

  digitalWrite(buttonPin, LOW);
  digitalWrite(buttonPin1, LOW);
  digitalWrite(buttonPin2, LOW);
  digitalWrite(buttonPin3, LOW);

  delay(1000);
}
void loop()

{
  sensor1();
  sensor2();
}

void sensor1()
{
  if (digitalRead(buttonPin1)== LOW && digitalRead(buttonPin) == HIGH  && i == false)
  {
    numOneGateClose();
    numTwoGateClose();
    i = true;
    j = false;
  }

  if (digitalRead(buttonPin)== LOW && digitalRead(buttonPin1) == HIGH &&  j == false)
  {
   numOneGateOpen();
   numTwoGateOpen();
    j = true;
    i = false;
  }
}

void sensor2()
{
  if (digitalRead(buttonPin2) == HIGH && digitalRead(buttonPin3)==LOW && k == false)
  {
    numOneRoomClose();
    numTwoRoomClose();
    k = true;
    l = false;
  }

  if (digitalRead(buttonPin3) == HIGH &&digitalRead(buttonPin2)== LOW && l == false)
  {
    numOneRoomOpen();
    numTwoRoomOpen();
    l = true;
    k = false;
  }
}

void numOneGateClose()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+91...................");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Main Gate is Closed");
  Serial.write(0x1A);
  delay(1000);
}

void numTwoGateClose()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+91...................");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Main Gate is Closed");
  Serial.write(0x1A);
  delay(1000);
}

void numOneGateOpen()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+91........................");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Main Gate is open");
  Serial.write(0x1A);
  delay(1000);
}

void numTwoGateOpen()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+91........................");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Main Gate is open");
  Serial.write(0x1A);
  delay(1000);
}

void numOneRoomClose()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+91...................");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Main Gate is Closed");
  Serial.write(0x1A);
  delay(1000);
}

void numTwoRoomClose()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+91...................");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Main Gate is Closed");
  Serial.write(0x1A);
  delay(1000);
}

void numOneRoomOpen()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+91........................");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Main Gate is open");
  Serial.write(0x1A);
  delay(1000);
}

void numTwoRoomOpen()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+91........................");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Main Gate is open");
  Serial.write(0x1A);
  delay(1000);
}
,

Я хотел бы отметить, что действительно должен быть метод SEND MESSAGE, который сделал бы весь скрипт короче и проще в отладке. Основной принцип REUSE в программировании., @Divisadero

он отправляет сообщение только на первый номер, @Nilesh Surwade

@NileshSurwade Вы написали разные числа для обеих функций? означает, что вам нужно добавить разные числа в numOneSensor1() и numTwoSensor1(). И то же самое для numOneSensor2() и numTwoSensor2(), @Hasan

Подавать пример. Этот код не является хорошим примером. Как говорит @Divisadero, напишите функцию SEND MESSAGE и используйте ее много раз., @Majenko

@ Хасан, сэр, я добавил два разных числа в numOneSensor1() и numTwoSensor1(). И я сделал то же самое для numOneSensor2() и numTwoSensor2(). Но это не работает, это только отправить сообщение на первый номер. Пожалуйста помоги., @Nilesh Surwade

@NileshSurwade Хорошо, позвольте мне снова проверить и обновить мой код., @Hasan

@NileshSurwade Я обновляю свой код. Надеюсь, это поможет., @Hasan


1

У меня тот же вопрос, но немного другой.

sim.println("AT+CMGS="+91xxxxxxxxxx"\r");

Я не хочу это писать. Я хочу написать номер мобильного телефона на последовательном мониторе в Arduino, и на этот номер я хочу отправить сообщение. как мне быть?

,