2015年9月18日金曜日

Arduino: SoftwareSerial

Arduinoのシリアル通信はくっついているUSBじゃないデジタルポートでも行える。
MEGAとかdueだと,メインのそれ以外の専用ポートもいくつかくっついているみたい。
Arduino can communicate to other devices by using digital ports.

Arduino UNOだと,デジタル0と1番以外を割り当てる。
0と1はもともとSoftwareSerialを使わずにシリアル通信をするときに使うものらしい。なので,最初からTXとRXという表示が付いている。今回は簡単なSoftwareSerialを使います。
In Arduino uno, we should use digital ports other than 0 and 1 when using SotwareSerial.


#include<SoftwareSerial.h>
SoftwareSerial Serial1(2,3); 
// You should define before void setup()
// The name of a software serial is arbitrary.
// eg., SoftwareSerial mySerial(2,3)

void setup() {

  Serial1.begin(115200);
}

void loop() {


  Serial1.println("hello");

  delay(500);


}


こんな感じ。

もうひとつSoftwareSerialポートを作成して,一台のArduinoで通信ごっこをして試すことが可能。
You can make another SoftwareSerial port and communicate to each other in the Arduino.

SoftwareSeria2 Serial1(4,5);// before voidsetup()

Serial2.begin(115200);// in void setup()

int SerialState = Serial2.read();// in void loop()

という感じ。

読み込んだものを確認するためには,シリアルモニタで確認したいので,そんな時には
to confirm the data, use the normal Serial and write the input data on a serial monitor.

// normal "Serial" is already defined by default.
// So you need not to define it.
Serial.begin(115200);// in void setup()

Serial.write(Serial2.read()); // in void loop()


こうすれば,シリアルモニタに,読み込んだものを出力できる。

charで読み込んだ場合は,writeではなくてprintを使う。
When you read data as char, you can use Serial.print to input them to the serial monitor.

char SerialState = Serial2.read();
Serial.println(Serial2.read());


ちなみに,
The case the types of variables are different,

Serial.println(Serial2.read());

では,違う表示になるので試してください。








2台のArduinoをつなぐ時にも,上のコードを適当に分けて書けばいい。
When you connect two Arduinos.

1台目TX-2台目RX,1台目RX-2台目TXを繋ぐのは当たり前で間違える人はいないだろうけど,1台目GRD-2台目GRDも繋がないと,電気的におかしなことになるので注意。
Note that you need to connect two GNDs.


また,プログラムを書き込む時には,2台を繋ぎながらだと書きこみエラーが出て,怖いので絶対にはずしましょう。

0 件のコメント:

コメントを投稿