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
  Led will nicht bergfrei 2 1.139 23.01.2020 13:27
Letzter Beitrag: hotsystems
  Mal geht das kompilieren mal nicht ???? MarkZero0815 12 587 06.01.2020 10:34
Letzter Beitrag: Tommy56
  Temperatur mit nrf24 übertragen jgrothe 19 8.622 01.01.2020 16:55
Letzter Beitrag: hotsystems
  Programm läuft auf UNO aber nicht auf ATTINY85 Diwo13 55 2.359 17.12.2019 17:45
Letzter Beitrag: Diwo13
  Auth Failed wenn ArduinoOTA.setPasswordHash benutzt wird Hoffmakl 9 610 26.11.2019 19:02
Letzter Beitrag: Hoffmakl
  AT90CAN Interrupt wird nicht ausgelöst slsb02 5 443 19.11.2019 15:04
Letzter Beitrag: slsb02
  Nebelmaschine: Programmteile funktionieren nicht ChrisTastic 11 802 15.11.2019 09:08
Letzter Beitrag: hotsystems
  Nextion und Arduino kommunizieren nicht alpenpower 7 605 04.11.2019 10:36
Letzter Beitrag: GuaAck
  Anführungszeichen mit Variable dazwischen Stagneth.Alexander 4 448 27.10.2019 09:57
Letzter Beitrag: Stagneth.Alexander
  Button funktioniert nicht trotz korrekter Schaltung Schneggl 3 498 12.10.2019 08:17
Letzter Beitrag: Schneggl

Gehe zu:


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