こんばんは!
今回はArduinoとProcessing間でシリアル通信をしてみようと思います。
概要
ArduinoとProcessing間でシリアル通信をする。例として、Processingでマウスがクリックされたことを読み取り、ArduinoでLEDを点灯させるようにする。
また、逆にArduinoでタクトスイッチのON/OFFを読み取り、Processingでpc画面にボタンの状態を表示する。
使用するもの
・Arduinoメインボード(https://amzn.to/2vkPIUH)
・USBケーブル(https://amzn.to/2UHhntl)
・ブレッドボード(https://amzn.to/38eNi8u)
・ジャンパワイヤ (https://amzn.to/39uBU8T)
・LED(https://amzn.to/2TvEPGc)
・抵抗100Ω(https://amzn.to/2snlNWT)
・タクトスイッチ(https://amzn.to/3aVZe0k)
手順
まず、ハード側からやっていきます。
以下の図のように配線します。
これでハード側は終了です。
次にコードを書いていきます。
まず、Arduino IDEを開いて次のコードを書き込んでいきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #define led1 9 #define led2 10 #define button 11 void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(button, INPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { char ledState = Serial.read(); if (ledState == '1') { digitalWrite(led1, HIGH); } if (ledState == '2') { digitalWrite(led2, HIGH); } if (ledState == '3') { digitalWrite(led1, LOW); digitalWrite(led2, LOW); } } int buttonState = digitalRead(button); if (buttonState == HIGH) { Serial.println("Button is pressed"); } } |
つぎにProcessingを開いて次のコードを書いていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import processing.serial.*; Serial Port;//シリアルクラスのオブジェクト String Text = ""; void setup() { size(1920, 1080); Port = new Serial(this, "COM5", 9600);//ポート番号とボーレートの設定 Port.bufferUntil(10); } //データが利用可能な時のみ呼び出される void serialEvent(Serial Port) { Text = Port.readStringUntil(10); } void draw() { background(0, 0, 0); textAlign(CENTER); text(Text, width/2, height/2); textSize(200); Text = ""; if (mousePressed && (mouseButton == LEFT)) { Port.write('1'); } if (mousePressed && (mouseButton == RIGHT)) { Port.write('2'); } if (mousePressed && (mouseButton == CENTER)) { Port.write('3'); } } |
ProcessingとArduinoボードを使って2つの間でシリアル通信でデータを送受信するプログラムを記述しています。
LEDの点灯に関しては、Processing側でマウスが左クリックされたとき'1'というデータを、右クリックされたときに'2'というデータを、中クリックされたときに'3'というデータをArduinoに送信しています。
Arduino側では'1'というデータを受け取ったときはled1を点灯させ、'2'というデータを受け取ったときはled2を点灯させ、'3'というデータを受け取ったときはled1,led2を消しています。
タクトスイッチのON/OFFに関しては、タクトスイッチが押されてHIGHの状態になったことをArduinoで読み取り、Processing側にタクトスイッチが押されたことを示す"Button is pressed"という文字列を送信しています。Processing側はArduinoから受信された文字列を読み取り、画面に表示しています。
では実際にマイコンボードに書き込み、Processingを実行してみます。
まず、マウスをクリックしてみます。
LEDが点灯しました。
次にタクトスイッチをONにしてProcessingの画面を見てみます。
「Button is pressed!」という文字列が表示されていることが確認できると思います。
ArduinoとProcessing間でのシリアル通信がうまくいっていることが確認できました。
まとめ
今回はArduinoとProcessing間でシリアル通信をやってみました。
応用として、センサの測定結果などもPCの画面でグラフ化ができそうなので使用用途は多くあると思います。
今回はこれで終わります。
ではまた!