汪洋sea 发表于 2014-3-29 11:54:27

想发一串整型数组到模拟串口,但是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()不支持写十六进制数....

yyy_zc 发表于 2014-3-29 13:37:46

不太清楚你要的,能举个例子吗

serial.print(int,DEC) 是否是你要的

汪洋sea 发表于 2014-3-29 15:39:11

yyy_zc 发表于 2014-3-29 13:37 static/image/common/back.gif
不太清楚你要的,能举个例子吗

serial.print(int,DEC) 是否是你要的

我需要向串口发送16进制的整形数据,如 int a =0xff,要怎么把a发送到串口。

yyy_zc 发表于 2014-3-29 15:45:00

用串口监视看实际发送的是什么

Super169 发表于 2014-3-30 00:37:58

你知道0xFF 及 "FF" 的分別嗎?
兩者都可以經 Serial 輕易傳送的, 問題是你要先弄清楚兩者的分別, 以及自己想要的是 0xFF 還是 "FF".

yyy_zc 发表于 2014-3-30 22:39:35

Serial.write(45); // send a byte with the value 45
测试样例

另外Serial.write(buf, len) ,buf 估计不能使int 应该是char 型的

转角 发表于 2014-3-30 22:42:41

用itoa   atoi函数转换,具体用法问一下度娘

汪洋sea 发表于 2014-3-31 09:59:45

yyy_zc 发表于 2014-3-30 22:39 static/image/common/back.gif
Serial.write(45); // send a byte with the value 45
测试样例



问题应该就是这个,有没有能写整型数组的命令!

Super169 发表于 2014-3-31 19:32:13

汪洋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:18:43

本帖最后由 eddiewwm 于 2014-3-31 23:23 编辑

如希望用了 unsigned int hexdata 後不出現所述的警告,則不要用   mySerial.write(hexdata, 30)。
可改為:
   for (int i=0; i<30; i++){
       mySerial.print (hexdata [ i ]   ) ;
   }

yyy_zc 发表于 2014-4-1 10:46:11

汪洋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

汪洋sea 发表于 2014-4-3 11:57:34

eddiewwm 发表于 2014-3-31 23:18 static/image/common/back.gif
如希望用了 unsigned int hexdata 後不出現所述的警告,則不要用   mySerial.write(hexdata, 30)。
可 ...

楼上正解,已解决,感谢!
页: [1]
查看完整版本: 想发一串整型数组到模拟串口,但是Serial.write()好像没有提供发送整形数据的功能