Arduino的串行通信输出
我有2 Arduinos莱昂纳多,我希望他们给自己沟通,所以我做了下面的代码:Arduino的串行通信输出
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,反之亦然。问题是我没有收到我期待的东西。举例来说,如果I型test
:
Arduino的1:
Sent: test
Arduino的2:
Received: t
Received: e
Received: s
Received: t
我还tryed做接收侧像发送侧和使用Serial.write
但没有sucess 。 有没有更简单的方法来解决这个问题?
谢谢
汉斯提到,您需要一个协议。 这是我用考虑Arduino的消息是一个完整的信息:>消息<:
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';
}
所以,基本上一条消息被视为只有当它是特殊字符> <之间,这样就完成。然后你可以在阅读时做同样的事情。
如上所述,设备之间需要帧消息的协议。一个快速的方法是使用Bill Porter's EasyTransfer库,通过UART或I2C完成你正在做的事。它有几个例子。
EasyTransfer对莱昂纳多的串行类型有问题,它给出编译错误:没有用于调用EasyTransfer :: begin(byte *,unsigned int,Serial_ *)的匹配函数' – 2013-08-18 09:32:55
有EasyTransfer在Leonardo和Due上工作。如果你认为这个问题'回答',让我知道,我会发布代码。 – 2013-08-18 09:59:58
这是返回我0。那应该是什么? – mafap 2013-05-12 19:26:51
不是。您是否发送过像“123 FeliceM 2013-05-12 19:50:42
是的,这返回123,但如果我发送任何字符,它返回0 – mafap 2013-05-12 20:02:05