LoginSignup
5
6

More than 3 years have passed since last update.

2台以上のArduino同士でシリアル通信

Last updated at Posted at 2020-02-18

説明

親機と子機1~5があって、親機から、1.2.3.4.5の順でシリアル信号が送信され、それを受信した子機が自分の番号のときにLEDを光らせます。つまり、親機一台で子機を制御していることになります。
DSCPDC_0001_BURST20200218161047515.JPG

接続方法

親機の ”→RX” 端子を子機の ”←TX” 端子につながるようにブレッドボードを上手い事します。...以上。

受信側

serial_receive.ino
int No = 1; // 個体番号
int led = 13; // 13番ピンをledに設定

void setup(){
  Serial.begin(9600); // シリアル通信の設定
  pinMode(led, OUTPUT); // ledをアウトプットに設定
}

void loop(){
  while(Serial.available()){ // 受信データがある時
    byte s = (byte)Serial.read(); // 信号を読み取り、"s"に収納
    if(s == No){ // 読み取った信号が自分の番号か?
      digitalWrite(led, HIGH); // LEDを点灯
    }
    else{ // そうでなければ
      digitalWrite(led, LOW); //LEDを消灯
    }
  }
}

送信側

serial_Serve.ino
int led=13; //13番ピンをledに設定
int sw=3; //スイッチを3番ピンに設定
int g=0; //モード番号
int c=0; //for文用

void setup(){
  Serial.begin(9600); //シリアル通信の設定(子機と同じ番号で)
  pinMode(led,OUTPUT); //ledをアウトプットに設定
  pinMode(sw,INPUT_PULLUP); //スイッチをインプットに設定
}
//INPUT_PULLUP:プルアップ抵抗をつけなくても、これでチャタリングを回避できます

void loop(){
  if((digitalRead(sw)==LOW)and(g==0)){ //モード1を選択
    g=1;
    digitalWrite(led,HIGH); //モードを選択したらLEDが光ります。
    delay(500);
    digitalWrite(led,LOW);
  }
  else if((digitalRead(sw)==LOW)and(g==1)){ //モード0を選択
    g=0;
    digitalWrite(led,HIGH); //モードを選択したらLEDが光ります。
    delay(500);
    digitalWrite(led,LOW);
  }
  else if(g==0){ //モード0を実行
    for(c=1; c<=5; c++){
      Serial.write(c);
      delay(100);
    }
  }
  else if(g==1){ //モード1を実行
    for(c=1; c<=5; c++){
      Serial.write(c);
      delay(100);
    }
    for(c=5; c>=1; c--){
      Serial.write(c);
      delay(100);
    }
  }
}

終わりに

これで、たった2本のケーブルで複数の子機を制御できるというわけです。
モータドライバとか使って相互通信できるようにしてみたいですね。

5
6
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
5
6