我对编程很新,并且遇到了一些实际问题。我花了几天时间坚持这个,所以我认为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个以上的链接)
答案 0 :(得分:0)
我认为你为自己做了太多的工作。
“二进制”一词并不意味着其中包含“1”和“0”的字符串。二进制只是意味着使用int
,short
,char
(意为8位整数)类型来存储数字 - 而不是字符串。
这应该简化您的代码。