説明
親機と子機1~5があって、親機から、1.2.3.4.5の順でシリアル信号が送信され、それを受信した子機が自分の番号のときにLEDを光らせます。つまり、親機一台で子機を制御していることになります。
接続方法
親機の ”→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);
}
}
}
複数のArduinoでシリアル通信をしてみました。
— Qiita@yusuke005 (@Qiitayusuke0051) February 18, 2020
詳細はQiitaへhttps://t.co/OlitOjlqk2 pic.twitter.com/iky6Zn1UrX
終わりに
これで、たった2本のケーブルで複数の子機を制御できるというわけです。
モータドライバとか使って相互通信できるようにしてみたいですね。
Comments