Elektrischer Motor 400V 05kW


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Arduino - Entscheidungen

If - Anweisung

Praktisch in jedem Sketch müssen Entscheidungen getroffen werden. Wenn bestimmte Werte erreicht, Grenzwerte überschritten oder Toleranzen verlassen werden, muss das Programm entsprechend reagieren. Die bekannteste und am häufigsten verwendete Abfrage wird mit der If-Anweisung realisiert. Sobald ein Sketch auf diese Anweisung stößt, wird der Vergleich, der in Klammern angegeben wurde, durchgeführt. Ist das Ergebnis der Abfrage wahr, werden die Anweisungen in den geschweiften Klammern {} ausgeführt. Ist das Ergebnis der Abfrage falsch, wird mit dem Programmcode nach der If-Anweisung fortgesetzt. Somit nehmen die If-Anweisungen einen direkten Einfluss auf die Programmsteuerung.
Hier ein Beispiel mit einer If-Abfrage:


  // ----------------------------------------------------------
  // If-Anweisung


  float Temperatur;
  float Umrechnungsfaktor = 30;
  const int HeizungEinAus = 35;

  void setup() {
    pinMode (HeizungEinAus, OUTPUT);
    Serial.begin(9600);
  }

  void loop() {
    digitalWrite (HeizungEinAus, LOW);
    Temperatur = analogRead(0) / Umrechnungsfaktor;
    Serial.print ("Aktuelle Temperatur beträgt ");
    Serial.print (Temperatur);
    Serial.println (" °C.");
    if (Temperatur < 17)
    {
      digitalWrite (HeizungEinAus, HIGH);
      Serial.println ("Heizung wurde eingeschaltet");
    }
    delay(1000);
  }

  // ----------------------------------------------------------

Hier werden zunächst die im Programm benötigten Größen definiert:
float Temperatur;
float Umrechnungsfaktor = 30;
const int HeizungEinAus = 35;
Die aktuelle Temperatur wird in der Variable Temperatur gespeichert. Der Umrechnungsfaktor ist hier eine beliebige Größe, die als Beispiel eingeführt wurde. In einem "echten Programm" muss diese Variable passend zu den Werten des analogen Eingangs, an dem z.B. ein temperaturabhängiger Widerstand angeschlossen wäre, skaliert werden. Mit
const int HeizungEinAus = 35;
haben wir eine Variable eingeführt, die die Nummer des Pins repräsentiert, mit dem wir eine Heizung ansteuern.
Im void setup() wird der oben definierte Pin als Ausgang deklariert:
pinMode (HeizungEinAus, OUTPUT);
Mit
Serial.begin(9600);
aktivieren wir die Verbindung zu dem seriellen Monitor, um die Ergebnisse auf dem Bildschirm betrachten zu können.
Sobald der eigentliche Sketch startet, wird die Heizung ausgeschaltet
digitalWrite (HeizungEinAus, LOW);
und die aktuelle Temperatur berechnet. Dies geschieht indem wir den Messwert des analogen Eingangs auslesen und durch den Umrechnungsfaktor dividieren:
Temperatur = analogRead(0) / Umrechnungsfaktor;.
Als Ergebnis bekommen wir folgende Meldung:
Aktuelle Temperatur beträgt 22.13 °C.
Der Temperaturwert ist hier natürlich von dem am analogen Eingang eingelesenen Wert abhängig. Anschließend wird die If-Anweisung ausgeführt. Sobald die Temperatur die eingestellte Schwelle unterschreitet, bekommen wir die Meldung
Heizung wurde eingeschaltet
und die Variable HeizungEinAus wird mit dem Wert HIGH überschrieben. Damit wird die Heizung eingeschaltet.
Der Sketch wird im Takt von 1 Sek. wiederholt. Sobald die Temperatur wieder ansteigt und die Schwelle überschreitet, wird die Heizung wieder ausgeschaltet. So funktioniert übrigens eine ganz einfache Zwei-Punkt-Regelung.

If - Else - Anweisung

Die If-Else-Anweisung stellt eine erweiterte Form der If-Anweisung dar. Mit der Anweisung Else wird der If-Anweisung noch eine weitere Aktion hinzugefügt. Der Unterschied besteht darin, dass nach der nicht erfüllten If-Abfrage, das Programm die Anweisungen, die in den geschweiften Klammern {} hinter der Anweisung Else stehen, ausführt. Unser umgeschriebener Sketch sieht jetzt so aus:


  // ----------------------------------------------------------
  // If-Else-Anweisung


  float Temperatur;
  float Umrechnungsfaktor = 30;
  const int HeizungEinAus = 35;

  void setup() {
    pinMode (HeizungEinAus, OUTPUT);
    Serial.begin(9600);
  }

  void loop() {
    Temperatur = analogRead(0) / Umrechnungsfaktor;
    Serial.print ("Aktuelle Temperatur beträgt ");
    Serial.print (Temperatur);
    Serial.println (" °C.");
    if (Temperatur < 17)
    {
      digitalWrite (HeizungEinAus, HIGH);
      Serial.println ("Heizung wurde eingeschaltet");
    }
    else
    {
      digitalWrite (HeizungEinAus, LOW);
    }
    delay(1000);
  }

  // ----------------------------------------------------------

Switch - Case - Anweisung

Bis jetzt wurde unsere Variable "Temperatur" auf zwei Zustände untersucht. Um die Heizung ein- bzw. auszuschalten, wollten wir wissen, ob "Temperatur" über oder unter dem angegebenen Schwellenwert lag. Solche If-Abfragen können wir auch dann anwenden, wenn eine Variable auf mehrere Zustände überprüft werden muss. Doch für solche Fälle gibt es eine viel elegantere Lösung: Die switch-case-Abfrage.
Um die Struktur und Funktionalität einer switch-case-Abfrage zu verdeutlichen, erweitern wir unsere Temperatursteuerung um einen Kühlaggregat. Jetzt wollen wir nicht nur eine Heizung zuschalten, wenn es zu kalt wird, sondern auch einen Kühlaggregat, wenn es zu warm wird.
Ein Sketch, mit dem wir diese Aufgabe erledigen und in dem eine switch-case-Abfrage vorkommt, könnte wie folgt aussehen:


  // ----------------------------------------------------------
  // Switch-Case-Anweisung


  float Temperatur;
  float Umrechnungsfaktor = 30;
  const int HeizungEinAus = 35;
  const int KuehlungEinAus = 36;

  void setup() {
    pinMode (HeizungEinAus, OUTPUT);
    pinMode (KuehlungEinAus, OUTPUT);
    Serial.begin(9600);
  }

  void loop() {
    Temperatur = analogRead(0) / Umrechnungsfaktor;
    Serial.print ("Aktuelle Temperatur beträgt ");
    Serial.print (Temperatur);
    Serial.println (" °C.");
    int IntTemp = Temperatur;
    switch (IntTemp) {
      case 0 ... 16: {
        digitalWrite (HeizungEinAus, HIGH);
        digitalWrite (KuehlungEinAus, LOW);
        Serial.println ("Heizung wurde eingeschaltet");
        break;
      }
      case 17 ... 20 : {
        digitalWrite (HeizungEinAus, LOW);
        digitalWrite (KuehlungEinAus, LOW);
        break;
      }
      case 21 : {
        Serial.println ("Das ist meine bevorzugte Umgebungstemperatur.");
        break;
      }
      case 22 ... 24 : {
        digitalWrite (HeizungEinAus, LOW);
        digitalWrite (KuehlungEinAus, LOW);
        break;
      }
      case 25 ... 35: {
        digitalWrite (HeizungEinAus, LOW);
        digitalWrite (KuehlungEinAus, HIGH);
        Serial.println ("Kühlung wurde eingeschaltet");
        break;
      }
    }
    delay(1000);
  }

  // ----------------------------------------------------------

Kurz vor der Switch-Anweisung taucht die Variable IntTemp auf. Diese Variable ist nur dazu da, den float-Wert der Temperatur in eine Integer-Zahl, mit der die Switch-Anweisung arbeiten kann, umzuwandeln. Es wird anschließend untersucht, im welchen Bereich sich der aktuelle Temperaturwert befindet. Sobald eine Bedingung erfüllt ist, wird der Programmcode in den zugehörigen geschweiften Klammern {} ausgeführt. Mit break wird dann die Switch-Abfrage abgebrochen und nach 1 Sek. erneut ausgeführt.


Arduino_Programmierung




Google-Suche auf MEINE-SCHALTUNG.de :


Doppelte Reihenklemmen auf Hutschiene

Home Impressum Datenschutz