我有一个蓝牙模块连接到Arduino上的RX(0)引脚,通过它我接收数据
然后我使用Serial.write()
打印该数据
这两个引脚对应于我的计算机中的COM16。
我现在能够将这些值接收到处理中,并在处理后将COM端口设置为16后再次在处理中打印它们。
现在,我希望通过串行通信再次将特定值发送回Arduino。我想我可以用软件序列做到这一点。 但是,我有一些关于软件序列如何工作的问题:
如果我设置了一个软件序列,那么我可以将处理后的值发送到Arduino的软件序列的COM端口是什么?
这是在处理中设置COM端口的命令。
String portName ="COM16";
myPort = new Serial(this, portName, 57600);
然后我使用myPort.write()
将一些值发送回Arduino但是如何捕获软序列中的值?
答案 0 :(得分:1)
最好的方法是使用Serial Event
最小代码:
void setup() {
Serial.begin(9600); // initialize serial
}
void loop() { // you need to define a loop function even
// if not used at all.
}
// This is an interrupt.
// Code below will only execute when something is received in the RX pin.
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read(); // get the new byte
// here you can process the received byte
}
}
如果要在处理它们之前接收几个字节,请检查提供的链接中的示例,它将字符串联成一个字符串,直到收到\n
字节为止
这种方法的优点是它使用中断,因此您无需经常检查串口中是否收到了某些内容。
PD:我在你的代码中看到你使用57600的波特率。只需修改上面的代码以确保你使用相同的速度,否则你将不会收到任何东西(或者更糟糕的是,你会收到垃圾)
答案 1 :(得分:0)
我会反其道而行之:将 SoftSerial / AltSoftSerial 用于蓝牙模块通信,将 Hardware Serial 用于带有 Processing 的通信。
请记住,SoftSerial 可能不如适当的硬件串行端口健壮。波特率 57600 应该可以工作,但请记住,更高的波特率可能不可靠。
或者,如果预算/时间允许,您可以使用具有多个串行端口的 Arduino(例如 Arduino Mega、Due 等,它们具有 Serial
、Serial1
等)< /p>