2017-02-10 22 views
1

У меня есть этот код с веб-сайта, который я использую в качестве руководства для отправки SMS-сообщения с SIM800L, подключенного к моей Arduino Mega.SIM800L string concatenation

#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 
} 

Я добавил некоторые биты кода в середине, так что он будет получать строку ввода от пользователя в моем GUI Python через последовательное соединение.

#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* указатель, который указывает на адрес. Есть ли способ добавить строку из последовательного монитора в текст?

+0

* Arduino * имеет класс 'String', который имеет метод' 'concat()'] (https://www.arduino.cc/en/Reference/StringConcat), 'text' может быть просто объявлен «String», чтобы использовать эту функцию с гораздо меньшим количеством кода, чем в принятом ответе. И если * конкатенация * не соответствует вашим потребностям, то у 'String' также есть [оператор добавления] (https://www.arduino.cc/en/Tutorial/StringAdditionOperator). –

ответ

1

Вам необходимо преобразовать объект Arduino String в стандартную строку C. Вы можете сделать это, используя метод c_str() класса String. Он вернет указатель char*.

Теперь вы можете объединить две строки с помощью функции strncat из библиотеки C, string.h, а также с помощью 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); 

Обратите внимание, что это просто отрубает оставшиеся данные, если в буфере недостаточно места.

+1

Спасибо, Бен, это очень помогло мне! –