0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TWELite-dipとarduinoを用いたシリアル通信の複数台制御

Posted at

通常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というようにポートを増やすことで制御対象を増やすことが可能となります.

プログラム全文

example.ino
# 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);
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?