###前提・実現したいこと
ランプ(赤色)が点灯している時、光センサでそれを検知し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
まだ回答がついていません
会員登録して回答してみよう