2017-02-10 28 views
1

私はArduino Megaに接続されたSIM800LからSMSメッセージを送信するためのガイドとして使用しているこのコードをWebサイトから取得しています。SIM800L文字列連結

#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"); 
} 

私はtextの終わりに私のserial.readString()からのデータを結合しようとしています。 +%sのような従来の方法は機能しません。 ArduinoのIDEで

私はこのエラーを取得しています:

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

私が正しいんだ場合char*がアドレスを指すポインタです。シリアルモニタから文字列をテキストに追加する方法はありますか?

+0

* Arduino *は['concat()'](https://www.arduino.cc/en/Reference/StringConcat)メソ​​ッドを持つ 'String'クラスを持ち、' ​​text'は単純に宣言できます受け入れられた答えよりもはるかに少ないコードでこの機能を利用する 'String' *連結*があなたのニーズに合わない場合、 'String'には[加算演算子](https://www.arduino.cc/en/Tutorial/StringAdditionOperator)もあります。 –

答えて

1

Arduino Stringオブジェクトを標準のC文字列に変換する必要があります。 Stringクラスのc_str()メソッドを使用してこれを行うことができます。 char*ポインタを返します。

これで、Cライブラリのstrncat関数(string.h)とstrncpyを使用して2つの文字列を連結することができます。

#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

ベンスありがとう、これは本当に私を助けてくれました! –