Home » Arduino » Semester 01

Category Archives: Semester 01

Themen

S1 :: 1.1. Wir lassen es blinken

jede programmiersprache kennt ein sogenanntes “Hello World” programm. beim arduino ist es das blinken der eingebauten LED.

void setup() {
  
}

void loop() {
  
}

dies ist das minimalistischte programm welches der Arduino versteht. setup und loop müssen in jedem Arduino programm enthalten sein

// Setup
// Wird einmal beim starten ausgeführt
void setup() {
  pinMode(13, OUTPUT);     // Setze den Modus von pin interneLED auf OUTPUT(Ausgabe)
}

// Loop
// Läuft immer wieder durch (Unendlich lang)
void loop() {
  digitalWrite(13, HIGH);       // Schalte pin roteLED ein (HIGH oder 1)
  delay(1000);                  // Warte 1000 Milisekunden = 1 Sekunde
  digitalWrite(13, LOW);        // Schalte pin roteLED aus (LOW oder 0)
  delay(500);                   // Warte 500 Milisekunden = 1 Sekunde
}

S1 :: 1.2. Blinken

folgende anweisungen/befehle werden verwendet:

du weisst nun, dass ein arduino programm

int roteLED = 6; // Variable um überal auf den pin der roteLED zugreifen zu können
int grueneLED = 8;

// Setup
// Wird einmal beim starten ausgeführt
void setup() {
  pinMode(roteLED, OUTPUT);     // Setze den Modus von pin roteLED auf OUTPUT(Ausgabe)
  pinMode(grueneLED, OUTPUT);
  digitalWrite(grueneLED, HIGH); // die grüne LED wird eingeschaltet
}

// Loop
// Läuft immer wieder durch (Unendlich lang)
void loop() {
  digitalWrite(roteLED, HIGH);  // Schalte pin roteLED ein (HIGH oder 1)
  delay(1000);                  // Warte 1000 Milisekunden = 1 Sekunde
  digitalWrite(roteLED, LOW);   // Schalte pin roteLED aus (LOW oder 0)
  delay(500);                  // Warte 1000 Milisekunden = 1 Sekunde
}

du sprichst wahrscheinlich deutsch und eventuell noch eine andere sprache. der arduino versteht die programmiersprache c++. c++ existiert seit dem jahre 1979. die älteste noch verwendete programmiersprache heisst fortran und wurde 1954 entworfen. hier findest du mehr infos zur geschichte der programmiersprachen.

lass uns das programm zeile für zeile durchgehen:

  • 1: hier wird die variable roteLED deklariert. das deklarieren einer variable bedeutet, dass ihr typ definiert wird und optional ein anfangswert gesetzt wird. der type int sagt aus, dass wir eine ganzzahl im bereich -2.147.483.648 bis 2.147.483.647 darin speichern können. der anfangswert ist 6, da unsere rote LED mit dem pin 6 verbunden ist.
  • 2: grueneLED wird deklariert und erhält den anfangswert 8
  • 3: leerzeile damit wir das programm leichter lesen können
  • 4: // dies bedeutet: kommentar, anmerkung. mach ausreichend davon gebrauch. du wirst sehen wie leicht mensch vergisst
  • 6: setup-block. ein block beginnt mit { und endet mit }. die anzahl der öffnenden klammern muss genau der anzahl der schliessenden klammern entsprechen.
  • 7: konfiguriert den spezifizierten pin als input oder output. der pin an welchem die rote LED angeschlossen ist, wird als ausgabe gesetzt.
  • 8: die variable grueneLED hat einen wert von 8. am pin 8 ist unsere grüne LED angeschlossen
  • 9: die grüne LED wird eingeschaltet. digitalWrite hat 2 parameter: die pinnummer und [HIGH/LOW]. HIGH bedeutet, dass 5Volt gesetzt werden. dadurch kann die LED leuchten. bei LOW, wird die spannung auf 0Volt gesetzt und die LED ist somit aus.
  • 14: loop-block beginnt und endet in zeile 19. mit der tastenkombination STRG+T kannst du die richtigen einrückungen erzeugen. dies erleichtert das lesen eines programms sehr. später wirst du programme schreiben, welche verschatelte logische blöcke enthalten
  • 16: unterbricht das programm für die als parameter angegebene zeit (in millisekunden). (es gibt 1000 millisekunden in einer sekunde.)
  • im loop: roteLED wird eingeschaltet ==> 1000msec wird gewartet ==> roteLED aus ==> 500msec warten ==> roteLED an ==> warten & immer so weiter. bis der arduino keinen strom mehr hat oder du ein anderes programm rauflädtst

 

S1 :: 1.3. mehr blinken

schaltung


folgende anweisungen/befehle werden verwendet:

code

int roteLED = 6; // Variable um überal auf den pin der roteLED zugreifen zu können
int grueneLED = 8;

// Setup
// Wird einmal beim starten ausgeführt
void setup() {
  pinMode(roteLED, OUTPUT);     // Setze den Modus von pin roteLED auf OUTPUT(Ausgabe)
  pinMode(grueneLED, OUTPUT);
  digitalWrite(grueneLED, HIGH); // die grüne LED wird eingeschaltet
}

// Loop
// Läuft immer wieder durch (Unendlich lang)
void loop() {
  digitalWrite(roteLED, HIGH);  // Schalte pin roteLED ein (HIGH oder 1)
  delay(1000);                  // Warte 1000 Milisekunden = 1 Sekunde
  digitalWrite(roteLED, LOW);   // Schalte pin roteLED aus (LOW oder 0)
  delay(500);                  // Warte 1000 Milisekunden = 1 Sekunde
}

du sprichst wahrscheinlich deutsch und eventuell noch eine andere sprache. der arduino versteht die programmiersprache c++. c++ existiert seit dem jahre 1979. die älteste noch verwendete programmiersprache heisst fortran und wurde 1954 entworfen. hier findest du mehr infos zur geschichte der programmiersprachen.

lass uns das programm zeile für zeile durchgehen:

  • 1: hier wird die variable roteLED deklariert. das deklarieren einer variable bedeutet, dass ihr typ definiert wird und optional ein anfangswert gesetzt wird. der type int sagt aus, dass wir eine ganzzahl im bereich -2.147.483.648 bis 2.147.483.647 darin speichern können. der anfangswert ist 6, da unsere rote LED mit dem pin 6 verbunden ist.
  • 2: grueneLED wird deklariert und erhält den anfangswert 8
  • 3: leerzeile damit wir das programm leichter lesen können
  • 4: // dies bedeutet: kommentar, anmerkung. mach ausreichend davon gebrauch. du wirst sehen wie leicht mensch vergisst
  • 6: setup-block. ein block beginnt mit { und endet mit }. die anzahl der öffnenden klammern muss genau der anzahl der schliessenden klammern entsprechen.
  • 7: konfiguriert den spezifizierten pin als input oder output. der pin an welchem die rote LED angeschlossen ist, wird als ausgabe gesetzt.
  • 8: die variable grueneLED hat einen wert von 8. am pin 8 ist unsere grüne LED angeschlossen
  • 9: die grüne LED wird eingeschaltet. digitalWrite hat 2 parameter: die pinnummer und [HIGH/LOW]. HIGH bedeutet, dass 5Volt gesetzt werden. dadurch kann die LED leuchten. bei LOW, wird die spannung auf 0Volt gesetzt und die LED ist somit aus.
  • 14: loop-block beginnt und endet in zeile 19. mit der tastenkombination STRG+T kannst du die richtigen einrückungen erzeugen. dies erleichtert das lesen eines programms sehr. später wirst du programme schreiben, welche verschatelte logische blöcke enthalten
  • 16: unterbricht das programm für die als parameter angegebene zeit (in millisekunden). (es gibt 1000 millisekunden in einer sekunde.)
  • im loop: roteLED wird eingeschaltet ==> 1000msec wird gewartet ==> roteLED aus ==> 500msec warten ==> roteLED an ==> warten & immer so weiter. bis der arduino keinen strom mehr hat oder du ein anderes programm rauflädtst

S1 :: 1.4 windrad

Wie andere hohe Masten müssen auch Windkraftanlagen ein rotes Blinklicht an ihrer Spitze haben, um Flugzeuge zu warnen. Da die Spitze des Mastes bei einem Windrad aber nicht wirklich die Spitze der Gefahrenzone ist, blinkt ihr rotes Licht in einem besonderen Rhythmus: 1 Sekunde an, dann 0,5 Sekunden aus, dann wieder 1 Sekunde an, dann aber 1,5 Sekunden aus.
Programmiere so ein Dauerblinklicht und speichere es unter Aufgabe_4_6_Windrad.

// arduino kurs 2022
//  https://arduino.langheiter.at/4-6
//  4.6

void setup() {
  pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(500);
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1500);
}

S1 :: 1.5 wechselblinker

Schließe eine zweite LED an den Arduino an. Lass beide LEDs abwechselnd blinken.

/* arduino kurs 2022
  https://arduino.langheiter.at/4-7
  4.7 */

void setup() {
  pinMode(D11, OUTPUT);
  pinMode(D13, OUTPUT);

}
void loop() {
  digitalWrite(D11, HIGH);
  digitalWrite(D13, LOW);
  delay(1000);
  digitalWrite(D11, LOW);
  digitalWrite(D13, HIGH);
  delay(700);
}

S1 :: 2.1. lauflicht

methoden

folgende anweisungen/befehle werden verwendet:

schaltung

code1

schreibe ein Programm welches die LEDs von links nach rechts einzeln ein und ausschaltet und dann wieder retour

/*
   an den PINs 2-9 sind LEDs angeschlossen
*/
int pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9};
int zaehler = 0;
int dauer = 33;

void setup() {
  for (zaehler = 0; zaehler < 8; zaehler++) {
    pinMode(pinArray[zaehler], OUTPUT);
  }
}

void loop() {
  // dein code
}
rider-01

code2

je nach potentiometer stellung bewegt sich das lauflicht schnell oder langsam
/*
   an den PINs 2-9 sind LEDs angeschlossen
*/
int ledPin[] = {2, 3, 4, 5, 6, 7, 8, 9};
int anzahlLED = 8;
int richtung = 1;
int aktivePosition = 0;
int letztePosition = 0;
int dauer = 33;
int poti = 0;

void setup() {
  Serial.begin(115200);
  for (int i = 0; i < 8; i++) {
    pinMode(ledPin[i], OUTPUT);
  }
  debugText();
}

void loop() {
  poti = analogRead(0);  // am A0-pin
  dauer = map(poti, 0, 1023, 20, 333);  // 
  debugText();

  letztePosition = aktivePosition;
  aktivePosition += richtung;
  digitalWrite(ledPin[aktivePosition], HIGH);
  digitalWrite(ledPin[letztePosition],   LOW);
  if (aktivePosition >= anzahlLED - 1 || aktivePosition < 1) {
    richtung *= -1;
  }
  delay(dauer);
}

void debugText() {
  if (aktivePosition == 0) {
    Serial.println("-----------------------------------------------");
  }
  Serial.print(aktivePosition);
  Serial.print("\t richtung: ");
  Serial.print(richtung);
  Serial.print("\t\t");
  Serial.print(poti);
  Serial.print(" :: ");
  Serial.println(dauer);
}
lauflicht

S1 :: 3.1. ampel

versuche eine ampelsteuerung zu programmieren

/* arduino kurs 2022
  https://arduino.langheiter.at/7-1
  7.1
  */

void setup() {
  pinMode(D11, OUTPUT);
  pinMode(D13, OUTPUT);

}
void loop() {
  digitalWrite(D11, HIGH);
  digitalWrite(D13, LOW);
  delay(1000);
  digitalWrite(D11, LOW);
  digitalWrite(D13, HIGH);
  delay(700);
}

S1 :: 4.1 RGB-LEDs

RGB steht für Rot Grün Blau. Eine RGB-LED verwendet drei Leuchtdioden in den Farben Rot, Grün und Blau und mischt diese inunterschiedlichen Intensitäten zu verschiedenfarbigem Licht.

wir wollen über die serielle schnittstelle eine eingabe realisieren und unsere RGB-LED in unterschiedlichen farben leuchten lassen.
beispieleingabe über serielle console: 1,150 == unsere RGB-LED leuchtet dadurch intensiv grün
gib folgendes ein:
0,1
1,1
2,1
dadurch werden alle 3 farben der RGB-LED ganz wenig zum leuchten gebracht und du kannst die 3 leuchtpunkte erkennen

schaltung

code1

/*
 * eingabe: ledNr, helligkeit
 * zb: 1, 255
 * dadurch leuchtet die RGB-LED intensiv grün 
 */
 
int LEDs[] = {11, 10, 9};

void setup() {
  Serial.begin(115200);
  for (int i = 0; i < 3; i++) {
    pinMode(LEDs[i], OUTPUT);
  }
}

void loop()
{
  if (Serial.available() > 0) {
    int ledNr = Serial.readStringUntil(',').toInt();
    int hell = Serial.readStringUntil('\n').toInt();

    Serial.print(ledNr);
    Serial.print(" :: ");
    Serial.println(hell);
    analogWrite(LEDs[ledNr], hell);
  }
}

code2

S1 :: 4.2 RGB-LED

  1. Baue die Schaltung von unten nach. Stülpe einen Tischtennisball über die RGB-LED, um die Farben besser erkennen zu können. Lass die RGB-LED nacheinander in den Grundfarben rot, grün und blau leuchten.
    Hinweis: Im setup-Teil benötigst du für jeden der drei LED-Anschlüsse ein pinMode(…,OUTPUT)
  2. Mit der RGB-LED lassen sich auch andere Farbeindrücke erzeugen. Lasse die RGB-LED gelb leuchten und notiere alle Farbeindrücke, die auch noch möglich sind. Tipp: Additive Farbmischung (der Farbkreis unten rechts hilft dir weiter).
  3. Stell dir vor, du hättest eine LED mit vier verschiedenen Farben. Wie viele verschiedene Farbeindrücke sind hier möglich? Kann man das auch schnell berechnen?
// arduino kurs 2022
// https://arduino.langheiter.at/5-1
// 5.1.1

void setup() {
  pinMode(D9, OUTPUT);
  pinMode(D10, OUTPUT);
  pinMode(D11, OUTPUT);

}
void loop() {
  digitalWrite(D9, HIGH);
  delay(900);
  digitalWrite(D9, LOW);
  digitalWrite(D10, HIGH);
  delay(900);
  digitalWrite(D10, LOW);
  digitalWrite(D11, HIGH);
  delay(900);
  digitalWrite(D11, LOW);
}
// arduino kurs 2022
// https://arduino.langheiter.at/5-1
// 5.1.2

void setup() {
  pinMode(D9, OUTPUT);    // rot
  pinMode(D10, OUTPUT);   // grün
  pinMode(D11, OUTPUT);   // blau
}

void loop() {
  // gelb 
  digitalWrite(D9, HIGH);
  digitalWrite(D10, HIGH);
  digitalWrite(D11, LOW);
  delay(1900);

  // lila
  digitalWrite(D9, HIGH);
  digitalWrite(D10, LOW);
  digitalWrite(D11, HIGH);
  delay(1900);
}
[arduino]

S1 :: 5.1. fotowiderstand

methoden

schaltung

code1

code2