【发布时间】:2019-07-04 17:58:52
【问题描述】:
我有一个项目,我需要通过串行通信从 Arduino Uno 向第三方设备发送一个十六进制字节数组,设备执行一个操作,并回复一个字节数组,在短暂之后也是十六进制时间(+-500 毫秒)。
第三方 USART USB 接口用于记录第三方设备对计算机的响应,第三方设备 TX 和 USART RX 之间有蓝牙链接。 Arduino TX 和第三方设备 RX 是有线的。
现在有问题的地方:
我的项目要求 Arduino 还捕获来自第三方设备的响应,处理响应,并根据值触发不同的输出 (LED)。
我还需要调试 Arduino 的能力,以确保它接收到的十六进制值得到正确处理并相应地触发输出。
我目前拥有的代码(正在编译,但没有像我预期的那样工作)如下所示:
byte one_shot_FAST[] = {0xAA, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x02, 0x23};
int IncomingByte = 0;
uint8_t q1 = 0;
uint8_t q2 = 0;
uint16_t qtot = 0;
int qVal = 0;
int qValMax = 65535;
const int triggerPin = 2;
int triggerState = LOW;
void setup() {
Serial.begin(19200);
pinMode(triggerPin, INPUT);
Serial.println("<Arduino is ready>");
}
void loop() {
triggerState = digitalRead(triggerPin);
if (triggerState == HIGH){
Serial.write(&one_shot_FAST[0], sizeof(one_shot_FAST));
//while(!Serial.available());
IncomingByte = Serial.read();
for (int i=0; i<13; i++) {
while(!Serial.available()); //wait for character
IncomingByte = Serial.read();
Serial.println(IncomingByte,HEX);
delay(10);
}
我希望得到以下回复: AA 00 00 22 00 03 00 00 03 2B 01 E1 35
但我得到一个字符串“#”和每个“#”后面的方块
【问题讨论】:
-
您能否解释一下您所说的外部 USART 适配器是什么意思?您是否将 Arduino 连接到计算机的 USB 端口?通过监控您的意思是在那台计算机上的终端软件上的交易?你看对了“
”这句话吗? -
还有一个问题:为什么你会读一次,然后再读 14 次?
-
外部 USART 适配器 = USB 到 UART 适配器。
-
我在 Arduino 串行监视器上正确地看到了
语句,但其余部分一团糟。我正在通过 USB 将 Arduino 连接到我的计算机。我单独读取每个字节,因为在这个阶段我只想处理字节 10 和 11,我需要将它们存储在变量中,但这没有在代码中显示。在这个阶段,我很乐意让字符串正确显示。
标签: arduino hex arduino-uno uart