SIM800L 字符串连接

SIM800L string concatenation

我从一个网站获得了这段代码,我将其用作从连接到我的 Arduino Mega 的 SIM800L 发送 SMS 消息的指南。

#include <Sim800l.h>
#include <SoftwareSerial.h> 
Sim800l Sim800l;  //declare the library
char* text;
char* number;
bool error; 

void setup(){
    Sim800l.begin();
    text="Testing Sms";
    number="+542926556644";
    error=Sim800l.sendSms(number,text);
    // OR 
    //error=Sim800l.sendSms("+540111111111","the text go here");
}

void loop(){
    //do nothing
}

我在中间添加了一些代码,以便它可以通过串行连接在我的 Python GUI 中接收用户输入的字符串。

#include <Sim800l.h>
#include <SoftwareSerial.h> 
Sim800l Sim800l;  //declare the library
char* text;
char* number;
bool error;
String data;

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

void loop(){      
  if (Serial.available() > 0)
  {
    data = Serial.readString();
    Serial.print(data);
    sendmess();
  }
}   
void sendmess()
{
  Sim800l.begin();
  text="Power Outage occured in area of account #: ";
  number="+639164384650";
  error=Sim800l.sendSms(number,text);
  // OR 
  //error=Sim800l.sendSms("+540111111111","the text go here");  
}

我正在尝试将我的 serial.readString() 中的数据连接到 text 的末尾。 +%s 等常规方法不起作用。

在 Arduino IDE 我收到这个错误:

error: cannot convert ‘StringSumHelper’ to ‘char*’ in assignment

如果我没记错的话 char* 是一个指向地址的指针。有没有办法将串口监视器的字符串添加到文本中?

您必须将 Arduino String 对象转换为标准 C 字符串。您可以使用 String class 的 c_str() 方法来完成此操作。它将 return 一个 char* 指针。

现在您也可以将两个字符串与 strncat function from C library, string.h and also using strncpy 连接起来。

#include <string.h>

char message[160];  // max size of an SMS
char* text = "Power Outage occured in area of account #: ";
String data;

/*
 *    populate <String data> with data from serial port
 */

/* Copy <text> to message buffer */
strncpy(message, text, strlen(text));

/* Calculating remaining space in the message buffer */
int num = sizeof(message) - strlen(message) - 1;

/* Concatenate the data from serial port */
strncat(message, data.c_str(), num);

/* ... */

error=Sim800l.sendSms(number, message);

请注意,如果缓冲区中没有足够的 space,它将简单地切断剩余数据。