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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

解決済

Arduino M0 Pro, ESP-WROOM-02, MILKCOCOA, Arduino IDEープログラム動作検証ー

bobby2128
bobby2128

総合スコア42

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

1回答

0評価

0クリップ

1434閲覧

投稿2017/02/20 04:57

編集2017/02/20 05:18

###前提・実現したいこと
ランプ(赤色)が点灯している時、光センサでそれを検知しarduinoとESP-WROOM-02を用いてmilkcocoaへ送信させたいため、プログラムを下記のように作成いたしました。点灯していないときも、点灯していない情報を同様にmilkcocoaへ送信させます。

###発生している問題・エラーメッセージ
①点灯が無い場合のモード(モード0)の全箇所をコメント化した際は、赤ランプが点灯した際にmilkcocoaへランプの点灯情報を送信しました。
②しかし、無点灯のモードに関わるプログラムを有効にし実行すると、(初期状態は無点灯です。)無点灯中は無事にmilkcocoaへ無点灯中の情報を送信するのですが、そこからランプを点灯させると、Arduino IDEのシリアルモニタ上では点灯情報(zennouという変数が4になり)連続的に出力しているにもかかわらず、milkcocoaにはデータが来ていない状態になります。
③その後さらにランプを消灯すると、シリアルモニタ上にはzennou変数が0になり連続的に出力しているのにも関わらず、milkcocoaへはデータが来ていない状態が続きます。
④その後さらにランプを点灯させると、シリアルモニタに「Connecting to MQTT... MQTT Connected!」と表示された後、zennou変数が4とシリアルモニタに連続的に表示された後、不思議とmilkcocoaにデータが送信されるようになります。

※④の後消灯すると、シリアルモニタ上にはzennnou変数が0になり無点灯の情報がmilkcocoへ無事に送信されますが、その後は②、③、④を繰り返します。

従いまして、奇数回目の点灯は送信されず、偶数回目の点灯は送信されている不思議な状態です。

全ての状態を送信したいのですが、何か解決に際して良いアイデアや助言、アドバイスなどございましたらお教えいただけますと幸甚に存じます。

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

c

/** * ループ処理 */ void loop() { // Milkcocoaのループ処理を実行 milkcocoa.loop(); // センサーの値 int sensorValue = analogRead(sensorPin); int sensorValue1 = analogRead(sensorPin1); int sensorValue2 = analogRead(sensorPin2); int sensorValue3 = analogRead(sensorPin3); int partscounter = 0; int bluestep = 0; int step1 = 0; int step2 = 0; int STEP = 0; int zennou = 0; Serial.print("Sensor Value : "); Serial.println(sensorValue); Serial.print("Sensor Value1 : "); Serial.println(sensorValue1); Serial.print("Sensor Value2 : "); Serial.println(sensorValue2); Serial.print("Sensor Value3 : "); Serial.println(sensorValue3); Serial.print("zennou : "); Serial.println(zennou); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////↓↓↓赤ランプ点灯判定(モード3)↓↓↓///////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(sensorValue3 > threshold3){ digitalWrite(AKA,HIGH); digitalWrite(ledPin1, HIGH); //noticeボタン近くのLED点灯 nowSensorState3 = true; zennou = 4; 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); Serial.print("zennou : "); Serial.println(zennou); // Milkcocoaへ送信するデータを作成 DataElement elem = DataElement(); // 各データ名で値を追加 elem.setValue("zennou", zennou); elem.setValue("Partscounter", partscounter); // Milkcocoaへデータを送信 milkcocoa.push(MILKCOCOA_DATASTORE, &elem); // 1秒処理を止める delay(1000); ///////////////////////////////////////////////////////↑↑↑赤ランプ点灯判定(モード3)↑↑↑///////////////////////////////////////////////////////// /////////////////////////////////////////////////////////↓↓↓赤色ランプ点灯時の動作↓↓↓///////////////////////////////////////////////////////////// // 赤色ランプ点灯している間 while(sensorValue3 > threshold3){ STEP = 1; if(step1 == 1){ zennou = 6; } if(step1 == 0){ zennou = 4; } 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); Serial.print("zennou : "); Serial.println(zennou); // Milkcocoaへ送信するデータを作成 DataElement elem = DataElement(); // 各データ名で値を追加 elem.setValue("zennou", zennou); elem.setValue("Partscounter", partscounter); // Milkcocoaへデータを送信 milkcocoa.push(MILKCOCOA_DATASTORE, &elem); // 1秒処理を止める delay(1000); // オペレーターのnotice待ち if(digitalRead(operatornoticebutton) == HIGH){ //operatorがnoticeボタンをONしたら digitalWrite(ledPin1, LOW); //noticeボタン用のライトが消える digitalWrite(ledPin2, HIGH); //finishボタン用のライトを点灯させる step1 = 1; zennou=6; 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); Serial.print("zennou : "); Serial.println(zennou); // Milkcocoaへ送信するデータを作成 DataElement elem = DataElement(); // lightというデータ名で値を追加 elem.setValue("zennou", zennou); elem.setValue("Partscounter", partscounter); // Milkcocoaへデータを送信 milkcocoa.push(MILKCOCOA_DATASTORE, &elem); // 1秒処理を止める delay(1000); } // オペレーターのnotice後 if(zennou == 6 && digitalRead(operatorfinishbutton) == HIGH){ //operatorがfinishボタンをONしたら step2 = 1; zennou = 6; digitalWrite(ledPin2, LOW); digitalWrite(ledPin1, LOW); // Milkcocoaへ送信するデータを作成 DataElement elem = DataElement(); // lightというデータ名で値を追加 elem.setValue("zennou", zennou); elem.setValue("Partscounter", partscounter); // Milkcocoaへデータを送信 milkcocoa.push(MILKCOCOA_DATASTORE, &elem); // 1秒処理を止める delay(1000); }//operatornotice後のif文カッコ閉じ }//赤色ランプ点灯している間 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); Serial.print("zennou : "); Serial.println(zennou); STEP = 0; step1 = 0; step2 = 0; nowSensorState3 = false; //赤ランプ点灯終わったらnowSensorState3の状態を更新 }//赤ランプ点灯判定 モード3 digitalWrite(ledPin2, LOW); digitalWrite(ledPin1, LOW); digitalWrite(AKA,LOW); STEP = 0; step1 = 0; step2 = 0; /////////////////////////////////////////////↑↑↑赤色ランプ点灯時の動作↑↑↑////////////////////////////////////////////////////// //赤色ランプが点灯していないとき if(sensorValue3<threshold3){ nowSensorState3 = false; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////↑↑↑赤ランプ(モード3)関連のプログラム↑↑↑////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////↓↓↓何も点灯していないとき点灯判定(モード0)↓↓↓//////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(sensorValue1 < threshold1 && sensorValue2 < threshold2 && sensorValue3 < threshold3){ zennou = 0; while(sensorValue1 < threshold1 && sensorValue2 < threshold2 && sensorValue3 < threshold3){ //無点灯の間 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); Serial.print("zennou : "); Serial.println(zennou); // Milkcocoaへ送信するデータを作成 DataElement elem = DataElement(); // 各データ名で値を追加 elem.setValue("zennou", zennou); elem.setValue("Partscounter", partscounter); // Milkcocoaへデータを送信 milkcocoa.push(MILKCOCOA_DATASTORE, &elem); // 1秒処理を止める delay(1000); }//無点灯を続けている限り }//もし何も点灯していないとき。 ////////////////////////////////////////////↑↑↑何も点灯していないとき点灯判定(モード0)↑↑↑//////////////////////////////////////////////////// }//loop文のカッコ閉じ /* * Milkcocoaへ光センサーの値がpushされた */ void milkcocoaPushDataHandler(DataElement *pelem) { // 明るさの状態を更新 sensorState1 = nowSensorState1; sensorState2 = nowSensorState2; sensorState3 = nowSensorState3; }

###補足情報(言語/FW/ツール等のバージョンなど)
Arduino IDE 1.8.0
Arduino M0Pro
ESP-WROOM-02

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。