質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

3928閲覧

ProcessingでArduinoのLEDを点灯させるプログラムについて

hiro1010

総合スコア15

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2016/10/23 06:20

/*

  • Arduino - Processingシリアル通信
  • Firmataを使用したサンプル
  • Processing側

*/

import processing.serial.;
import cc.arduino.
;

Arduino arduino;
int ledPin = 13;
color bgColor = color(0);

void setup() {
size(400, 200);
//arduino = new Arduino(this, Arduino.list()[4], 57600);
arduino.pinMode(ledPin, Arduino.OUTPUT);
}

void draw() {
background(bgColor);
}

void mousePressed() {
arduino.digitalWrite(ledPin, Arduino.HIGH);
bgColor = color(255,0,0);
}

void mouseReleased() {
arduino.digitalWrite(ledPin, Arduino.LOW);
bgColor = color(0);
}

マウスをクリックするとArduinoの13番に取り付けたLEDを点灯させるプログラムを実行したのですが、
arduino = new Arduino(this, Arduino.list()[4], 57600);
のところで、ArrayIndexOutOfBoundsExceptionというエラーが出てしまいます。調べると、配列のIndexの異常だとは分かったんですが、どのように間違っているのかわからないので教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、エラーの部分が何をしているか?
arduino = new Arduino(this, Arduino.list()[4], 57600);
ここでは、指定したポートを57600bpsで開く訳ですが、
まずそのポートが正しいか?

import processing.serial.;
import cc.arduino.
;
Arduino arduino;

void setup() {
println(Arduino.list());
}
で自分が使いたいポートがエラーの例では4番目に定義されているか?
恐らく[4]に該当ポートが無いのでは?

投稿2016/10/23 06:45

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro1010

2016/10/23 06:55

ご回答ありがとうございます。ご提示いただきましたプログラムを実行しましたところ、COM4とコンソールに表示されました。ポートは間違っていないと思うのですが。
MasahikoHirata

2016/10/23 07:01

リスト表示されるはずですが"[4]"の部分に”COM4"となっていますか?
hiro1010

2016/10/23 07:05

いえ、リスト表示ではなく COM4 とだけ表示されました。Arduinoが接続されているポートを出力するプログラムかと思っていましたがリスト表示されるのでしょうか
MasahikoHirata

2016/10/23 07:11

恐らく選択できるものが1つだけ([0])なので([4])を([0])に変更して試してみてください。 ホスト側にシリアル系の接続が複数ある場合、 [0] "/dev/...... [1] "/dev/... [2] ".... と複数出て、そのうちの[4]が対象と設定するのが貴殿のソースです。 エラーの”ArrayIndexOutOfBoundsException”も配列の範囲外と示していますし。
hiro1010

2016/10/23 07:19

arduino = new Arduino(this, Arduino.list()[0], 57600); として実行しましたが IllegalAccessError: tried to acces class processing core. PApplet$RegisteredMethods from class cc.arduino.Arduino$SerialProxy と別のエラーが出てしまいました。よくわからないのですが、ライブラリの問題でしょうか。
MasahikoHirata

2016/10/23 07:21

それと”Firmataを使用したサンプル”とありますが、Processing 1.5.1ですよね? Processing 2.0は対応していませんから。
hiro1010

2016/10/23 07:26

えっ。processing-3.2.1です。。それが問題でしたか。申し訳ございません。インストールし直してきます
hiro1010

2016/10/23 07:34

processingのバージョンの問題でした。processing-1.5.1をインストールしたところ、正常に動作しました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問