2

私は2つの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 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

アルドゥイーノ 1:

Sent: test

アルドゥイーノ 2:

Received: t
Received: e
Received: s
Received: t

私も送信側と同じように受信側を実行しようとしましたが、成功しませんSerial.writeでした。それを行う、または修正する簡単な方法はありますか?

ありがとう

4

3 に答える 3

1

ハンスが言及したように、プロトコルが必要です。これは、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';
}  

したがって、基本的にメッセージは、>message< のように特殊文字 >< の間にある場合にのみ完了したと見なされます。次に、読書でも同じことができます。

于 2013-05-12T14:01:54.407 に答える