# Aruduinoでシリアル通信をしてみる ###### tags: `Aruduino` [【Arduino】2台のAruduinoをシリアル通信させる \- とある科学の備忘録](https://shizenkarasuzon.hatenablog.com/entry/2018/07/24/225915) ここを参考にします。 ## 送信側プログラム ```c= int LED = 13; int count = 0; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } void loop() { count++; Serial.write(count); if ((count % 2) == 1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } delay(500); } ``` 0.5秒間隔でcountの数値をシリアルに送信し、それに合わせてLEDが点滅します。 ## 受信側プログラム ```c= int LED = 13; void setup(){ Serial.begin(9600); pinMode(LED, OUTPUT); } void loop(){ while(Serial.available()){ byte inChar = (byte)Serial.read(); if((inChar % 2) == 1){ digitalWrite(LED, HIGH); }else{ digitalWrite(LED, LOW); } delay(10); } } ``` ## Aruduino同士をシリアル接続 ![配線](https://cdn-ak.f.st-hatena.com/images/fotolife/p/pythonjacascript/20180724/20180724225759.png) (参考サイトの画像をそのまま利用させてもらっています) ## 結果 電源の取り方で不安定になる * 基本は送信側の電源を先に入れないとうまくいかない。 * 受信側は、USB充電器からの電源供給だと動作しない。 ## 受信側のシリアルポートを変えてみる USBと標準のシリアルポートが繋がっているのが原因かもしれないので、受信側のシリアルポートを変更してみる。 ### 受信側をAruduino Mega2560にしてみる Mega2560は、シリアルポートが3つ拡張されているので、TX1,RX1を使ってみる。 **受信側プログラム** ```c= int LED = 13; void setup(){ Serial1.begin(9600); pinMode(LED, OUTPUT); } void loop(){ while(Serial1.available()){ byte inChar = (byte)Serial1.read(); if((inChar % 2) == 1){ digitalWrite(LED, HIGH); }else{ digitalWrite(LED, LOW); } delay(10); } } ``` ### 結果 **安定しました!** ## ACアダプターから電源をとってみる Aruduinoには、USBポートとは別に、電源用のコネクタが付いているので、こちらから電源をとってみます。 ACアダプターは7V以上のものが必要らしいです。 受信用プログラムは、最初のTX0,RX0を使うもので試します。 ### 結果 **動作しない!!!** TX1,RX1を使うプログラムは動作しました。 ## Aruduino同士のGNDを接続 「GNDを繋げるといいかも」とアドバイスいただいたので、やってみました。 ### 結果 USB充電充電器からでも、ACアダプターからでも、安定して動作するようになりました!!!! すごい! ## まとめ シリアル通信は、TX0,RX0は使わない方が良いのでは?