lehrkraefte:blc:informatik:ffprg2017:l2:l2

This is an old revision of the document!


Standard-Form:

for (int i=0; i<10; i++) {
   // irgendwas mit i
}

Genauer: for(Initialisierung; Pre-Loop-Condition; Post-Loop-Operation);

Die Variable(n), die im For-Loop initialisert wird (werden), sind nur im drauf folgenden Block sichtbar! Sonst davor deklarieren:

for (int i=0; i<10; i++) {
  if (i==5) {
    break; // loop abbrechen
  }
}
Serial.println(i); // Fehler, i nicht deklariert, da nur im loop gültig.
//
// Abhilfe:
int i=0;
for (;i<10; i++) { // leere Initialisierung
   // bla, bla, break, ...
}
Serial.println("Abbruch mit i=");
Serial.print(i);

Schreiben Sie keinen solchen Code! Der ist nur dazu da, die Mechanik der For-Schlaufe in C++ besser zu verstehen.

void setup() {
  Serial.begin(115200);
}
 
void loop() {
  Serial.println("--------8><------------");
  for (int i=0; Serial.print(i), Serial.println("<5?"), i<5; Serial.print(i), Serial.println("++"),i++) {
    Serial.print("im Loop mit i=");
    Serial.println(i);
  }
  Serial.println();
  delay(2000);
 
  for (int i,j=0; j<5; i<4 ? i++ : (i=0,j++)) {
    Serial.print("i=");
    Serial.print(i);
    Serial.print(" j=");
    Serial.println(j);
  }
  delay(3000);
}
if (bedingung) {
  // tu was
}
 
if (bedingung) {
  // tu was
} else {
  // anderes
}
 
if (bedingung) {
  // tu was
} else if (andere bedingung) {
  // tu was anderes
} else if (noch andere bedingung) {
  // tu noch was anderes
} else {
  // wenn alles nicht wahr war
}
&& und (der zweite Ausdruck wird nur ausgewertet wenn der erste Ausdruck wahr ist)
|| oder (der zweite Ausdruck wird nur ausgewertet wenn der erste Ausdruck falsch ist)

Typ bool kann false oder true sein.

Andere Werte sind true, wenn diese nicht null sind.

true wird zu 1 konvertiert, wenn als Zahl aufgefasst.

int i=true;  // i wird 1
bool ok=42;  // ok wird true;
Serial.println(ok);  // Zeigt 1 an.
bool nk=0;   // nk wird false;
if (42) {
  // immer wahr
}

Sehr kompakt, aber schwer zu lesen. Einsatz wie Gewürz.

  int a = (bedingung) ? resultatWennWahr : resultatWennFalsch;
  int a=19, b=5;
  int rest = a % b;  // liefert 4, Rest der Division 19/5
  a=-19;
  rest = a % b;  // liefert -4. Erklärung: Integer-Division rundet immer zu Null hin!, D.h. (-19)/5 ergibt -3, Rest -4.
  • Erst obiges Studieren, Codes ausprobieren, verstehen, abändern, Fragen stellen.

Primzahlen

Schreiben Sie einen Sketch, der Primzahlen ausgibt (ohne obere Grenze).

Studieren Sie dazu, falls nötig, die Arduino-Dokumentation zum for-loop, der if-Schleife und dem Modulo-Operator %.

Perfekte Zahlen

Finden Sie Zahlen, die gleich der Summe ihrer Teiler sind (sich selbst natürlich ausgeschlossen). Beispiel: 6=1+2+3. Gegenbeispiel: 8!=1+2+4.

Immer mit Vorwiderstand (oder danach, spielt keine Rolle). Typischerweise 220 $\Omega$.

  • Langes Bein: Anode, Plus Pol, Do chunnt d'Spannig ane
  • Kurzes Bein (und Abschliff auf dem Diodenring): Kathode, Minus Pol

LED auf Port 2 blinken lassen

Machen.

LED auf Port 2 dimmen

Eine LED kann gedimmt werden, indem man diese ganz schnell ein- und ausschaltet. Je nach Anteil der Zeit, während der die LED angeschaltet ist, erscheint diese heller oder dunkler.

Schreiben Sie ein Programm, das die LED schön “an- und ausdimmt”.

Beachten Sie, dass unser Helligkeitsempfinden nicht linear ist. Eine gute Variante besteht darin, den Anteil der “An-Zeit” quadratisch ansteigen zu lassen.

LED mit analogWrite dimmen

Dazu muss die LED auf einen der Ports 3,5,6, 9,10,11 angeschlossen werden. Lesen Sie dazu die Arduino-Dokumentation.

Knight Rider simple

1 Widerstand hinter allen LEDs auf GND reicht dafür. Lassen Sie die LED hin- und her blinken.

Knight Rider classy

Lassen Sie LED sanft ein- und ausschlaten (dimmen).

  • lehrkraefte/blc/informatik/ffprg2017/l2/l2.1503586298.txt.gz
  • Last modified: 2017/08/24 16:51
  • by Ivo Blöchliger