arduinoとprocessingでのシリアル通信を行うプログラムにおける速度改善

実現したいこと

前提

Processingでimage1,image2を表示し、image1が表示されている間はArduinoの13ピンをON、image2が表示されている間は13ピンをOFFにするプログラムを作成しました。シリアル通信でON・OFFを切り替えています。

発生している問題・エラーメッセージ

各画像の表示時間を30msとしたいのですが、値を1500msより小さくすると現在動作しない状況です。ONの状態またはOFFの状態が続いてしまっています。AruduinoのRX LEDは1500msより速い場合でも点滅しているため、データは受信できていると考えています。

該当のソースコード

Processing

1import processing.serial.*;2 3Serial myPort; // Serialクラスからオブジェクトを作成4int val; // シリアルポートから受信したデータ5PImage img1;6PImage img2;7int displayTime = 30; // 各画像を表示する時間(ミリ秒)8int lastSwitch = 0; // 最後に画像を切り替えた時間9boolean showImg1 = true; // image1かimage2を表示するか10 11void setup()12{13 fullScreen();14 size(1280, 854);15 background(255);16 myPort = new Serial(this,"COM3" , 115200);17 img1 = loadImage("image1.png");18 img2 = loadImage("image2.png");19}20 21void draw()22{23 if (millis() - lastSwitch > displayTime) {24 showImg1 = !showImg1;25 lastSwitch = millis();26 if (showImg1) {27 myPort.write('1'); // '1'を送信してピン13をONにする28 } else {29 myPort.write('2'); // '2'を送信してピン13をOFFにする30 }31 }32 33 if (showImg1) {34 image(img1, 0, 0);35 } else {36 image(img2, 0, 0);37 }38}

Arduino

1const int ledPin = 13;2 3void setup() {4 pinMode(ledPin, OUTPUT);5 Serial.begin(115200);6}7 8void loop() {9 if (Serial.available() > 0) {10 char inByte = Serial.read();11 if (inByte == '1') {12 digitalWrite(ledPin, HIGH);13 } else if (inByte == '2') {14 digitalWrite(ledPin, LOW);15 }16 }17}

試したこと

・シリアル通信のデータレートを9600から115200に変更
・上記のArduinoのプログラムをレジスタを直接指定するように変更
この2つの変更前は2000msまででしか正常に切り替えできなかったのですがこれにより1500msまで正常に動作するようになりました。

しかし目標の30msには全く届かない状況です。

補足情報(FW/ツールのバージョンなど)

Arduino mega 2560

コメントを投稿

0 コメント