Serial port Arduino串行通信输出
我有两个Arduinos Leonardo,我想让他们自己交流,所以我做了以下代码:Serial port Arduino串行通信输出,serial-port,arduino,communication,output,Serial Port,Arduino,Communication,Output,我有两个Arduinos Leonardo,我想让他们自己交流,所以我做了以下代码: void setup() { Serial.begin(9600); Serial1.begin(9600); } void loop() { String outMessage = ""; // String to hold input while (Serial.available() > 0) { // check if at least 1
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
String outMessage = ""; // String to hold input
while (Serial.available() > 0) { // check if at least 1 char is available
char inChar = Serial.read();
outMessage.concat(inChar); // add inChar to outMessage
}
if (outMessage != "") {
Serial.println("Sent: " + outMessage); // View Arduino 1 in Serial Monitor 1
Serial1.print(outMessage); // Send to Arduino 2
}
while (Serial1.available() > 0) {
Serial.print("Received: "); // View Arduino 1 in Serial Monitor 2
Serial.print(Serial1.read()); // Received from Arduino 1
Serial.println();
}
}
我想从Arduino 1发送一条消息,在串行监视器中打印并通过TX1发送到Arduino 2,反之亦然。问题是我没有得到我所期望的。例如,如果我键入test
:
Arduino 1:
Sent: test
Arduino 2:
Received: t
Received: e
Received: s
Received: t
我也试着像发送端那样做接收端,并使用Serial.write
,但没有成功。
有没有更简单的方法来解决这个问题
谢谢汉斯提到的,你需要一个协议。 这就是我用来考虑在ARDUNO中的一个消息:一个完整的信息:< /P>
char inData[10];
int index;
boolean started = false;
boolean ended = false;
String message =("I am Arduino 1 and I am ready");
void setup(){
Serial.begin(9600);
Serial.println(message);
}
void loop()
{
while(Serial.available() > 0)
{
char aChar = Serial.read();
if(aChar == '>')
{
started = true;
index = 0;
inData[index] = '\0';
}
else if(aChar == '<')
{
ended = true;
}
else if(started)
{
inData[index] = aChar;
index++;
inData[index] = '\0';
}
}
if(started && ended)
{
int inInt = atoi(inData);
Serial.println(inInt);
}
// Get ready for the next time
started = false;
ended = false;
index = 0;
inData[index] = '\0';
}
charindata[10];
整数指数;
布尔值=false;
布尔结束=假;
字符串消息=(“我是Arduino 1,我准备好了”);
无效设置(){
Serial.begin(9600);
Serial.println(消息);
}
void循环()
{
while(Serial.available()>0)
{
char-aChar=Serial.read();
如果(aChar=='>')
{
开始=真;
指数=0;
inData[索引]='\0';
}
否则如果(aChar=='如前所述,设备之间需要一个帧消息协议。实现这一点的一个快速方法是使用库,它可以通过UART或I2C执行您正试图执行的操作。它有几个示例。它不必太复杂。如果您仔细查看上一个whlie循环,您可以看到该软件确实如此没有机会在每次通过循环时读取多个字符。因此,这就是您得到的结果:一次读取一个字符
在你的第一个while循环中,你做得更好:你收集了所有收到的信件,直到没有任何可用的信件,然后立即将它们全部发送。因此,如果你使你的最后一个循环看起来更像第一个循环,你会得到更好的结果。这将返回我0。这是应该的?不。你是否发送了>123这样的消息?是的,你是对的,我是用数字表示。取出行int-inInt=atoi(inData)并用serial.println(inData)替换serial.println(inInt)。应该可以工作。EasyTransfer在Leonardo上的串行类型有问题,它给出了编译错误:调用EasyTransfer::begin没有匹配的函数(字节*,无符号的int,序列号*)如果你认为这“回答”了这个问题,让我知道,我会发布代码。