通常Arduino UNOの場合rx/txピン
が1組しかないため,複数台のTWELite-dipとarduinoを用いてのシリアル通信ができません.そこで今回プログラムを少し工夫して,複数台制御に近い機能を実装してみます.
実装方法
今回はarduinoの制御ピンを半田ごてと半田を用いて電子工作を行い,物理的に増やします
プログラムでポートを切り替えることで,あたかも複数台制御をしているかのように擬似的に実装していきます.
宣言
それでは具体的な内容に入りましょう.
まずソース内で標準ライブラリのSoftwareSerial
関数を利用し,通信用ピンrx/tx
を宣言します.
# include<SoftwareSerial.h>
SoftwareSerial TWE1(8, 9); // rx, tx
SoftwareSerial TWE2(10, 11); // rx, tx
初期化
次に宣言したポートの初期化を行います.
void setup()
{
TWE1.begin(9600);
TWE2.begin(9600);
}
括弧内の数値はスピードを表しています.
この数値はシリアルモニタで数値と同じにする必要があります.そうしないと文字化けやデータの不整合が起こることがあります.
プログラム
以上で,擬似複数制御のあらかたの仕込みも終わりです.
あとはメインで処理を行うloop()内でそれぞれの処理を行う前に標準ライブラリの ”listen” 関数を使用しポートを開けばOKです.
void loop()
{
TWE1.liste();
if(TWE1.avaivable())
{
//TWE1に関する処理をここに実装
TWE1.println(“TWE1 coming”);
}
TWE2.liste();
if(TWE2.avaivable())
{
//TWE2に関する処理をここに実装
TWE2.println(“TWE2 coming”);
}
}
この方法であればサンプルでは2台制御ですが,TWE3やTWE4というようにポートを増やすことで制御対象を増やすことが可能となります.
プログラム全文
# include<SoftwareSerial.h>
SoftwareSerial TWE1(8, 9); // rx, tx
SoftwareSerial TWE2(10, 11); // rx, tx
void setup()
{
TWE1.begin(9600);
TWE2.begin(9600);
}
void loop()
{
TWE1.liste();
//TWE1に関する処理をここに実装
if(TWE1.avaivable())
{
TWE1.println(“TWE1 coming”);
}
TWE2.liste();
//TWE2に関する処理をここに実装
if(TWE2.avaivable())
{
TWE2.println(“TWE2 coming”);
}
delay(2000);
}