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

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

ただいまの
回答率

88.77%

Arduinoープログラム(恐らくwhile文)で、途中で止まっているようです。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,085

bobby2128

score 42

前提・実現したいこと

1.Arduinoプログラムを書き込み実行したのですが、if文による条件分岐の先に進むと、プログラムが止まってしまいます。(恐らくwhile文の箇所で止まっているかと思われます。)
2.milkcocoaとESP-WROOM-02を用いておりますが、milkcocoa上にもデータが送信されていない状態です。

以下に詳しく症状を示します。
※プログラムが長く、質問投稿ができなかったため、プログラムが止まってしまう該当箇所を抜粋し記載させていただきます。

プログラムの概要

1.ランプの点灯or非点灯を光センサで読み取り、点灯した直後にmilkcocoaにランプの情報を送信する。
2.ランプが点灯中は、常にランプの点灯非点灯を確認し、スイッチが押されるまで待機する。

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

プログラムが止まる(具体的には、シリアルモニタ上にセンサの読み取り値が連続的に表示されずに止まってしまう、さらに、milkcocoa上にもデータが送信されていない事を確認しました。)

具体的な症状としては、ランプが点灯するまで、シリアルモニタ上にセンサの読み取り値が常に更新されます。ところがランプが点灯してからは、確認用のLEDが点灯して、シリアルモニタ上にデータが一つ表示されてからは、ランプが消灯した後でも、状態が変わらずそのまま動作が止まってしまいます。

自分としてはwhile文がうまく抜けれていないのかと思われますが、どうかアイデアなどございましたらお教えいただきますと幸甚に存じます。

/////////////////////////////////////////////////////////↓↓↓赤ランプ点灯判定(モード3)↓↓↓/////////////////////////////////////////////////////////  
  if(sensorValue3 > threshold3){
    digitalWrite(AKA,HIGH);
    nowSensorState3 = true;
    nowOperatorNoticeRed = false;
    Ralarmstart = millis();    //50日のループ
    digitalWrite(ledPin1, HIGH);
     Serial.print("Sensor Value1 : ");
    Serial.println(sensorValue1);
    Serial.print("Sensor Value2 : ");
    Serial.println(sensorValue2); 
    Serial.print("Sensor Value3 : ");
    Serial.println(sensorValue3);

  // Milkcocoaへ送信するデータを作成
    DataElement elem = DataElement();

  // 各データ名で値を追加
    elem.setValue("lightState1", nowSensorState1);
    elem.setValue("lightState2", nowSensorState2);  
    elem.setValue("lightState3", nowSensorState3);  
    elem.setValue("AlarmStart", Ralarmstart);    //ミリセカンドで送信
    elem.setValue("nowOperatorNoticeRed", nowOperatorNoticeRed);
    elem.setValue("nowOperatorNoticeYellow", nowOperatorNoticeYellow);
    elem.setValue("Partscounter", partscounter);

  // Milkcocoaへデータを送信
    milkcocoa.push(MILKCOCOA_DATASTORE, &elem);

  // 1秒処理を止める
    delay(1000);

/////////////////////////////////////////////////////////↑↑↑赤ランプ点灯判定(モード3)↑↑↑/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////↓↓↓赤色ランプ点灯時の動作↓↓↓/////////////////////////////////////////////////////////////
  // 赤色ランプ点灯している間    
  while(sensorValue3 > threshold3){
    STEP = 1;
    sensorValue1 = analogRead(sensorPin1);
    sensorValue2 = analogRead(sensorPin2);
    sensorValue3 = analogRead(sensorPin3);
    Serial.print("Sensor Value1 : ");
    Serial.println(sensorValue1);
    Serial.print("Sensor Value2 : ");
    Serial.println(sensorValue2); 
    Serial.print("Sensor Value3 : ");
    Serial.println(sensorValue3);
  // オペレーターのnotice待ち
    if(digitalRead(operatornoticebutton == HIGH)){                 //operatorがnoticeボタンをONしたら
      nowOperatorNoticeRed = false;
      step1 = 1;
      Roperatornotice = millis();                                  //その瞬間の時間を格納
      TTN = Roperatornotice - Ralarmstart;                         //Time TO Noticeを算出

      // Milkcocoaへ送信するデータを作成
        DataElement elem = DataElement();

      // lightというデータ名で値を追加
        elem.setValue("lightState1", nowSensorState1);
        elem.setValue("lightState2", nowSensorState2);  
        elem.setValue("lightState3", nowSensorState3);  
        elem.setValue("AlarmStart", Ralarmstart);  
        elem.setValue("OperatorNotice", Roperatornotice);  
        elem.setValue("TTN", TTN);
        elem.setValue("nowOperatorNoticeRed", nowOperatorNoticeRed);
        elem.setValue("nowOperatorNoticeYellow", nowOperatorNoticeYellow);
        elem.setValue("Partscounter", partscounter);

      // Milkcocoaへデータを送信
        milkcocoa.push(MILKCOCOA_DATASTORE, &elem);

      // 1秒処理を止める
        delay(1000);            
    }

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

Arduino M0 Pro
Arduino IDE 1.8.0
ESP-WROOM-02
Milkcocoa

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ここのif文でしょうかね。

if(digitalRead(operatornoticebutton == HIGH)){                 //operatorがnoticeボタンをONしたらif(digitalRead(operatornoticebutton) == HIGH){                 //operatorがnoticeボタンをONしたら

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/20 17:03

    ttyp03様
    こんにちはコメントいただき誠にありがとうございます。
    elem.setValueの数が3つ以上になると動作が止まる現象がみられたので、
    2つまでにすると正常に動作いたしました。

    また、現在新たに問題が発生し、それを先ほど質問させていただきましたので、
    お手数おかけいたしますが、よろしければご確認をよろしくお願いいたします。

    キャンセル

  • 2017/02/20 17:06

    ご報告ありがとうございます。
    本日は多忙なため、新たな質問は明日拝見させていただきます。
    それまでに解決していると良いのですが。

    キャンセル

  • 2017/02/20 17:32

    ttyp03 様
    ご多忙の中コメントをいただきありがとうございました。
    どうか、どうかよろしくお願いいたします。

    キャンセル

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

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る