Pages: [1]   Go Down
Author Topic: Schleifenzähler addiert nicht.  (Read 1178 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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?
Logged

Offline Offline
Newbie
*
Karma: 2
Posts: 30
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Am
count_imp = 0;

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

Logged

0
Offline Offline
Full Member
***
Karma: 8
Posts: 153
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

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

Grus Kalli
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Kalli,

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

Germany, BW
Offline Offline
Sr. Member
****
Karma: 7
Posts: 311
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Vienna (Austria - Europe)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 64
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Wien
Online Online
Edison Member
*
Karma: 28
Posts: 1930
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

}
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: December 30, 2012, 09:56:28 am by sven1977 » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Pages: [1]   Go Up
Jump to: