2017-02-10 5 views
1

Ich habe diesen Code von einer Website, die ich als eine Anleitung zum Senden von SMS-Nachricht von einem SIM800L mit meinem Arduino Mega verwenden.SIM800L Zeichenfolge Verkettung

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

Ich habe einige Bits des Code in der Mitte, so dass sie eine String Eingabe von einem Benutzer in meinem Python GUI über die serielle Schnittstelle empfangen werden.

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

Ich versuche, die Daten von meinem serial.readString() bis zum Ende der text zu verketten. Herkömmliche Methoden wie die + und %s funktionieren nicht.

In Arduino IDE Ich erhalte diese Fehlermeldung:

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

Wenn ich richtig bin char* ist ein Zeiger, der auf eine Adresse verweist. Gibt es trotzdem die Zeichenfolge vom seriellen Monitor zum Text hinzuzufügen?

+0

* Arduino * hat eine 'String' Klasse, die eine' 'concat()'] (https://www.arduino.cc/en/Reference/StringConcat) Methode besitzt, 'text' könnte einfach deklariert werden eine 'Zeichenfolge', um diese Funktion mit viel weniger Code als in der akzeptierten Antwort zu nutzen. Und wenn * Verkettung * nicht Ihren Bedürfnissen entspricht, hat auch 'String' einen zusätzlichen Operator (https://www.arduino.cc/en/Tutorial/StringAdditionOperator). –

Antwort

1

Sie müssen das Arduino String Objekt in eine Standard-C-Zeichenfolge konvertieren. Sie können dies tun, indem Sie die c_str() Methode der String Klasse verwenden. Es wird einen char* Zeiger zurückgeben.

Jetzt können Sie die zwei Zeichenfolge mit der strncat Funktion von C-Bibliothek, string.h und auch mit strncpy als auch verketten.

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

Beachten Sie, dass die verbleibenden Daten einfach abgeschnitten werden, wenn nicht genügend Speicherplatz im Puffer vorhanden ist.

+1

Danke Bence, das hat mir wirklich sehr geholfen! –

Verwandte Themen