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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Processing

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

Q&A

解決済

3回答

1405閲覧

なぜ関数controller(string)が存在しないのかわかりません。

beautifulsky

総合スコア2

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Processing

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

0グッド

0クリップ

投稿2021/10/31 10:08

前提・実現したいこと

Processing初心者です。「Access to Materials」という本に記載されている実験14のプログラムを実行したいです。
サンプルコードをコピーしたところエラーメッセージが発生しました。
なぜ関数controller(string)が存在しないのかわかりません。

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

エラーメッセージがでる行
cp5.controller("edge_back").setValue(val_1);

エラーメッセージ
The function controller(string) does not exist.

該当のソースコード

// pSurface (Programmable Surface - Bezier Patch Version)
// Programmed by Akira Wakita (2012/12/12)
// You need Peasycam, controlP5 and Arduino library for compiling the sketch.

import controlP5.;
import peasy.
;
import processing.opengl.;
import processing.serial.
;
import cc.arduino.*;

ControlP5 cp5;
PeasyCam cam;
Arduino arduino;

-----------------※

//マテリアル形状をCAD形状に反映する関数
void readSliderValues(){
//println("flex 1: " +arduino.analogRead(sensorPin[0]));
//println("flex 2: " +arduino.analogRead(sensorPin[1]));
//println("flex 3: " +arduino.analogRead(sensorPin[2]));
//println("flex 4: " +arduino.analogRead(sensorPin[3]));

//曲げセンサからの入力値(0〜400程度)をスライダの値(0〜100)に変換する //曲げセンサは曲がった時に電圧が高くフラット時に電圧が低いので //変換のminを100、maxを0にする float val_1 = map(arduino.analogRead(sensorPin[0]), 0, 400, 100, 0); float val_2 = map(arduino.analogRead(sensorPin[1]), 0, 400, 100, 0); float val_3 = map(arduino.analogRead(sensorPin[2]), 0, 400, 100, 0); float val_4 = map(arduino.analogRead(sensorPin[3]), 0, 400, 100, 0); cp5.controller("edge_back").setValue(val_1); cp5.controller("edge_front").setValue(val_2); cp5.controller("edge_right").setValue(val_3); cp5.controller("edge_left").setValue(val_4);

}

試したこと

The function 関数名 does not exist.というエラーメッセージは、大文字小文字や関数名が正しいかなどの問題が多いとネットで見たので、一文字目を大文字にしたりして試してみましたができませんでした。
Processing2ではなく、Processing4でも同じプログラムを実行しましたが、別の「void initSurface() {」という行で、「The return type is incompatible with PApplet.initSurface()」というエラーメッセージがでてきます。

補足情報

※文字数超えるため該当箇所のコードだけ上記しました。全てのコードを載せた画像を添付します。
![イメージ説明]
イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明
![イメージ説明]
イメージ説明

ProcessingもArduinoも初心者です。初歩的な質問かもしれませんが、ご回答いただけるとありがたいです。宜しくお願い致します。

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

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

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

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

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

jimbe

2021/10/31 12:26

利用されている ControlP5 のバージョンと、書籍が使用されているバージョンはそれぞれ幾つでしょうか。
beautifulsky

2021/10/31 23:14

回答ありがとうございます。書籍が利用しているControlP5のバージョンは、Processing1.5.2でした。私が利用していたものは、おそらく最新のバージョンなので、書籍通りのバージョンで試してみます。
guest

回答3

0

ベストアンサー

teratailのヘルプを見ると、「最も良いのは、現象を再現するためのミニマムなプログラムを改めて作ることです。」とあります。下手に削ってわけわからなくなるぐらいなら余計な事を考えずにソースを全部載せるというのも一つの手段ですが、再現が難しくないなら症状のでる最小限のプログラムを考えてみるべきです。

Processing

1import controlP5.*; 2 3ControlP5 cp5; 4int slider1; 5void setup(){ 6 size(300,300); 7 cp5=new ControlP5(this); 8 cp5.addSlider("slider1"); 9 cp5.controller("slider1").setValue(50);//ここでエラー 10}

とりあえず私の手元ではこれで"The function controller(String) does not exist."が再現しました。

さて。

// Programmed by Akira Wakita (2012/12/12)

とあります。ControlP5の旧版ダウンロードページを見ると、ControlP5のバージョンが1.5xから2.0xに上がったのが2012年12月。で、とりあえず同ページから拾えたVer2.1.5のソースを見ると、
CotrolP5.java

Processing

1@Deprecated 2 public Controller< ? > controller( String theName ) { 3 return getController( theName ); 4 }

となっていますから、このへんの絡みで蹴られているのでしょう(もしかしたら2.2.xではこのメソッドは無くなっているのかも知れません)。

値を設定したいということであれば該当行を(最近のバージョンのやり方らしい)
cp5.getController("slider1").setValue(50);
と置き換えればよさそうです。

(同じように「古いやり方」になっているところが次々とでてきたりはしそうですが...)

投稿2021/10/31 12:28

thkana

総合スコア7659

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

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

jimbe

2021/10/31 12:37 編集

https://github.com/sojamo/controlp5#deprecated によれば、 Methods such as value(), name(), controller() and all other methods that are used to get or set object variables have been prefixed with get and set - value() became getValue() and setValue(). In previous (before 2.2.1) version these deprecated methods were still available but have been removed with >= version 2.2.1 value()、name()、controller()などのメソッド、およびオブジェクト変数の取得または設定に使用される他のすべてのメソッドには、getとsetのプレフィックスが付いています。value()はgetValue()とsetValue()になりました。以前の(2.2.1より前の)バージョンでは、これらの非推奨のメソッドは引き続き使用可能でしたが、> =バージョン2.2.1で削除されました。 (by Google翻訳) だそうです。
beautifulsky

2021/10/31 23:25

回答ありがとうございます。バージョンを書籍と統一し、それでもエラーがでる場合、バージョンに合わせながらgetControllerと置き換えて試してみます。
beautifulsky

2021/11/20 10:54

ControlP5のバージョンを書籍通りにし、controller()をgetControllerなどのように get ○○ に置き換えることで解決しました。ありがとうございました。
guest

0

cp5 = new ControlP5();

投稿2021/10/31 12:06

175

総合スコア147

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

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

jimbe

2021/10/31 12:45

それが無かったらヌルポでしょう。
guest

0

ControlP5のバージョンを書籍通りにし、controller()をgetControllerなどのように get ○○ に置き換えることで解決しました。ありがとうございました。

投稿2021/11/22 00:55

beautifulsky

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問