首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino SIM800L:将字符串转换为char*错误

Arduino SIM800L:将字符串转换为char*错误
EN

Stack Overflow用户
提问于 2018-01-18 12:06:40
回答 2查看 1.1K关注 0票数 1

我目前正在学习Arduino编程和发送短信与SIM800L模块的工作。

在SIM800L库的示例草图中,有一个用于发送短信的函数

代码语言:javascript
复制
char* text;
char* number;
bool error;                     //to catch the response of sendSms


void setup(){
   GSM.begin(4800);             
   text="Testing Sms";          //text for the message. 
   number="2926451386";         //change to a valid number.
   error=SIM800L .sendSms(number,text);
}

我需要将手机号码更改为API上的响应中的号码。当我调用该接口时,我可以得到响应。API返回一个手机号。

+639051234567它是String数据类型。

当我尝试将手机号码传递给sendSms函数时,我得到一个错误消息:cannot convert 'String' to 'char*' in assignment

这是一个完整的Arduino代码。

代码语言:javascript
复制
#include <Sim800L.h>
#include <SoftwareSerial.h>     
#include <UIPEthernet.h>

#define RX  10
#define TX  11

Sim800L GSM(RX, TX);

int buzzer = 8;
int smokeA0 = A5;
int smokeA1 = A4;
int smokeA2 = A3;

int sensorThres1 = 650;
int sensorThres2 = 500;
int sensorThres3 = 500;


byte mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};    
EthernetClient client;
char server[] = "192.168.2.100";
int  interval = 5000; 
char uid[] = "1"; 
String response = String(100); 
char* text;
char* number;

void setup() {

  pinMode(buzzer, OUTPUT);
  pinMode(smokeA0, INPUT);
  pinMode(smokeA1, INPUT);
  pinMode(smokeA2, INPUT);


  Serial.begin(9600);
  Ethernet.begin(mac);

  Serial.print("IP Address        : ");
  Serial.println(Ethernet.localIP());
  GSM.begin(4800);
}

void loop() {
   int analogSensor1 = analogRead(smokeA0);
   int analogSensor2 = analogRead(smokeA1);
   int analogSensor3 = analogRead(smokeA2);


  if (analogSensor1 > sensorThres1 || analogSensor2 > sensorThres2 || analogSensor3 > sensorThres3){

if(client.connect(server, 80)){
        Serial.println("-> Connected");
        // Make a HTTP request:
        client.print( "GET /apartment/insert.php?");
        client.print("uid=");
        client.print(uid);
        client.println( " HTTP/1.1");
        client.print( "Host: " );
        client.println(server);
        client.println( "Connection: close" );
        client.println();
        client.println();

       while (client.connected()) {
          if (client.available()) {
            char c = client.read();
            //Serial.print(c);
            response= response + c;
          }
       }

       int contentBodyIndex = response.lastIndexOf('\n');
       if (contentBodyIndex > 0) {
          String str = response.substring(contentBodyIndex);
          int respLen = str.length() + 1;
          char charArr[respLen];

          number = str.toCharArray(charArr, respLen); // getting error 'void value not ignored as it ought to be'

          text = "Smoke was detected in your apartment unit";
          error=GSM.sendSms(number ,text);
       }



        client.stop();
        delay(1000); 
        tone(buzzer, 1000);
        delay(10000); 
        noTone(buzzer);
        delay(1000);    
      }else{
        Serial.println("--> connection failed/n");
      }
 }
 else
 {
   noTone(buzzer);
 }
 delay(1000);
}

感谢您的帮助..谢谢你们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-18 12:30:26

我认为只需将String数组转换为char *数组就足够了:

代码语言:javascript
复制
...
String str = response.substring(contentBodyIndex);
int respLen = str.length() + 1
char charArr[respLen];
str.toCharArray(charArr, respLen);

text = "Smoke was detected in your apartment unit";
error=GSM.sendSms(charArr ,text);
...
票数 2
EN

Stack Overflow用户

发布于 2018-01-18 23:21:36

除非sendSms修改了数字,否则不需要将String对象复制到字符数组中。

您可以只使用c_str传递String对象的内部字符数组的指针。

代码语言:javascript
复制
String num = response.substring(contentBodyIndex+1); // +1 to get rid of the '+'
error = SIM800L.sendSms(num.c_str(), text);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48313690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档