SIM800L从c#向arduino发送数据时出现问题
我想我的密码漏掉了什么 下面是我的C代码# 下面是我在Arduino中使用GSM模块SIM800L发送数据的代码SIM800L从c#向arduino发送数据时出现问题,c#,c,arduino,sim800,C#,C,Arduino,Sim800,我想我的密码漏掉了什么 下面是我的C代码# 下面是我在Arduino中使用GSM模块SIM800L发送数据的代码 #include <SoftwareSerial.h> //SIM800 TX is connected to Arduino D8 #define SIM800_TX_PIN 8 //SIM800 RX is connected to Arduino D7 #define SIM800_RX_PIN 7 //Create software serial o
#include <SoftwareSerial.h>
//SIM800 TX is connected to Arduino D8
#define SIM800_TX_PIN 8
//SIM800 RX is connected to Arduino D7
#define SIM800_RX_PIN 7
//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
void setup() {
//Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
while(!Serial);
//Being serial communication with Arduino and SIM800
serialSIM800.begin(9600);
delay(1000);
//Set SMS format to ASCII
serialSIM800.write("AT+CMGF=1\r\n");
delay(1000);
//getting the number
char remoteNum[20]; // telephone number to send sms
readSerial(remoteNum);
//Send new SMS command and message number
serialSIM800.print("AT+CMGS=\"");
serialSIM800.print(remoteNum);
serialSIM800.print("\"\r\n");
delay(1000);
// getting sms text
char txtMsg[200];
readSerial(txtMsg);
//Send SMS content
serialSIM800.print(txtMsg);
delay(1000);
//Send Ctrl+Z / ESC to denote SMS message is complete
serialSIM800.write((char)26);
delay(1000);
Serial.println("SMS Sent!");
}
/*
Read input serial
*/
char readSerial(char result[]) {
int i = 0;
while (1) {
while (Serial.available() > 0) {
char inChar = Serial.read();
if (inChar == '\n') {
result[i] = '\0';
Serial.flush();
return 0;
}
if (inChar != '\r') {
result[i] = inChar;
i++;
}
}
}
}
void loop() {
}
#包括
//SIM800 TX连接到Arduino D8
#定义SIM800_TX_引脚8
//SIM800 RX连接到Arduino D7
#定义SIM800_RX_引脚7
//创建与SIM800通信的软件串行对象
软件串行串行SIM800(SIM800_TX_引脚、SIM800_RX_引脚);
无效设置(){
//开始与Arduino和Arduino IDE(串行监视器)的串行通信
Serial.begin(9600);
而(!串行);
//与Arduino和SIM800进行串行通信
serialSIM800.begin(9600);
延迟(1000);
//将SMS格式设置为ASCII
serialSIM800.write(“AT+CMGF=1\r\n”);
延迟(1000);
//获取号码
char remoteNum[20];//发送短信的电话号码
readSerial(remoteNum);
//发送新的SMS命令和消息号码
serialSIM800.print(“AT+CMGS=\”);
serialSIM800.print(remoteNum);
serialSIM800.print(“\”\r\n”);
延迟(1000);
//获取短信
char-txtMsg[200];
readSerial(txtMsg);
//发送短信内容
serialSIM800.print(txtMsg);
延迟(1000);
//发送Ctrl+Z/ESC以表示SMS消息已完成
serialSIM800.write((char)26);
延迟(1000);
Serial.println(“SMS已发送!”);
}
/*
读输入串行
*/
char readSerial(char结果[]){
int i=0;
而(1){
while(Serial.available()>0){
char inChar=Serial.read();
如果(英寸=='\n'){
结果[i]='\0';
Serial.flush();
返回0;
}
如果(英寸!='\r'){
结果[i]=英寸;
i++;
}
}
}
}
void循环(){
}
我的困惑/问题是
每当我在Arduino中使用串行监视器进行测试时,Arduino中的代码都会成功地向手机号码发送消息。但当我在Visual Studio中使用C#使用表单时,什么也不会发生。也没有出现任何错误。我试着F11也知道我是否错过了一个错误,但我还是什么也看不到。但应用程序不会向该号码发送短信
非常感谢你们的帮助。提前感谢您。解决方案简单明了。您的所有例程都在Arduino设置中,该设置只运行一次。因此,从Arduino直接发送一条短消息正好可以工作一次。
当通过c代码连接时,Arduino已经启动并处于空循环中。因此,命中一次性运行代码的机会为零。
特别注意你的日常活动
readSerial(remoteNum);
在循环中,它应该按预期工作。在使用Visual Studio发送命令之前,您应该做的第一件事是正确配置串行端口,您只需关闭串行端口循环,您发送的所有内容都应该接收,如果您没有接收到任何内容,您的串行端口配置有问题
readSerial(remoteNum);