2017-02-10 3 views
1

내 Arduino 메가에 연결된 SIM800L에서 SMS 메시지를 보내는 지침으로 사용하는 웹 사이트의이 코드가 있습니다. 이 직렬 연결을 통해 내 파이썬 GUI에서 사용자로부터 문자열 입력을받을 수 있도록 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 
} 

나는 중간에 코드의 일부 비트를 추가했다.
#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과 같은 기존의 방법은 작동하지 않습니다.

는 아두 이노 IDE에서이 오류를 받고 있어요 : 나는 올바른 해요 경우

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

char*는 주소를 가리키는 포인터이다. 직렬 모니터의 문자열을 텍스트에 추가 할 수 있습니까?

+0

* Arduino *는 ['concat()'] (https://www.arduino.cc/en/Reference/StringConcat) 메서드를 갖는'String' 클래스를 가지고 있으며'text'는 단순히 이 기능을 받아 들일 수있는 대답보다 훨씬 적은 코드로 활용하는'String'. 그리고 * concatenation *이 여러분의 필요에 맞지 않는다면,'String'에는 [추가 연산자] (https://www.arduino.cc/en/Tutorial/StringAdditionOperator)도 있습니다. –

답변

1

Arduino String 개체를 표준 C 문자열로 변환해야합니다. String 클래스의 c_str() 메서드를 사용하여이 작업을 수행 할 수 있습니다. char* 포인터를 반환합니다.

이제 C 라이브러리의 strncat 함수 (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

감사합니다 bence, 이건 정말 많이 도와 줬어! –