在arduino

时间:2016-01-08 10:28:04

标签: arduino radio

我对编程很新,并且遇到了一些实际问题。我花了几天时间坚持这个,所以我认为id寻求帮助!

我有一个单一课程的作业,要求我使用便宜的无线电发射器和[virtualwire库] [1]

从一个arduino发送数据“数据包”到另一个

我正在发送的主要数据是从温度/压力传感器读取的。其他位和bob也被发送,就像发送器的ID一样,接收器知道它是什么(我们都想做一个发送器,他们都可以与1个接收器通信,所有发送器都有不同的ID)

我使用这段代码以十进制精度工作:

 Serial.println("Attempting to send....");
  char buff[3];                         
  char fullmsg[11];                     


  sprintf(buff,"%04d",SysID);
  const char *msg0 = buff;
  strcpy(fullmsg, msg0);              

  sprintf(buff,"%04d",NodeID);
  const char *msg1 = buff;
  strcat(fullmsg, msg1);    

  sprintf(buff,"%03d",temp);
  const char *msg2 = buff;
  strcat(fullmsg, msg2);   

  sprintf(buff,"%03d",Pressure);
  const char *msg3 = buff;
  strcat(fullmsg, msg3);

  sprintf(buff,"%d",Switch);
  const char *msg4 = buff;
  strcat(fullmsg, msg4);    

  vw_send((uint8_t *)fullmsg, strlen(fullmsg));  //Sends full message via     virtualwire
  vw_wait_tx();                                 //Waits for message to be sent

  Serial.print(fullmsg) ;
  Serial.println("        ....Sent!");
  delay(100);

该代码工作正常,它在另一端发送数据及其接收,如http://i.imgur.com/k7W8RFW.png(左边是正在接收的传输)。

问题是,对于我们所有设备一起工作,他们需要发送相同类型的“数据包”,并且我们被告知它需要以二进制形式发送。 我认为vw_send只发送char数组..? (我的术语有点生疏) 所以我需要将我的整数转换为二进制,然后将二进制转换为char数组以发送它......

所以我使用这里找到的代码转换为二进制文件:

 float temperature;                //define temperature as a float
bmp.getTemperature(&temperature); //assign the value to tempriture
int temp = temperature;
  int t=temp;
  String binarytemp  ("");
    int maskt = 1;
    for(int i = 0; i < 8; i++) // 8 for 8 bit
    {
    if((maskt&t) >= 1)
        binarytemp = "1"+binarytemp;
    else
        binarytemp = "0"+binarytemp;
     maskt<<=1;
    }

我为每个变量执行此操作,为我提供String binarytemp以及其他类似“binarypressure”和“binaryswitch”。所以我必须将它们组合成一个字符串..

  String string1 =  binarynode;     
  String string2 =  binarysys;  
  String string3 =  binarytemp;
  String string4 =  binarypressure;
  String string5 =  binaryswitch;
String FULLMESSAGE =  String(string1 + string2 + string3 + string4 + string5); 

然后我转换为Char数组并尝试发送它。

char buf [33];
FULLMESSAGE.toCharArray(buf, 33);
                  Serial.print("buf:");
                  Serial.println(buf);
const char *msg = buf;
                  Serial.print("msg:");
                  Serial.println(msg);
vw_send((uint8_t *)msg, strlen(msg));  //Sends full message via virtualwire
 vw_wait_tx(); //wait till the whole thing is sent

由于某些原因,我无法弄清楚它不起作用:左边的http://i.imgur.com/fFHjhiy.png似乎很高兴发送0和1,但正如你在右边看到的那样我没有采摘任何东西向上...

有谁知道为什么会这样?或者只是更好的解决问题的方法,我觉得我的有点乱!

我希望我解释得这么好!

完整的发射机代码二进制(不工作):http:// pastebin.com/n1xCJidJ

完整的发射器代码十进制(工作):http:// pastebin.com/avXv8U5D

收件人代码(至少使用十进制......):http:// pastebin.com/ELTCfUMz

[1]:https:// www.pjrc.com/teensy/td_libs_VirtualWire.html

(抱歉打破了一些链接,因为我需要更多声望来添加2个以上的链接)

1 个答案:

答案 0 :(得分:0)

我认为你为自己做了太多的工作。

“二进制”一词并不意味着其中包含“1”和“0”的字符串。二进制只是意味着使用intshortchar(意为8位整数)类型来存储数字 - 而不是字符串。

这应该简化您的代码。