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
  Library Ethernet: Nicht zu compilieren GuaAck 5 152 22.02.2021 17:31
Letzter Beitrag: Tommy56
  von delay auf millis umgestellt, klappt nur nicht. Servo Geschwindigkeit einstellen. gutschy 8 263 21.02.2021 15:22
Letzter Beitrag: gutschy
  MMega2560-Clone läßt sich nicht programmieren kpc 8 355 08.02.2021 09:50
Letzter Beitrag: hotsystems
  If-Schleife wird nicht mehr durchlaufen LK2567 2 227 05.02.2021 21:20
Letzter Beitrag: LK2567
  Tasterabfrage funktioniert nicht Moehn 4 335 05.02.2021 15:23
Letzter Beitrag: Moehn
  64Bit Variable? mega-hz 18 638 03.02.2021 16:17
Letzter Beitrag: Tommy56
  Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll. generic_user492 3 272 26.01.2021 14:11
Letzter Beitrag: MicroBahner
  Arduino Uno+ Ethernetshield W5100 wird in Fritz Box nicht erkannt Justus S. 14 553 23.01.2021 13:39
Letzter Beitrag: Justus S.
  Die && Verknuepfung von zwei Schaltern auf ESP8266 will nicht. gutschy 6 366 22.01.2021 22:25
Letzter Beitrag: hotsystems
  Zähler zählt nicht wonk 14 611 21.01.2021 20:26
Letzter Beitrag: wonk

Gehe zu:


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