汪洋sea 发表于 2014-3-21 09:36:22

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


#include <SoftwareSerial.h>
unsigned char hexdata = {0x66,0x66,0x35,0x35,0x36,0x62,0x34,0x39,0x30,0x32,0x30,0x30,0x35,0x32,0x62,0x62};
SoftwareSerial mySerial(10, 11);
int led = 13;
int val;
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop()
{
while (digitalRead(9))
{
   
   ///////Serial.println("The first step is completed!");
mySerial.begin(9600);
mySerial.write(hexdata, 18);
Serial.println( Serial.read());
//Serial.println("The second step is completed!");
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
}       
}


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

麽麽茶㊣ 发表于 2014-3-21 10:29:02

用同样长度的 unsigned char hexdata 试试呢?

Super169 发表于 2014-3-21 13:54:06

請問是如何接線的?

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

那 serial monitor 是如何跟 ardiuno 溝通的?

汪洋sea 发表于 2014-3-21 14:36:48

Super169 发表于 2014-3-21 13:54 static/image/common/back.gif
請問是如何接線的?

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


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

汪洋sea 发表于 2014-3-21 18:06:23

汪洋sea 发表于 2014-3-21 14:36 static/image/common/back.gif
这个还需要怎么连接吗?我直接是用USB连接的电脑哎,难道.........

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

Super169 发表于 2014-3-21 21:02:11

汪洋sea 发表于 2014-3-21 14:36 static/image/common/back.gif
这个还需要怎么连接吗?我直接是用USB连接的电脑哎,难道.........

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

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

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

Super169 发表于 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); 可以嗎?

汪洋sea 发表于 2014-3-22 10:08:45

Super169 发表于 2014-3-21 21:45 static/image/common/back.gif
原來真的可以 D10 - D1, D11 - D0 再同時用 USB 接收.

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

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

Super169 发表于 2014-3-22 12:55:33

汪洋sea 发表于 2014-3-22 10:08 static/image/common/back.gif
不可以哦,
sketch_mar22b.ino: In function 'void loop()':
sketch_mar22b:19: error: expected `)' b ...

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

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

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

void loop() {
// put your main code here, to run repeatedly:
}
页: [1]
查看完整版本: Arduino可以从模拟串口接收到16进制数吗?