2017-08-17 17 views
-1

流体を流すためのバルブを開けています。ここで測定される圧力は、流体がどれくらいの圧力でシステムに引き込まれているかである。私は最初の10 Pdiff(PMax-PMin)の平均値を測定しようとしています。一旦平均値が計算されると、バルブは閉じられる。ピークを複数回カウントするにはどうすればよいですか?

この平均値に基づいて、バルブは再び1つのピーク、次に2つのピーク、3つのピークなどのために開閉します。私は配列に圧力値を格納していて、その値を前後の値と比較すると、最大値と最小値を取得します。あなたはpeakcounterをリセットするので

+0

スイッチケースを使用する例を提供することができます – Naley

答えて

1

あなたは++peakcounterを使用してpeakcounterをインクリメントが、その後はすぐにif(peakcounter==0)

の場合はブロックでpeakcounter=0を設定し、あなたがするために必要なもの2

if (valstate == false && Pdelta >= average) 
{ 
    { 
     ++peakcounter; // keeps the count of how many times the value has gone 
     above average 
    } 
    // Checks for the number of times and then performs action 
    if (peakcounter == 1) { 
     digitalWrite(4, HIGH); 
     startTime = millis(); 
     valstate = true; 
     peakcounter = 0; //the offending line 
    } 

peakcounterの==に取得することはありません次の操作を行います(注:コードは最適化されていません。必要なものは完全には理解できませんが、これで問題は解決します)

int currentMax = 0; 
// your code here.... 

if (valstate == false && Pdelta >= average){ 
    ++peakcounter; 
    if(peakcounter > currentMax){ 


     // Checks for the number of times and then performs action 
     if (peakcounter == 1) { 
     digitalWrite(4, HIGH); 
     startTime = millis(); 
     valstate = true; 
     peakcounter = 0; 
     currentMax++; 
     } 

    //the rest of your peakcount checking code here 
    } 
+0

ピークを1つカウントしてリセットし、ピーク2回カウント、リセット、ピーク3回カウントなどのようにコードを修正するにはどうすればいいですか... – Naley

+0

私はあなたの答えを編集しました。私はあなたのコードを単純化できるように、関数について学ぶことを強くお勧めします。関数はあなたのコードをもっと読みやすくてきれいにします –

+0

私はあなたが示唆したようにピークカウンタと変数を比較しようとしましたが、それはまだ動作しません。ピークを数え、カウントに基づいてバルブを開こうとしています。最初にピークを1つカウントし、一定時間弁を開いて閉じます。それから私は2つのピークをカウントし、特定の時間のバルブを開き、その後、3つのピークなどをカウントします – Naley

関連する問題