使用sim900通过arduino发送和接收短信
我的项目有一个奇怪的问题。我能够发送和接收短信,但由于某些原因,不是从同一个项目 这个小家伙发出了一个信息,并且工作正常:使用sim900通过arduino发送和接收短信,arduino,sms,arduino-uno,sim900,Arduino,Sms,Arduino Uno,Sim900,我的项目有一个奇怪的问题。我能够发送和接收短信,但由于某些原因,不是从同一个项目 这个小家伙发出了一个信息,并且工作正常: #include <SoftwareSerial.h> SoftwareSerial SIM900(7, 8); String no = "+38762701893"; String message = "this is some message"; void setup() { SIM900.begin(19200); delay(20000); }
#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8);
String no = "+38762701893";
String message = "this is some message";
void setup() {
SIM900.begin(19200);
delay(20000);
}
void sendSMS(String number, String mess) {
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.println("AT + CMGS = \"" + number + "\"");
delay(100);
SIM900.println(mess);
delay(100);
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(5000);
}
void loop() {
sendSMS(no, message);
do {} while (1);
}
#包括
软件串行SIM900(7,8);
字符串编号=“+38762701893”;
String message=“这是一些消息”;
无效设置(){
SIM900.贝京(19200);
延迟(20 000);
}
void sendSMS(字符串编号、字符串混乱){
SIM900.print(“AT+CMGF=1\r”);
延迟(100);
SIM900.println(“AT+CMGS=\”“+number+”\”;
延迟(100);
SIM900.println(mess);
延迟(100);
SIM900.println((char)26);
延迟(100);
SIM900.println();
延迟(5000);
}
void循环(){
发送短信(不,短信);
do{}while(1);
}
然而,如果我想让这个功能在一个更大的程序下工作,这个程序接收短信并做出响应,它就不起作用了
这是不工作示例的完整代码:
#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8);
String no = "+122333444"; //phone number
String message = "";
char inchar;
int b = 13;
bool state = 0;
void setup()
{
Serial.begin(19200);
SIM900.begin(19200);
delay(5000);
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
Serial.println("Ready...");
SIM900.begin(19200);
delay(500);
pinMode(b, OUTPUT);
}
void sendSMS(String number, String mess) {
SIM900.print("AT+CMGF=1\r");
delay(200);
SIM900.println("AT+CMGS=\"" + number + "\"");
delay(100);
SIM900.println(mess);
delay(100);
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(8000);
}
void loop()
{
if (state) {
sendSMS(no, message);
state = 0;
}
if (SIM900.available() > 0) {
inchar = SIM900.read();
Serial.print(inchar);
if (inchar == '#') {
delay(10);
inchar = SIM900.read();
Serial.print(inchar);
if (inchar == 'a') {
delay(10);
inchar = SIM900.read();
Serial.print(inchar);
if (inchar == '0') {
digitalWrite(b, LOW);
message = "something is off";
} else if (inchar == '1') {
digitalWrite(b, HIGH);
message = "something is on";
}
}
state = 1;
}
}
}
#包括
软件串行SIM900(7,8);
字符串编号=“+122333444”//电话号码
字符串消息=”;
焦英寸;
int b=13;
布尔状态=0;
无效设置()
{
连载《开始》(19200);
SIM900.贝京(19200);
延迟(5000);
SIM900.print(“AT+CMGF=1\r”);
延迟(100);
SIM900.print(“AT+CNMI=2,2,0,0,0\r”);
延迟(100);
Serial.println(“就绪…”);
SIM900.贝京(19200);
延迟(500);
pinMode(b,输出);
}
void sendSMS(字符串编号、字符串混乱){
SIM900.print(“AT+CMGF=1\r”);
延迟(200);
SIM900.println(“AT+CMGS=\”“+number+”\”;
延迟(100);
SIM900.println(mess);
延迟(100);
SIM900.println((char)26);
延迟(100);
SIM900.println();
延迟(8000);
}
void循环()
{
如果(州){
发送短信(不,短信);
状态=0;
}
如果(SIM900.available()>0){
inchar=SIM900.read();
串行打印(英寸);
如果(英寸='#'){
延迟(10);
inchar=SIM900.read();
串行打印(英寸);
如果(英寸=='a'){
延迟(10);
inchar=SIM900.read();
串行打印(英寸);
如果(英寸=0'){
数字写入(b,低);
message=“有东西坏了”;
}else if(inchar==“1”){
数字写入(b,高);
message=“有东西在开”;
}
}
状态=1;
}
}
}
此程序接收短信,打开或关闭LED,具体取决于短信内容,但由于某种原因,它不会回复。非常感谢您的帮助。您发送短信的代码不正确。我建议您使用类似gsmlib for arduino的库,它将正确处理所有任务 首先 SIM900.print(“AT+CMGF=1\r”) 这应该在setup()中执行一次 发送
SIM900.println(“AT+CMGS=\”“+number+\”)后
您需要等待调制解调器响应
,然后才能发送文本。在您的情况下,您假设调制解调器会在200毫秒内发送它
有几种gsm LIB可用,您可以使用sendSMS(数字、文本)等功能,它将处理所有其他内容 我在C#中做到了这一点,但您可以轻松转换为Arduino:
private void sendSMS_GSM()
{
if (serialPort.IsOpen)
{
strResponseSim = "";
serialPort.WriteLine("AT+CMGF=1\r\n");
while (strResponseSim != "AT+CMGF=1\r\r\nOK\r\n") ;
strResponseSim = "";
serialPort.WriteLine("AT+CSCS=\"GSM\"\r\n");
while (strResponseSim != "AT+CSCS=\"GSM\"\r\r\nOK\r\n") ;
strResponseSim = "";
serialPort.WriteLine("AT+CMGS=\"" + txtPhone.Text + "\"\r\n");
serialPort.WriteLine(txtMessage.Text);
serialPort.Write(new byte[] { 26 }, 0, 1);
while (strResponseSim == "OK") ;
strResponseSim = "";
}
}