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

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

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

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

Q&A

1回答

3127閲覧

助けてください!

nozomi0830

総合スコア6

Arduino

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

0グッド

0クリップ

投稿2017/01/05 11:28

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

理由がわからない
エラーメッセージ
ボードArduino Due (Programming Port)に対するコンパイル時にエラーが発生しました。

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

void zenntai()
{
uint8_t buffer[128] = {0}; /バッファの初期化/
String rcvMsg = ""; /文字列を入れるための変数/
String rcvMsg2 = "";
uint32_t len1 = wifi.recv(buffer, sizeof(buffer), 10000); /*取得した文字列の長さ */

if (len1 > 0) { /取得した文字数が0でなければ/
for (uint32_t i = 0; i < len1; i++) { /ここで取得した文字列を一文字ずつ足していく/
Serial.print("Received[");
rcvMsg += (String)buffer[i];
rcvMsg2 += (char)buffer[i];
Serial.println((String)buffer[i]);
Serial.println((char)buffer[i]);
Serial.println("]\r\n");
}
}
/lastIndexOfでrcvMsgの最後からの改行を探す/
int lastLF = rcvMsg.lastIndexOf('\n');
int lastLF2 = rcvMsg2.lastIndexOf('\n');

/rsvMsgの長さを求める/
int rcvMsgLength = rcvMsg.length();
int rcvMsgLength2 = rcvMsg2.length();

/substringで改行コードの次の文字から最後までを求める/
/String resultMsg = rcvMsg.substring(lastLF + 1, rcvMsgLength);/
String resultMsg = rcvMsg.substring(0, rcvMsgLength - lastLF);
String resultMsg2 = rcvMsg2.substring(0, rcvMsgLength2 - lastLF2);
/前後のスペースを取り除く/
resultMsg.trim();
resultMsg2.trim();

char Msg[255], Msg2[255];
resultMsg.toCharArray(Msg, 255);
resultMsg2.toCharArray(Msg2, 255);

/* sscanfで受信した文字列を分割*/
int distance, degree;
int distance2, degree2;
sscanf(Msg, "%d,%d", &distance, &degree);
sscanf(Msg2, "%d,%d", &distance2, &degree2);
Serial.println(distance);
Serial.println(degree);

Serial.println(distance2);
Serial.println(degree2);

if (resultMsg == "On") { /もし受信した文字がOnだったらシリアルモニタにaaaと表示される/
Serial.print("aaa\n");
}
if (resultMsg2 == "On") { /もし受信した文字がOnだったらシリアルモニタにaaaと表示される/
Serial.print("iii\n");
}

if (len1 == 3) { /もし受信した文字列の長さが3であったらシリアルモニタにuuuと表示される/
Serial.print("uuu\n");
}

if (len1 == 2) { /もし受信した文字列の長さが3であったらシリアルモニタにuuuと表示される/
Serial.print("uuu2\n");
}

if (rcvMsg == "On") {
Serial.print("eee\n");
}
if (rcvMsg2 == "On") {
Serial.print("ooo\n");
}

delay(5000);

switch (MODE)
{

case 'A': if (resultMsg == "Start") { MODE == 'B'; //スタート } case 'B': line_traser(); if (line == 5) { motor(0, 0); motor(1, 0); delay(100); MODE == 'C'; } case 'C': // camera; correspondence(); shutokubu(); move_angle(degree_data); move_distance(distance_data); if (digitalRead(28) == 0) { line_traser_back(); MODE == 'C'; } else { line_traser_back(); move_distance(400); MODE = 'D'; } case 'D': if (Blue) { move_angle(90); move_distance(-30); motor(0, 0); motor(1, 0); delay(100); time_t time1, time2, time3; time1 = time(NULL); time3 = 0; while (time3 < 2000) { analogWrite(6, 255); time2 = time(NULL); time3 = difftime(time2, time1); } move_distance(30); move_angle(-90); MODE = 'E'; } if (Red) { move_angle(120); move_distance(-35); motor(0, 0); motor(1, 0); delay(100); time_t time1, time2, time3; time1 = time(NULL); time3 = 0; while (time3 < 2000) { analogWrite(6, 255); time2 = time(NULL); time3 = difftime(time2, time1); } move_distance(35); move_angle(-120); MODE = 'E'; } if (Yellow) { move_angle(30); move_distance(-35); motor(0, 0); motor(1, 0); delay(100); time_t time1, time2, time3; time1 = time(NULL); time3 = 0; while (time3 < 2000) { analogWrite(6, 255); time2 = time(NULL); time3 = difftime(time2, time1); } move_distance(35); move_angle(-30); MODE = 'E'; } case 'E': line_traser_2(); if (line_2 == 1) { motor(LEFT, 0); motor(RIGHT, 0); delay(10); } MODE = 'B';

}
}

###試したこと
エラー処理でswitchに原因があるようですがわかりません

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/01/05 12:13

エラー文の掲載をおねがいします。
GrassfieldK

2017/02/08 01:06

ここはYahoo!知恵袋ではないので、まずMarkdown方式で書きましょう。タイトルも質問の概要を示すものにして、テンプレートに関しても、使うなら不要な部分は消しておきましょう。回答してくれる人に感謝の気持ちを持って、質問も丁寧に行ってください。
guest

回答1

0

エラーメッセージがなくて推測になりますが、

エラー処理でswitchに原因があるようですが

を踏まえて、ソースも掲載されている範囲で見ると、switch文の比較対象としている変数(多分変数ですよね)MODEが宣言されていません。「MODEが宣言されていないよ」的なメッセージになっていませんか?
それと、case 'A'case 'B'の最後でMODEに代入をしようとしていますが、==と比較になっており、代入は行われません。おそらく、期待外の動作になるでしょう。

と言うか、よくよく見ると、ツッコミどころが満載です(文字列比較のやり方とか)。まずは、リファレンスを見て構文などを理解した方がいいのではないでしょうか。

投稿2017/01/05 15:11

archiver

総合スコア1557

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問