Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
uc-welt:gscheiduino:10-batterie [2016/01/05 14:53] Hannes Jochriemuc-welt:gscheiduino:10-batterie [2016/01/06 17:43] Hannes Jochriem
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 ==== 
 + 
 +Zusätzlich lernen wir noch einen ganz wichtigen Punkt, wenn wir fortgeschrittene Programme wollen: **Variablen** 
 + 
 +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. 
 + 
 +Wir verwenden in unserem Beispiel eine Variable, um den Wert von analogRead zu speichern. 
 + 
 +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 ===== 
 + 
 +Die Aufgabe lautet wie folgt: 
 + 
 +  * Wenn die Batterie leer ist, soll die rote LED leuchten 
 +  * Wenn die Batterie gebraucht ist, soll die gelbe LED leuchten 
 +  * Wenn die Batterie ok ist, soll die grüne LED leuchten 
 + 
 +Wenn diese Aufgabe gelöst ist, können wir damit Batterien testen indem wir die zwei Kabel wie im Bild gezeigt an die Batterie halten.
  
-^ Operator ^ Funktion ^ +Um das Ganze ohne Batterie zu testenkönnen wir auch wieder das Poti wie in [[uc-welt:gscheiduino:08-analoginputs#praxis|Kapitel 8]] verwenden. Wenn wir es auf Anschlag gegen den Uhrzeigersinn drehensollte die rote LED leuchten. Bei langsamen drehen im Uhrzeigersinn leuchtet dann die gelbe und danach die grüne LED.
-| a >= b | Überprüftob a größer oder gleich b ist | +
-| a <= b | Überprüftob a kleiner oder gleich b ist |+
  
-Hier ein Beispiel:+Zur Kontrolle gibt es hier wieder [[uc-welt:gscheiduino:10-batterie-loesung|die Musterlösung]].
  
-^Bedingung^Ergebnis^ +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:
-| 10 <= 11 | true | +
-| 3 >= 4 | false | +
-| 42 <= 42 | true | +
-| 41 <= 42 | true |+
  
-Damit können Lücken in der Abfrage vermieden werden.+[[uc-welt:gscheiduino:11-hysterese|Kapitel 11: Hysterese]]