Schleifenzähler addiert nicht.

Hi Leute,

also ich versuche nun schon einige Zeit einen einfachen counter zu basteln, aber selbiger zäht nicht hoch. Anbei ein Auszug.
count_imp bleibt auf 1 stehen, sollte aber immer wenn der if Teil erfüllt ist (was er definitiv ist), um eins hochzählen.

void loop(){

  int messen = 0;
  int count_imp;

  int newval, oldval;
  int timestart;

if(messen == 1){
    
   
   count_imp = 0;
   
  
    if(voltage < 0.2 ){
        //Variable auf 1 setzten bei Blinken des 'S0'
        count_imp += 1;     
    }

     if (currentMillis - previousMillis > interval) {

    previousMillis = currentMillis; 
    Serial.println(count_imp);
    messen = 0;
    }
}

Wo ist da mein Fehler?

Am
count_imp = 0;

Du setzt die Variable ja vor dem addieren immer auf null ]:smiley:
Und 0+1 ergibt oft 1...

Hallo,

ich glaube, die Bedingung if (messen ==1) wird niemals erfüllt.

Grus Kalli

Hi Kalli,

das ist nur ein Auszug, die edingung stimmt. Ich kann mir auch in der Schleife die richtigen Werte ausgeben lassen...

Dann poste nicht nur fehlerhafte Auszüge sondern alles. Sonst werden die Leute hier nur unnötig beschäftigt.

P.S.: Holger hat auch recht!

Probier mal die Bedingung if(voltage < 0.2 ) zu testen, d.h. mach ein Serial.print(voltage) im Loop, ob diese Bedingung erfüllt wird. Ansonsten: nur mit diesem Codeschnippsel ist eine Fehleranalyse unmöglich. (z.B. wann "messen" auf 1 gesetzt wird).
LG
Matthias

hi,

erstens legst Du bei jedem loop-durchlauf eine neue variable count_imp an und setzt sie dann auch noch auf 0. nimm eine globale variable und setz' sie, falls nötig, in der setup auf 0.

gruß stefan

Also voltage < 0.2 wird erfüllt, kann ich mit einem serial.print ansehen, aber count ist immer wieder 0. Hier ist mal der ganze Code:

long previousMillis = 0;        // will store last time LED was updated

long interval = 60000;           // interval at which to blink (milliseconds

int count_blinks = 0; //Blinks pro Intervall
 
int count_imp;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  int count_imp = 0;
}

// the loop routine runs over and over again forever:
void loop() {
  

  
  int messen = 0;

  int newval, oldval;
  int timestart;
  
  unsigned long currentMillis = millis(); 
 
  
    if (messen == 0) {
      // neue Messung initialisieren
      messen = 1;
      // Zähler nullen
      //count_imp = 0;
      // Startzeit nehmen#
      oldval = 0;
      timestart = millis();
    }
  
  if(messen == 1){
    
   int sensorValue = analogRead(A0); // Pin an dem der Sensor hängt 
   float voltage = sensorValue * (5.0 / 1023.0); 
   //Serial.println(voltage);
   
    if(voltage < 0.2 ){
        //Variable auf 1 setzten bei Blinken des 'S0'
        Serial.println(voltage);
        count_imp += 1;      
    }
  
     if (currentMillis - previousMillis > interval) {
    // Messung ist beendet , 1s war Messzeit, count ist direkt Frequenz in Hz
    previousMillis = currentMillis; 
    Serial.println(count_imp);
    //count_imp = 0;
    messen = 0;
  } 
  
 }

}

Hey laserbrain,

kannst du vieleicht mal kurz erklären was du machen möchtest.
In der loop Schleife hast du int messen = 0; und darunter gleich
if (messen == 0) { .... messen = 1;...

Damit gibst du count_imp += 1; keine Möglichkeit weiter als 1 zu zählen weil
im if (messen == 0) sowieso immer wieder durchgelaufen wird wegen dem int messen = 0;.
Also im Grunde ist int messen = 0; und die If überflüssig.

Ich verstehe dein Script leider nicht. Sag doch bitte was es tun soll.

Hi Sven,

danke für diesen ersten Hinweis. Da war ich schon mal sehr blind mit dem messen = 0 im loop Teil.
Generell ist es ein Versuch, dass eine Minute der Counter laufen soll (messen==1 und count_imp +=1;) und dann von neuem Zählen soll und den Wert ausgeben soll.