INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
int variable wird nicht in Schleife übertragen
11.02.2020, 14:23 (Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2020 14:26 von ha0248.)
Beitrag #1
int variable wird nicht in Schleife übertragen
Grüß euch ihr Fachleute,
als Anfänger habe ich mich an ein kompexes Projekt gewagt. Der folgende Sketch soll ein Geschwindigkeitssignal lesen und mit dieser Geschwindigkeit eine Pumpe und ein Steuerventil ansteuern. Es läuft auch alles, bis zur While Schleife. Dort soll eine int Variable abgefragt werden, ob sich die Geschwindigkeit geändert hat. Aber in der int Varible steht immer die Zahl 2 aus dem Anfang des Sketches. Die vielen Serial.prints habe ich eingefügt zur Kontolle.l
Weiß jemand einen Rat, was ich da falsch gedacht habe bzw. mache.


Code:
#include <stdio.h>
#include <math.h>

int pin1 = 7;
int pin2 = 4;
int pin3 = A0;
int pin4 = 5;
unsigned long T;
double f;
int Set = 0;
int Aus = 0;
int Reset = 0;
int ref = 1;
int refalt = 2;

void setup()
{
  Serial.begin(9600);
  pinMode(pin1, INPUT);
  pinMode(pin2, INPUT);
  pinMode(pin3, INPUT);
  pinMode(pin4, OUTPUT);
}

void loop() {
  T = pulseIn(pin1, HIGH) + pulseIn(pin1, LOW); //Geschwindigkeit einlesen
  if (T == 0) Serial.println("Timeout.");
  else
  { f = 1 / (double)T;                          //umrechnen in Hz
    f = (f * 1e6);
    int ref = (int)(f + .5);
    int refalt = (int)(f + .5);
    Serial.println(f);
    Serial.println(ref);
  }

  { Set = digitalRead(pin2);                    
    if (Set == LOW)Serial.println("Timeoutset"); //GRA Set gedrückt?
    else
    { digitalWrite(12, HIGH);
      Serial.println("Pumpe1");   //dann soll Pumpe1 gestartet werden
      analogWrite(pin4, ref);
    }

     while (digitalRead(pin3) == LOW);    //Geschwindigkeit Änderung prüfen und ausgeben
     int ref = (int)(f + .5);
     if (ref > refalt)analogWrite(pin4, refalt);
     else if (ref < refalt)analogWrite(pin4, refalt);
     Serial.println(ref);
     Serial.println(refalt);


    { Aus = digitalRead(pin3);
      if (Aus == HIGH)                 //Set auflösen durch Reset und Bremslicht
      {
        Serial.println("Timeoutaus");
      }
      else
      {
        Set = 0;
      }
    }
  }

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2020, 14:32
Beitrag #2
RE: int variable wird nicht in Schleife übertragen
Wenn Du die Variablennamen nennst, mit denen Du Probleme hast, wird es für uns einfacher.

Dein Code enthält viele unnötige {}, die Dir das Leben evtl. schwer machen.

Weiterhin hast Du 2 bis 3 mal ref und refalt. Da solltest Du Dich schlau machen, wie der Gültigkeits- und Sichtbarkeitsbereich von Variablen ist.
Bis dahin solltest Du jeden Variablennamen nur einmal verwenden.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2020, 14:59
Beitrag #3
RE: int variable wird nicht in Schleife übertragen
Ich befürchte, dass er sich der Tatsache, dass er verschiedene Variable mit dem gleichen Namen verwendet, garnicht bewußt ist.

Wenn Du den Wert der Variable 'refAlt' ändern willst, darfst Du da kein 'int' davorschreiben, sonst legst Du wieder eine weitere (lokale) Variable mit dem gleichen Namen an.
Also nicht:
Code:
int ref = (int)(f + .5);
int refalt = (int)(f + .5);
sondern
Code:
ref = (int)(f + .5);
refalt = (int)(f + .5);

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2020, 15:01 (Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2020 15:06 von ha0248.)
Beitrag #4
RE: int variable wird nicht in Schleife übertragen
[quote='ha0248' pid='67465' dateline='1581427431']
Grüß euch ihr Fachleute,
als Anfänger habe ich mich an ein kompexes Projekt gewagt. Der folgende Sketch soll ein Geschwindigkeitssignal lesen und mit dieser Geschwindigkeit eine Pumpe und ein Steuerventil ansteuern. Es läuft auch alles, bis zur While Schleife. Dort soll eine int Variable abgefragt werden, ob sich die Geschwindigkeit geändert hat. Aber in der int Varible steht immer die Zahl 2 aus dem Anfang des Sketches. Die vielen Serial.prints habe ich eingefügt zur Kontolle.l
Weiß jemand einen Rat, was ich da falsch gedacht habe bzw. mache.


Code:
#include <stdio.h>
#include <math.h>

int pin1 = 7;
int pin2 = 4;
int pin3 = A0;
int pin4 = 5;
unsigned long T;
double f;
int Set = 0;
int Aus = 0;
int Reset = 0;
int ref = 1;
int refalt = 2;

void setup()
{
  Serial.begin(9600);
  pinMode(pin1, INPUT);
  pinMode(pin2, INPUT);
  pinMode(pin3, INPUT);
  pinMode(pin4, OUTPUT);
}

void loop() {
  T = pulseIn(pin1, HIGH) + pulseIn(pin1, LOW); //Geschwindigkeit einlesen
  if (T == 0) Serial.println("Timeout.");
  else
  { f = 1 / (double)T;                          //umrechnen in Hz
    f = (f * 1e6);
    int ref = (int)(f + .5);
    int refalt = (int)(f + .5);
    Serial.println(f);
    Serial.println(ref);
  }

  { Set = digitalRead(pin2);                    
    if (Set == LOW)Serial.println("Timeoutset"); //GRA Set gedrückt?
    else
    { digitalWrite(12, HIGH);
      Serial.println("Pumpe1");   //dann soll Pumpe1 gestartet werden
      analogWrite(pin4, ref);
    }

     while (digitalRead(pin3) == LOW);    //Geschwindigkeit Änderung prüfen und ausgeben
     int ref = (int)(f + .5);
     if (ref > refalt)analogWrite(pin4, refalt);
     else if (ref < refalt)analogWrite(pin4, refalt);
     Serial.println(ref);
     Serial.println(refalt);


    { Aus = digitalRead(pin3);
      if (Aus == HIGH)                 //Set auflösen durch Reset und Bremslicht
      {
        Serial.println("Timeoutaus");
      }
      else
      {
        Set = 0;
      }
    }
  }

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2020, 15:04
Beitrag #5
RE: int variable wird nicht in Schleife übertragen
Danke für die schnellen Antworten. "ref" ist die int Variable für die neue Geschwindigkeit die in"T" immer neu eingelesen und dann in Hz umgewandelt wird, dann 2 stellig in die int Veriable ref gespeichert wird. "refalt" ist für die alte Geschwindigkeit mit der "ref" verglichen werden soll. In "refalt" soll eine Geschwindigkeit stehen, die am Anfang des Sketch in "refalt" gespeichert wird und und nur nach Druck auf "AUS" wieder neu gefüllt werden soll. Und diese "refalt" macht mir den ganzen Kummer.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2020, 15:07
Beitrag #6
RE: int variable wird nicht in Schleife übertragen
Lies Dir die Antworten noch mal durch. Erst wenn Du sie beide verstanden hast, wirst Du weiter kommen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2020, 15:11
Beitrag #7
RE: int variable wird nicht in Schleife übertragen
(11.02.2020 14:59)MicroBahner schrieb:  Ich befürchte, dass er sich der Tatsache, dass er verschiedene Variable mit dem gleichen Namen verwendet, garnicht bewußt ist.

Wenn Du den Wert der Variable 'refAlt' ändern willst, darfst Du da kein 'int' davorschreiben, sonst legst Du wieder eine weitere (lokale) Variable mit dem gleichen Namen an.
Also nicht:
Code:
int ref = (int)(f + .5);
int refalt = (int)(f + .5);
sondern
Code:
ref = (int)(f + .5);
refalt = (int)(f + .5);

Dies hatte ich, glaube ich, schon mal probiert. Aber ich werds noch mal probieren und Sketch überarbeiten eingedenk eurer Antworten. Danke Dieter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2020, 15:17
Beitrag #8
RE: int variable wird nicht in Schleife übertragen
Ich halte das Lernen der Grundlagen für effektiver, als das Probieren.
Es gibt sehr gute Beispiele in der IDE.

Evtl. hilft Dir diese Lektüre dabei.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Simple if Bedingung funktioniert nicht (Anfänger) Maxcruiser 12 166 Gestern 16:12
Letzter Beitrag: hotsystems
  Hochladen eines Sketches funktioniert nicht otti123 29 2.568 05.09.2020 15:33
Letzter Beitrag: hotsystems
  While Schleife FoxFactoy 8 649 01.08.2020 14:58
Letzter Beitrag: Tommy56
  Uno startet nicht j.klomfass 4 517 08.07.2020 10:09
Letzter Beitrag: j.klomfass
  millis Schleife bleibt hängen Cubicany 10 912 28.06.2020 18:39
Letzter Beitrag: Tommy56
  HC-12 verschiede Variable übertragen Harry 33 9.135 21.06.2020 20:09
Letzter Beitrag: Tommy56
Photo SIM800l Variable Telefonnummer zuweisen huber5093 18 1.127 15.06.2020 23:07
Letzter Beitrag: georg01
  Arduino Programm funktioniert auf nano nicht Arduino DMX Master 10 1.284 15.06.2020 13:07
Letzter Beitrag: Arduino DMX Master
  DMX Addresirung funktionirert nicht Arduino DMX Master 24 1.609 14.06.2020 15:38
Letzter Beitrag: Tommy56
  Arduino IDE läuft nicht mehr Rainer2 12 1.387 10.06.2020 12:04
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste