Go Down

Topic: Schleifenzähler addiert nicht. (Read 1 time) previous topic - next topic

laserbrain

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.

Code: [Select]

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?

-Holger-

Am
count_imp = 0;

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


Kalli

Hallo,

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

Grus Kalli

laserbrain

Hi Kalli,

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

mde110

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!

madias

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

Eisebaer

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
nimm abblockkondensatoren!  100nF.  glaub mir, nimm abblockkondensatoren!

laserbrain

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:

Code: [Select]

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;
  }
 
}

}

sven1977

#8
Dec 30, 2012, 03:52 pm Last Edit: Dec 30, 2012, 03:56 pm by sven1977 Reason: 1
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.

laserbrain

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.


Go Up