# 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同士をシリアル接続

(参考サイトの画像をそのまま利用させてもらっています)
## 結果
電源の取り方で不安定になる
* 基本は送信側の電源を先に入れないとうまくいかない。
* 受信側は、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は使わない方が良いのでは?