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

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

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

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

Q&A

2回答

4667閲覧

エラーがでます

msyk23p2

総合スコア14

Arduino

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

0グッド

0クリップ

投稿2016/09/20 02:00

編集2016/09/20 02:20

servo.write(A);の所で'A'was not declared in this scopeとエラーがでます。
どのように改善すればよいでしょうか。回答お願いします

#include<stdio.h>
#include<math.h>
#include<Servo.h>
Servo servo;

void setup(){

servo.attach(9);
double a,b,c,A,degree;
a=10;
b=20;
c=30;

A=acos((bb+cc-aa)/2bc);
degree=A
180.0/PI;
}
void loop()
{
servo.write(A);
delay(1000);
servo.write(0);
delay(1000);
}

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

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

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

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

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

guest

回答2

0

すでに回答が出ているようですが、過去の質問を見て気になったので補足します。
先に断っておくと、私はArduinoを触ったことも書いたこともありません。
回答の検証はしていませんし、正確ではないかもしれません。

エラーメッセージにあるように、変数degreeを利用するには、その前に宣言が必要です。
これはdegreeに限った話ではありません。
「この変数をこれから利用しますよ」とコンピュータに対して宣言していると考えればいいと思います。

例えば、関数setup()内のdegreeより上で利用されている変数abcAなどは宣言されているので代入などができます。
しかし、degreeに関しては宣言されていないので、値を代入しようとするとエラーを吐いてしまいます。

void setup() { double a, b, c, A; // a, b, c, Aの宣言 a = 10; // aは宣言されているので利用できる b = 20; // bは宣言されているので利用できる c = 30; // cは宣言されているので利用できる A = acos((b*b+c*c-a*a)/2*b*c); // Aは宣言されているので利用できる degree = A*180.0/PI; // degreeは宣言されていないので利用できない }

コンピュータに対して「abcAを使うからね」とは伝えましたが、degreeを使うという話は伝えていなかったので、急に利用しようとするとコンピュータが困惑してしまいます。
この問題は事前にdegreeを利用することを伝えてやれば解決します。(つまり変数degreeを宣言してあげればいいんです!)
具体例としては以下のように宣言できます。

void setup() { double a, b, c, A; // a, b, c, Aの宣言 a = 10; // aは宣言されているので利用できる b = 20; // bは宣言されているので利用できる c = 30; // cは宣言されているので利用できる A = acos((b*b+c*c-a*a)/2*b*c); // Aは宣言されているので利用できる double degree; // degreeの宣言 degree = A*180.0/PI; // degreeは宣言されている利用できる }

また、Arduino 日本語リファレンスには以下のように書いてありました。

Arduino言語はC/C++をベースにしており、C言語のすべての構造と、いくつかのC++の機能をサポートしています。また、AVR Libcにリンクされていて、その関数を利用できます。

なので、変数の宣言と代入を同時におこなうことができると思います。
具体的には以下のような書き方ができると思います。

void setup() { double a, b, c, A; // a, b, c, Aの宣言 a = 10; // aは宣言されているので利用できる b = 20; // bは宣言されているので利用できる c = 30; // cは宣言されているので利用できる A = acos((b*b+c*c-a*a)/2*b*c); // Aは宣言されているので利用できる double degree = A*180.0/PI; // degreeの宣言と代入を同時におこなう }

Arduinoのことはよく分かりませんが、変数の宣言と同時に値を代入することは一般的によくおこなわれますので、憶えておくといいかもしれません。

余計なお世話かもしれませんが、以下のことを実践すべきだと思います。

  • エラーメッセージをよく読む

メッセージの内容がよくわからなければ、検索エンジンにそのままコピペすると解決策が書いてあることがよくあります。

  • 基本的な文法は入門サイトなどで軽く勉強する

スコープなどの概念についても勉強したほうがいいと思います。

投稿2016/09/20 03:07

carimatics

総合スコア740

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

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

0

Arduinoという言語はわかりませんので修正方法を提示することは出来ませんが
エラーメッセージは、
”このスコープでdegreeが宣言されてません”
って言われてるようです。

この関数の中で、degreeはどこで宣言されてますか?

投稿2016/09/20 02:07

Batoh33789

総合スコア136

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問