USART通过Arduino Leonardo将十六进制代码传输到设备

时间:2019-05-28 20:05:11

标签: arduino hex usart

我正在尝试将十六进制命令发送到带有Arduino Leonardo的设备,该设备也通过蓝牙接口接受命令。

基本上,我试图通过在Arduino Leonardo上传输的十六进制命令打开和关闭激光器,但是我没有运气。如果我通过蓝牙USB接口发送十六进制代码,则该代码可以在当前配置wiring config下工作,但是当我尝试将其推入TX引脚时无效(我必须使用5k6和12k Ohm的分压器将电压从5V降至3.3V。

我正在尝试的代码如下所示:

byte laserON[] = {0xAA,0x00, 0x01, 0xBE, 0x00, 0x01, 0x00, 0x01, 0xC1};
byte laserOFF[] = {0xAA,0x00, 0x01, 0xBE, 0x00, 0x01, 0x00, 0x00, 0xC0};

void setup() {
 Serial1.begin(19200);
}

void loop() {
for(byte i =0;isizeof(laserON);i++)(Serial1.write(laserON[i]));

delay(1000);
Serial1.write(laserON, sizeof(laserON));


for(byte i =0;isizeof(laserOFF);i++)(Serial1.write(laserOFF[i]));
delay(1000);
Serial1.write(laserOFF, sizeof(laserOFF));
}

2 个答案:

答案 0 :(得分:0)

;isizeof(laserON);不是我所知道的任何普通C代码。您可以尝试将其替换为i < sizeof(laserON),这至少可以解决您的循环问题。

Serial.write(buf, len)确实更好,您可能想写Serial.write(&laserON[0], sizeof(laserON))

如果要确认字节发送正确:请使用作用域或其他uart适配器回读发送的数据,并确认字节是否为发送的字节。如果有任何问题,请:更新您的帖子。

答案 1 :(得分:0)

问题的解决方案如下:

Tarick的建议最有效地代替了上述代码行:     Serial.write(&laserON [0],sizeof(laserON))

问题是分压器没有按预期工作。 5v至3.3v逻辑电平转换器可以解决问题。