想发一串整型数组到模拟串口,但是Serial.write()好像没有提供发送整形数据的功能
本帖最后由 汪洋sea 于 2014-3-31 09:30 编辑#include <SoftwareSerial.h>
unsigned int hexdata = {0x66,0x66,0x20,0x35,0x35,0x20,0x36,0x62,0x20,0x34,0x39,0x20,0x30,0x32,0x20,0x30,0x39,0x20,0x30,0x31,0x20,0x30,0x34,0x20,0x35,0x36,0x20,0x62,0x62};
SoftwareSerial mySerial(10, 11);
int led = 13;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
// pinMode(led, OUTPUT);
while (!Serial) {}
mySerial.begin(9600);
}
void loop()
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
while (digitalRead(9))
{
mySerial.begin(9600);
mySerial.write(hexdata, 30);
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
}
}
这个程序一编译,就提示这个错误,求大神指点!我将问题重新说明清楚:刚开始我试着发送的是字符串,unsigned char hexdata =.......程序编译无误,烧写进去后,用串口调试工具监测模拟端,可以看到发送的字符串,当我改成现在这样,发送整型数组,编译就无法通过了!哪里不对?错误提示的意思是不是mySerial.write()不支持写十六进制数.... 不太清楚你要的,能举个例子吗
serial.print(int,DEC) 是否是你要的 yyy_zc 发表于 2014-3-29 13:37 static/image/common/back.gif
不太清楚你要的,能举个例子吗
serial.print(int,DEC) 是否是你要的
我需要向串口发送16进制的整形数据,如 int a =0xff,要怎么把a发送到串口。 用串口监视看实际发送的是什么 你知道0xFF 及 "FF" 的分別嗎?
兩者都可以經 Serial 輕易傳送的, 問題是你要先弄清楚兩者的分別, 以及自己想要的是 0xFF 還是 "FF". Serial.write(45); // send a byte with the value 45
测试样例
另外Serial.write(buf, len) ,buf 估计不能使int 应该是char 型的 用itoa atoi函数转换,具体用法问一下度娘 yyy_zc 发表于 2014-3-30 22:39 static/image/common/back.gif
Serial.write(45); // send a byte with the value 45
测试样例
问题应该就是这个,有没有能写整型数组的命令! 汪洋sea 发表于 2014-3-31 09:59 static/image/common/back.gif
问题应该就是这个,有没有能写整型数组的命令!
給你一個簡單例子:
int x = 30;// i.e. 0x1E
先想想, 你是想把什麼傳出去,
1) 如果是一個 byte, value 是 30 的話, 就用 Serial.write(x)
2) 如果是想要一個十進的字串"30" 的話, 就用 Serial.print(x); 將會收到 2個 byte 0x33 及 0x30 (分別代表 "3" 及 "0")
3) 如果是想要一個十六進字串"1E" 的話, 就用 Serial.print(x, HEX); 將會收到 2個 byte 0x31 及 0x45 (分別代表 "1" 及 "E")
看看你想收到什麼, 就用那一個吧. 本帖最后由 eddiewwm 于 2014-3-31 23:23 编辑
如希望用了 unsigned int hexdata 後不出現所述的警告,則不要用 mySerial.write(hexdata, 30)。
可改為:
for (int i=0; i<30; i++){
mySerial.print (hexdata [ i ] ) ;
}
汪洋sea 发表于 2014-3-31 09:59 static/image/common/back.gif
问题应该就是这个,有没有能写整型数组的命令!
对呀,系统只提供了写字节的(BYTE) 一个整型 可能为 2个BYTE ,自己用软件实现将整形 int 分解成 2个 byte 发出即可 ,更多的要看一下通讯基础
如要发 0x1122 整形 int
那就是 write (0x11);
write (0x22);
接收方在组装一下即可
a = read(0x11) b= read(0x22)c= a*256 +b = 0x1122 eddiewwm 发表于 2014-3-31 23:18 static/image/common/back.gif
如希望用了 unsigned int hexdata 後不出現所述的警告,則不要用 mySerial.write(hexdata, 30)。
可 ...
楼上正解,已解决,感谢!
页:
[1]