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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

mbed

mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

Q&A

解決済

2回答

4630閲覧

[mbed] boolで宣言された関数の扱い方について

SATTHAMAMATSU

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

mbed

mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

0グッド

0クリップ

投稿2016/09/19 13:38

###前提・実現したいこと
初めての質問になります。少々場違いな気がしますが、プログラミングの内容なので質問してみることにしました。ご指導ご鞭撻のほどお願いします。

mbedを触り始めて1年程度になります。
9軸センサに興味を持ち、3軸加速度、3軸ジャイロ、3軸コンパスのセンサを購入しました。
I2C通信でそれぞれのセンサから情報を検出しようとしているところです。

現在、3軸ジャイロセンサからx,y,z軸の角速度を検出しようとしていますがコンパイルが通りません。

マイコンmbed NXP LPC 1768を使用しています。mbedのページ
3軸ジャイロセンサは秋月電子通商のL3GD20のDIP化モジュールを使用しています。3軸ジャイロセンサのページ
ライブラリはこちらからインポートしましたL3GD20.cppとL3GD20.h
###発生している問題・エラーメッセージ
cppとヘッダファイルをインポートしてmain.cppでプログラムを書いています。

エラーメッセージは以下のように出ています。 Error: Type name is not allowed in "main.cpp", Line: 14, Col: 13

###該当のソースコード

C++

1#include "mbed.h" 2#include "L3GD20.h" 3 4L3GD20 gyro(p28,p27); 5DigitalOut myled1(LED1); 6DigitalOut myled4(LED4); 7Serial pc(USBTX, USBRX); 8 9int main(){ 10 bool kv; 11 myled1 = 1; 12 printf("Hello,world\n\r"); 13 float kakusokudo[3]={0,0,0}; 14 kv=L3GD20.read(); 15 printf("%d\n\r",kv); 16 printf("%d ,%d ,%d \n/r",&kakusokudo[0],&kakusokudo[1],&kakusokudo[2]); 17 18 myled4=1; 19 }

###試したこと
このプログラムでは、最初にLEDを光らせてHello,worldを表示させ、角速度センサに検出させてから4番目のLEDを光らせて終了させようとしています。
kv=L3GD20.read();
の部分が原因でエラーとなっています。cppで定義された関数の型と違う形式で書いているのだろうと思いました。

原因はboolだと思い、ちょっと調べてboolはtrueとfalseがあることを知りました。
int i=0;
i=L3GD20.read();
としてみたり
true=L3GD20.read();
としてみたり
L3GD20.read(kakusokudo[0],kakusokudo[1],kakusokudo[2]);
としてみましたがどれもうまくいきませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
c言語はポインタや、ファイル書き込み、読み込みができる程度です。
c++はクラスと構造体の意味が分かる程度の知識しかありません。
プログラミングは苦手です。

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

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

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

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

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

guest

回答2

0

ベストアンサー

L3GD20というクラスにreadという名前のstaticメソッドは定義されているのでしょうか?この呼び出し方だとstaticメソッドを呼び出す記述のはずです。

投稿2016/09/19 14:05

HogeAnimalLover

総合スコア4830

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

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

HogeAnimalLover

2016/09/19 14:19

リンク先を確認しましたが、やはりstaticメソッドではなく通常のメソッドですね。例えば「gryo.read(引数)」とか、「クラス名.メソッド名(引数)」でなく「オブジェクト名.メソッド名(引数)」という記述が必要となります。 なお、私は「gryo」が何を意味するか分かりません。提示されたプログラム上にあったものを使って文法上の修正案を例示しただけでプログラムの挙動は確認しておりませんので、あしからず。
SATTHAMAMATSU

2016/09/19 14:24

回答ありがとうございます。 cppファイルとヘッダファイルで定義されていると思います。 https://developer.mbed.org/users/bclaus/code/L3GD20/ インポートしたL3GD20.cppとL3GD20.hの抜粋を以下に示します。 L3GD20.hからの抜粋: class L3GD20 { public: L3GD20(PinName sda, PinName scl); bool read(float *gx, float *gy, float *gz); private: I2C _L3GD20; float gx, gy, gz; bool write_reg(int addr_i2c,int addr_reg, char v); bool read_reg(int addr_i2c,int addr_reg, char *v); bool recv(char sad, char sub, char *buf, int length); }; L3GD20.cppからの抜粋: bool L3GD20::read(float *gx, float *gy, float *gz) { char gyr[6]; if (recv(GYR_ADDRESS, L3GD20_OUT_X_L, gyr, 6)) { //scale is 8.75 mdps/digit *gx = float(short(gyr[1] << 8 | gyr[0]))*0.00875; *gy = float(short(gyr[3] << 8 | gyr[2]))*0.00875; *gz = float(short(gyr[5] << 8 | gyr[4]))*0.00875; return true; } return false; }
HogeAnimalLover

2016/09/19 14:26

staticがないですよ↓5行目を見てください。 class L3GD20 { public: L3GD20(PinName sda, PinName scl); bool read(float *gx, float *gy, float *gz);//この行に注目
HogeAnimalLover

2016/09/19 14:28

この場合はオブジェクトを作ったうえで、「オブジェクト名.メソッド名(引数)」という記述が必要です。提示されたプログラムでは「クラス名.メソッド名(引数)」となっています。
SATTHAMAMATSU

2016/09/19 14:50

ご指摘ありがとうございます。 エラーから脱出しました。親切丁寧な回答ありがとうございました
guest

0

こんにちは。

mbedのコンパイラはC++をベースにしているということなのでC++ではなさそうです。
boolではなくてbooleanみたいですよ。

投稿2016/09/19 13:45

Chironian

総合スコア23272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問