首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Arduino:字符串到多个变量

Arduino:字符串到多个变量
EN

Stack Overflow用户
提问于 2015-12-02 22:09:45
回答 1查看 1.6K关注 0票数 0

我正试图通过433 the的无线电通信从两个传感器发送数据。我成功地发送和接收了字符串(char数组) "number1,number2“。

现在,我试图将这两个数字存储在单独的int变量中(值超过256)。

我几乎什么都试过了(主要是斯坎夫和阿托伊),但似乎不起作用。

A0A1,我连接了两个电位器,它们的值我想存储在valorXvalorY中。

你有什么建议?我不能保证我正确地使用了斯堪夫和阿托伊。

发射机代码:

代码语言:javascript
运行
复制
#include <VirtualWire.h>

int xvalue;
int yvalue;

  void setup() {

  Serial.begin(9600);
  vw_set_ptt_inverted(true); //
  vw_set_tx_pin(12);
  vw_setup(4000);// speed of data transfer Kbps

}

void loop() {
  xvalue=analogRead(A0);
  yvalue=analogRead(A1);
  int envioX = map(xvalue, 0, 1023, 001, 1000); //I prefer to not send 0
  int envioY = map(yvalue, 0, 1023, 001, 1000);

//Mando los datos del joystic
  char envioXY[]="";
  sprintf(envioXY,"%d,%d",envioX,envioY); 
  EnviarDatos(envioXY); 
  delay(1000);
}

void EnviarDatos(char datos[]){
  vw_send((uint8_t *)datos, strlen(datos)); //vw_send(message, length)
  vw_wait_tx(); // Wait until the whole message is gone
}

接收机代码:

代码语言:javascript
运行
复制
#include <VirtualWire.h>

char recibo[8]="";

int valorX;
int valorY;


  void setup(){
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_set_rx_pin(12);
    vw_setup(4000);  // Bits per sec
    vw_rx_start();       // Start the receiver PLL running
    Serial.begin(9600);
    Serial.println("setup");
  }
  void loop(){
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if (vw_get_message(buf, &buflen)){ //check to see if anything has been received
      for(int i=0;i<buflen;i++){ 
        recibo[i]=char(buf[i]);
        Serial.print(recibo[i]);
      }
     recibo[buflen]=NULL; 
     //String str(recibo);

    //What here to get both int??  
    } 
  }

你有什么建议?我不能保证我正确地使用了斯堪夫和阿托伊。

因此,主要问题是如何将“,number2”转换为int1=number1和int2=number2.

谢谢和欢呼加布里埃尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 23:44:37

发射机代码:

您必须声明sprintf要使用的存储空间。您只声明了一个包含NUL (0字节)的1字节数组作为第一个也是唯一的元素。

代码语言:javascript
运行
复制
char envioXY[]="";

将其改为此,它声明了一个包含24个元素的字符数组:

代码语言:javascript
运行
复制
char envioXY[ 24 ];

虽然未初始化,但sprintf将设置数组元素,以格式化2个整数。

接收机代码:

recibo[buflen] = NULL;之后,您可以使用以下方法解析它:

代码语言:javascript
运行
复制
sscanf( recibo, "%d,%d", &valorX, &valorY );

格式字符串与sprintf格式匹配,两个整数的地址被传入,而不仅仅是两个整数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34054070

复制
相关文章

相似问题

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