2017-08-17 3 views
-1

Ich öffne ein Ventil, um Flüssigkeit fließen zu lassen. Der Druck, der hier gemessen wird, ist, mit welchem ​​Druck die Flüssigkeit in ein System gezogen wird. Ich versuche, den Durchschnittswert nur der ersten 10 Pdiff (PMax-PMin) zu messen. Sobald der Durchschnittswert berechnet ist, ist das Ventil geschlossen.Wie man Spitzen mehrfach zählt?

Und auf der Grundlage dieses Durchschnittswerts öffnet und schließt das Ventil erneut für 1 Spitze und dann für 2 Spitzen und für 3 Spitzen und so weiter. Ich speichere den Druckwert in einem Array und vergleiche den Wert mit seinem Vorher-Nachher-Wert, ich bekomme Max- und Min-Werte.

+0

Können Sie ein Beispiel dafür angeben, indem Sie den Schalter verwenden – Naley

Antwort

1

Sie Ihre peakcounter erhöhen ++peakcounter verwenden, aber dann sofort eingestellt peakcounter=0 im if-Block von if(peakcounter==0)

Da Sie Ihre peakcounter zurückgesetzt, man bekommt nie zu peakcounter == 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 
    } 

Was Sie brauchen, um Folgendes tun (Hinweis: Code ist nicht optimiert. Ich verstehe nicht ganz, was Sie brauchen, aber das sollte das Problem beheben, über das Sie geschrieben haben)

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

Wie korrigiere ich den Code, so dass ich einen Peak zähle, setze ihn zurück und zähle dann für 2 Peak, setze ihn zurück, zähle 3 Peaks und so weiter ... – Naley

+0

Ich habe die Antwort für Sie bearbeitet. Ich empfehle dringend, dass Sie sich über Funktionen informieren, damit Sie Ihren Code vereinfachen können. Funktionen würden Ihren Code viel lesbarer und sauberer machen –

+0

Ich habe versucht, den Peakcounter mit einer Variablen zu vergleichen, wie Sie vorgeschlagen haben, und es funktioniert immer noch nicht. Ich versuche, Spitzen zu zählen und ein Ventil basierend auf der Zählung zu öffnen. Zuerst zähle ich 1 Spitze und öffne das Ventil für eine bestimmte Zeit und schließe es. Dann zähle ich 2 Spitzen, öffne das Ventil für eine bestimmte Zeit und schließe es und zähle dann 3 Spitzen, usw. – Naley