极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 49469|回复: 8

Arduino可以从模拟串口接收到16进制数吗?

[复制链接]
发表于 2014-3-21 09:36:22 | 显示全部楼层 |阅读模式

  1. #include <SoftwareSerial.h>
  2. unsigned char hexdata[18] = {0x66,0x66,0x35,0x35,0x36,0x62,0x34,0x39,0x30,0x32,0x30,0x30,0x35,0x32,0x62,0x62};
  3. SoftwareSerial mySerial(10, 11);
  4. int led = 13;
  5. int val;
  6. void setup()  
  7. {
  8.   pinMode(led, OUTPUT);
  9.   Serial.begin(9600);
  10. }
  11. void loop()
  12. {
  13.   while (digitalRead(9))
  14. {
  15.    
  16.    ///////Serial.println("The first step is completed!");
  17.   mySerial.begin(9600);
  18.   mySerial.write(hexdata, 18);
  19.   Serial.println( Serial.read());
  20.   //Serial.println("The second step is completed!");
  21.   digitalWrite(led, HIGH);
  22.   delay(1000);
  23.   digitalWrite(led, LOW);
  24. }           
  25. }
复制代码



这是我写的程序,发送一串命令出去,模拟串口还会收到一个返回的命令,是一串十六进制数,但是不知怎么无法显示在串口监视器里面,求指教!
回复

使用道具 举报

发表于 2014-3-21 10:29:02 | 显示全部楼层
用同样长度的 unsigned char hexdata[ilen] 试试呢?
回复 支持 反对

使用道具 举报

发表于 2014-3-21 13:54:06 | 显示全部楼层
請問是如何接線的?  

你是想用 SoftSerial (D10,D11) send 到原來的 Serial 接口 (D0/D1) 吧.

那 serial monitor 是如何跟 ardiuno 溝通的?  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-21 14:36:48 | 显示全部楼层
Super169 发表于 2014-3-21 13:54
請問是如何接線的?  

你是想用 SoftSerial (D10,D11) send 到原來的 Serial 接口 (D0/D1) 吧.

这个还需要怎么连接吗?我直接是用USB连接的电脑哎,难道.........
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-21 18:06:23 | 显示全部楼层
汪洋sea 发表于 2014-3-21 14:36
这个还需要怎么连接吗?我直接是用USB连接的电脑哎,难道.........

我将模拟串口接到电脑上,通过另外一个串口调试工具进行模拟数据接收和发送,Arduino可以发送字符串或者十六进制数到另一端并成功接收,而串口调试工具可以发送字符或字符串,当选择HEX发送到Arduino的监视窗中,则只能发送0~9的数,不能发送A~F.....又不自带转换功能,而我需要Arduino收到类似(fe aa 12 34 03 bb )d的数据、有什么解决方法嘛?
回复 支持 反对

使用道具 举报

发表于 2014-3-21 21:02:11 | 显示全部楼层
汪洋sea 发表于 2014-3-21 14:36
这个还需要怎么连接吗?我直接是用USB连接的电脑哎,难道.........

oh, USB + D0/D1 可以同時連線使用嗎?

因為我之前如果用了 D0/D1 去連接 另一塊控制板時,  Serial 的輸出都送到控制板去,  Serial Monitor 接收不到, 一定要拔走 D0/D1 的連線, 才可以發送到 Serial Monitor, 所以我不肯定你是如何連接.

如果你的可以接收到, 只是某些格式有問題, 那連線應該可行了, 可能只是我的板子有問題了.
回复 支持 反对

使用道具 举报

发表于 2014-3-21 21:45:40 | 显示全部楼层
原來真的可以 D10 - D1, D11 - D0 再同時用 USB 接收.

但我不太肯定, 你說的 "当选择HEX发送到Arduino的监视窗中,则只能发送0~9的数,不能发送A~F", 是否指  Serial.println( Serial.read()); 一句印出來只是 0-9 的數?  而不是 16進制?
如果只是造樣, 改成 Serial.println(Serial.read(), HEX); 可以嗎?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-22 10:08:45 | 显示全部楼层
Super169 发表于 2014-3-21 21:45
原來真的可以 D10 - D1, D11 - D0 再同時用 USB 接收.

但我不太肯定, 你說的 "当选择HEX发送到Arduino的 ...

不可以哦,
sketch_mar22b.ino: In function 'void loop()':
sketch_mar22b:19: error: expected `)' before numeric constant

回复 支持 反对

使用道具 举报

发表于 2014-3-22 12:55:33 | 显示全部楼层
汪洋sea 发表于 2014-3-22 10:08
不可以哦,
sketch_mar22b.ino: In function 'void loop()':
sketch_mar22b:19: error: expected `)' b ...


奇怪.  我把你的程式 copy 出來, 改了那一句, 再 D10 接 D1, D11 接 D0 測試過的.

請問你是用那個版本的 arudino 程式?
另外, 你嘗試單獨 compile 一句看吧.  不會有結果, 只是測試 syntax.

  1. void setup() {
  2.   // put your setup code here, to run once:
  3.   Serial.println(Serial.read(), HEX);
  4. }

  5. void loop() {
  6.   // put your main code here, to run repeatedly:
  7. }
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 02:47 , Processed in 0.046608 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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