Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
uc-welt:gscheiduino:10-batterie [2016/01/05 15:06] Hannes Jochriemuc-welt:gscheiduino:10-batterie [2024/02/06 09:43] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-[[uc-welt:gscheiduino:09-schwellwert|← Kapitel 9: Schwellwertschalter]] | [[uc-welt:gscheiduino:00-uebersicht|↑ Übersicht]]  | [[uc-welt:gscheiduino:11-| →]]+[[uc-welt:gscheiduino:09-schwellwert|← Kapitel 9: Schwellwertschalter]] | [[uc-welt:gscheiduino:00-uebersicht|↑ Übersicht]]  | [[uc-welt:gscheiduino:11-hysterese|Kapitel 11: Hysterese →]]
  
 ====== Kapitel 10: Übungsaufgabe Batterietester ====== ====== Kapitel 10: Übungsaufgabe Batterietester ======
Zeile 17: Zeile 17:
  
 ===== Zusätzliche Funktionen ===== ===== Zusätzliche Funktionen =====
 +
 +==== if-else if-else ====
  
 Damit man die Aufgabe einfacher lösen kann erweitern wir vorher noch unser if-else-then-Statement. Es gibt nämlich nicht nur wenn-dann-sonst sondern diese Anweisung kann weiter verschachtelt werden: Damit man die Aufgabe einfacher lösen kann erweitern wir vorher noch unser if-else-then-Statement. Es gibt nämlich nicht nur wenn-dann-sonst sondern diese Anweisung kann weiter verschachtelt werden:
Zeile 37: Zeile 39:
 Der Ablauf sieht also so aus: Wenn Bedingung1 zutrifft wird Code1 ausgeführt. Ist Bedingung1 **false** wird Code1 übersprungen und die nächste Abfrage wird gestartet: Wenn Bedingung2 **true** ist, wird Code2 ausgeführt. Wenn diese Bedingung auch nicht zutrifft, wird Code3 ausgeführt. Der Ablauf sieht also so aus: Wenn Bedingung1 zutrifft wird Code1 ausgeführt. Ist Bedingung1 **false** wird Code1 übersprungen und die nächste Abfrage wird gestartet: Wenn Bedingung2 **true** ist, wird Code2 ausgeführt. Wenn diese Bedingung auch nicht zutrifft, wird Code3 ausgeführt.
  
-Zusätzlich lernen wir noch zwei kombinierte Vergleiche für die Bedingung:+==== Variablen ====
  
-^ Operator ^ Funktion ^ +Zusätzlich lernen wir noch einen ganz wichtigen Punktwenn wir fortgeschrittene Programme wollen: **Variablen**
-| a >= b | Überprüftob a größer oder gleich b ist | +
-| a <= b | Überprüft, ob a kleiner oder gleich b ist |+
  
-Hier ein Beispiel:+Variablen sind etwas total tolles. Wie der Name schon sagt sind sie variabel, das heißt, ihr Wert ist nicht fest vorgegeben wie etwa bei einem #define.
  
-^Bedingung^Ergebnis^ +Wir verwenden in unserem Beispiel eine Variable, um den Wert von analogRead zu speichern.
-| 10 < = 11 | true | +
-| 3 > = 4 | false | +
-| 42 < = 42 | true | +
-| 41 < = 42 | true |+
  
-Damit können Lücken in der Abfrage sehr einfach vermieden werden.+Damit wir die Variable verwenden können, müssen wir sie ganz oben bei den #defines definieren:
  
 +<code c>
 +int analogwert = 0;
 +</code>
 +
 +Nun wird für diese Variable ein Speicherbereich im RAM des Prozessors reserviert. Damit keine zufälligen Daten im Speicherbereich stehen belegen wir diesen bei der Definition mit dem Wert "0".
 +
 +Nun können wir in unserem Code der Variable Werte zuweisen, das funktioniert so:
 +
 +<code c>
 +analogwert = 123;  // Der Wert 123 wird zugewiesen
 +analogwert = analogRead(ANALOGPIN); // Der gemessene Wandlerwert wird in die Variable geschrieben
 +
 +// Der Wert kann auch gelesen werden:
 +if(analogwert < 100)
 +{
 +}
 +</code>
 +
 +<note tip>Wenn wir zum Beispiel einen Wandlerwert des Analogeingangs öfter im Code benötigen, können wir ihn ganz am Anfang unserer loop()-Funktion in die Variable schreiben und dann mit der Variable weiterarbeiten.</note>
 +
 +Der komplette Code sieht dann so aus:
 +
 +<code c kapitel10_variable.ino>
 +#define LED_ROT 13
 +#define LED_GRUEN 11
 +#define ANALOGPIN A0
 +
 +int analogwert = 0;
 + 
 +void setup()
 +{
 +  pinMode(LED_ROT, OUTPUT);   // Pin auf Ausgang
 +  pinMode(LED_GRUEN, OUTPUT); // Pin auf Ausgang
 +  pinMode(ANALOGPIN, INPUT);  // Pin auf Eingang
 +}
 + 
 +void loop()
 +{
 +  analogwert = analogRead(ANALOGPIN);
 +  if(analogwert>613)
 +  {
 +    digitalWrite(LED_ROT, HIGH);
 +    digitalWrite(LED_GRUEN, LOW);
 +  }
 +  else
 +  {
 +    digitalWrite(LED_ROT, LOW);
 +    digitalWrite(LED_GRUEN, HIGH);
 +  }
 +}
 +</code>
 ===== Aufgabenstellung ===== ===== Aufgabenstellung =====
  
-Die Aufgabe sieht nun wie folgt aus:+Die Aufgabe lautet wie folgt:
  
   * Wenn die Batterie leer ist, soll die rote LED leuchten   * Wenn die Batterie leer ist, soll die rote LED leuchten
Zeile 66: Zeile 113:
  
 Zur Kontrolle gibt es hier wieder [[uc-welt:gscheiduino:10-batterie-loesung|die Musterlösung]]. Zur Kontrolle gibt es hier wieder [[uc-welt:gscheiduino:10-batterie-loesung|die Musterlösung]].
 +
 +Bei dieser Aufgabe und beim Schwellwertschalter von [[uc-welt:gscheiduino:09-schwellwert|Kapitel 9]] kann es zu Problem am Umschaltpunkt kommen. Welche das sind lernen wir in:
 +
 +[[uc-welt:gscheiduino:11-hysterese|Kapitel 11: Hysterese]]