极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20825|回复: 11

想发一串整型数组到模拟串口,但是Serial.write()好像没有提供发送整形数据的功能

[复制链接]
发表于 2014-3-29 11:54:27 | 显示全部楼层 |阅读模式
本帖最后由 汪洋sea 于 2014-3-31 09:30 编辑

  1. #include <SoftwareSerial.h>
  2. unsigned int hexdata[30] = {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};
  3. SoftwareSerial mySerial(10, 11);
  4. int led = 13;
  5. void setup()  
  6. {
  7.     Serial.begin(9600);
  8.   pinMode(led, OUTPUT);

  9. // pinMode(led, OUTPUT);
  10.   while (!Serial) {}
  11.   mySerial.begin(9600);

  12. }

  13. void loop()
  14. {
  15.   if (mySerial.available())
  16.     Serial.write(mySerial.read());
  17.   if (Serial.available())
  18.     mySerial.write(Serial.read());
  19.    
  20.   while (digitalRead(9))
  21. {
  22.      mySerial.begin(9600);

  23.   mySerial.write(hexdata, 30);
  24.   digitalWrite(led, HIGH);
  25.   delay(1000);
  26.   digitalWrite(led, LOW);
  27. }           
  28. }
复制代码



这个程序一编译,就提示这个错误,求大神指点!我将问题重新说明清楚:刚开始我试着发送的是字符串,unsigned char hexdata[30] =.......程序编译无误,烧写进去后,用串口调试工具监测模拟端,可以看到发送的字符串,当我改成现在这样,发送整型数组,编译就无法通过了!哪里不对?错误提示的意思是不是mySerial.write()不支持写十六进制数....

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-3-29 13:37:46 | 显示全部楼层
不太清楚你要的,能举个例子吗

serial.print(int,DEC) 是否是你要的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 15:39:11 | 显示全部楼层
yyy_zc 发表于 2014-3-29 13:37
不太清楚你要的,能举个例子吗

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

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

使用道具 举报

发表于 2014-3-29 15:45:00 | 显示全部楼层
用串口监视看实际发送的是什么
回复 支持 反对

使用道具 举报

发表于 2014-3-30 00:37:58 | 显示全部楼层
你知道  0xFF 及 "FF" 的分別嗎?  
兩者都可以經 Serial 輕易傳送的, 問題是你要先弄清楚兩者的分別, 以及自己想要的是 0xFF 還是 "FF".
回复 支持 反对

使用道具 举报

发表于 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  函数转换,具体用法问一下度娘
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-31 09:59:45 | 显示全部楼层
yyy_zc 发表于 2014-3-30 22:39
Serial.write(45); // send a byte with the value 45
测试样例

问题应该就是这个,有没有能写整型数组的命令!
回复 支持 反对

使用道具 举报

发表于 2014-3-31 19:32:13 | 显示全部楼层
汪洋sea 发表于 2014-3-31 09:59
问题应该就是这个,有没有能写整型数组的命令!

給你一個簡單例子:

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")

看看你想收到什麼, 就用那一個吧.
回复 支持 反对

使用道具 举报

发表于 2014-3-31 23:18:43 | 显示全部楼层
本帖最后由 eddiewwm 于 2014-3-31 23:23 编辑

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

回复 支持 反对

使用道具 举报

发表于 2014-4-1 10:46:11 | 显示全部楼层
汪洋sea 发表于 2014-3-31 09:59
问题应该就是这个,有没有能写整型数组的命令!

对呀,系统只提供了写字节的(BYTE) 一个整型 可能为 2个BYTE ,自己用软件实现将整形 int 分解成 2个 byte 发出即可 ,更多的要看一下通讯基础
如要发 0x1122 整形 int
那就是 write (0x11);
          write (0x22);
接收方在组装一下即可
a = read(0x11) b= read(0x22)  c= a*256 +b = 0x1122
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-3 11:57:34 | 显示全部楼层
eddiewwm 发表于 2014-3-31 23:18
如希望用了 unsigned int hexdata[30] 後不出現所述的警告,則不要用   mySerial.write(hexdata, 30)。
可 ...

楼上正解,已解决,感谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 20:09 , Processed in 0.038460 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表