Почему Arduino Mega и SIM900 не будут отправлять сообщения, если я ввожу / считываю на последовательном мониторе разные телефонные номера? - PullRequest
0 голосов
/ 05 марта 2020

Я новичок в arduino и gsm sim900, и в настоящее время я работаю с проектом, когда ученик сканирует свой штрих-код, он вводит посещаемость в базу данных и отправляет смс своим опекунам. Моя проблема в том, что когда я пытаюсь ввести разные числа, такие как «serial.available» и «readString (phonenumber)», это не отправит сообщение, я не получаю ошибок, и у сима есть электронная загрузка /. Извините за плохую грамматику. Вот код:

#include <SoftwareSerial.h>
SoftwareSerial SIM900A(6,7);
String number;
void setup()
{
  SIM900A.begin(9600);
  Serial.begin(9600);
  Serial.println ("SIM900A Ready");
  delay(100);
 Serial.print("Enter PHONE NUMBER: ");
 while(Serial.available()==0){}          //INPUT PHONE NUMBER
 number = Serial.readString();
 delay(500);
  Serial.println ("Type s to send message or r to receive message");

}
void loop()
{
  if (Serial.available()>0)
   switch(Serial.read())
  {
    case 's':
      SendMessage();
      break;
    case 'r':
      RecieveMessage();
      break;
  }
 if (SIM900A.available()>0)
   Serial.write(SIM900A.read());
}
 void SendMessage()
{
  Serial.println ("Sending Message");
  SIM900A.println("AT+CMGF=1");
  delay(1000);
  Serial.println ("Set SMS Number");
  SIM900A.print("AT+CMGS=\""+number+"\"\r");   //send to input phone number
  delay(1000);
  Serial.print(number);
  delay(500);
  Serial.println ("Set SMS Content");
  SIM900A.print("Message from ArduinoGSMSIM900");
  delay(100);
  Serial.println ("Finish");
  SIM900A.println((char)26);
  delay(1000);
  Serial.println ("Message has been sent");
}
 void RecieveMessage()
{
  Serial.println ("SIM900A Membaca SMS");
  delay (1000);
  SIM900A.println("AT+CNMI=2,2,0,0,0");
  delay(1000);
  Serial.write ("Unread Message done");
}

Пожалуйста, помогите мне, заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Хорошо, после стольких исследований я решил свою проблему. Это для людей, у которых будет та же проблема, что и у меня, которая потратила много времени на простую строку кода. Когда у меня serial.readString() на выходе будет пробел, как сказал @hcheung, поэтому, чтобы избавиться от этого пробела, я использую number.Trim(), он будет читать строку точной длины.

Окончательный набросок для Arduino GSM SIM900:

#include <SoftwareSerial.h>
SoftwareSerial SIM900A(10,11);
String number;
String message;
void setup()
{
  SIM900A.begin(9600);
  Serial.begin(9600);
  Serial.println ("SIM900A Ready");
  delay(100);
 Serial.print("Enter PHONE NUMBER: ");
 while(Serial.available()==0){}
 number = Serial.readString();
 delay(100);
 number.trim();
 delay(200);
 Serial.println(number.length());
 Serial.print("Enter MESSAGE: ");
 while(Serial.available()==0){}
 message = Serial.readString();
 delay(100);
  Serial.println ("Type s to send message or r to receive message");

}
void loop()
{
  if (Serial.available()>0)
   switch(Serial.read())
  {
    case 's':
      SendMessage();
      break;
    case 'r':
      RecieveMessage();
      break;
  }
 if (SIM900A.available()>0)
   Serial.write(SIM900A.read());
}
 void SendMessage()
{
  Serial.println ("Sending Message");
  SIM900A.println("AT+CMGF=1");
  delay(1000);
  Serial.println ("Set SMS Number");
  SIM900A.print("AT+CMGS=\""+number+"\"\r");
  delay(1000);
  Serial.print(number);
  delay(500);
  Serial.println ("Set SMS Content");
  SIM900A.print(message);
  delay(100);
  Serial.println ("Finish");
  SIM900A.println((char)26);
  delay(1000);
  Serial.println ("Message has been sent");
}
 void RecieveMessage()
{
  Serial.println ("SIM900A Membaca SMS");
  delay (1000);
  SIM900A.println("AT+CNMI=2,2,0,0,0");
  delay(1000);
  Serial.write ("Unread Message done");
}
0 голосов
/ 06 марта 2020

Если вы прочитаете документацию SoftwareSerial Library , вы заметите, что в ней сказано:

Библиотека имеет следующие известные ограничения:

Не все контакты на Mega и Mega 2560 поддерживают прерывания смены, поэтому для RX можно использовать только следующее: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

Поэтому измените свою строку на SoftwareSerial SIM900A(6,7); на что-то другое, чем контакты 6 и 7.

...