das Multitool
Auf dem Multi-Tool werden 3 Punkte des Arduinos näher betrachtet:
-die LEDs
- der passive Buzzer
-der Servomotor
Vorherige Kenntnisse:
-Tastermatrix
Auf dem Multitool sollen über die Tastermatrix 3 verschiedene Aktionen ausgeführt weren können. Eine Reihe der Matrix (in diesem Fall Reihe1) ist eingeschaltet. Über die verschiedenen Spalten, die durch 'digitalRead' angesprochen werden, werden die 3 If-Schleifen der 3 Tools aktiviert.
If-Schlleife 1 aktiviert die LED-Lichterkette, die durch Auf- und Ablaufen der 4 LEDs eine weihnachtliche Lichterkette immitieren soll.
If-Schleife 2 aktiviert den Buzzer 'sven', der die Opening Melodie von StarWars spielt. hierbei wurden die einzelnen Notenwerte zuvor in Hertz umgewandelt. die Hertzwerte wiederum werden vom Buzzer als Töne ausgegeben. Die Delays machen den Rhythmus
If-Schleife 3 aktiviert den Servomotor. Dieser wird über eine Library gesteuert, dioe zuvor im Setup aktiviert wurde. Die Eingabe der Zahlen in 'servoblau.write(Zahl)' bestimmt, um wie viel Grad der Servo sich im Uhrzeigersin dreht
Zur Schaltung:
#include <Servo.h> //Die Servobibliothek wird aufgerufen. Sie wird benötigt, damit die Ansteuerung des Servos vereinfacht wird.int reihe1=13;
int reihe1=13;
int reihe2=12;
int reihe3=11;
int reihe4=10;
int spalte1=9;
int spalte2=8;
int spalte3=7;
int spalte4=6;
int LED1=5;
int LED2=4;
int LED3=3;
int LED4=2;
int sven=1;
Servo servoblau; //Erstellt für das Programm ein Servo mit dem Namen „servoblau“
void setup()
{ //legt jede Zeile als Output und jede Spalte als Input fest
pinMode (reihe1, OUTPUT);
pinMode (reihe2, OUTPUT);
pinMode (reihe3, OUTPUT);
pinMode (reihe4, OUTPUT);
pinMode (spalte1, INPUT);
pinMode (spalte2, INPUT);
pinMode (spalte3, INPUT);
pinMode (spalte4, INPUT);
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (LED4, OUTPUT);
pinMode (sven, OUTPUT);
servoblau.attach(0); //Das Setup enthält die Information, dass das Servo an der Steuerleitung mit Pin 0 verbunden wird
}
void loop() {//die LEDs sind aus, es sei denn sie werden vom Taster angesprochen
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(reihe1, HIGH);//Reihe 1 ist immer angeschaltet
if(digitalRead(spalte4) == HIGH)//Erhält die Spalte 4 ein Signal, werden die LEDs eingeschaltet
{
digitalWrite(LED1, HIGH);
delay(200);
digitalWrite(LED1,LOW);
delay(200);
digitalWrite(LED2, HIGH);
delay(200);
digitalWrite(LED2,LOW);
delay(200);
digitalWrite(LED3, HIGH);
delay(200);
digitalWrite(LED3,LOW);
delay(200);
digitalWrite(LED4, HIGH);
delay(200);
digitalWrite(LED4,LOW);
delay(2);
}
else//wenn von Spalte 4 kein Signal(HIGH) kommt, bleiben die LEDs aus
{
digitalWrite(LED1, LOW);
}
if(digitalRead(spalte2)==HIGH)//wenn spalte 2 als HIGH ausgelesen wird, wird der Buzzer 'Sven' angesprochen
{
tone(sven,293);//folgende Schaltung (die Notenwerte in Hertz umgewandelt) spielt die ersten 16 Takte des StarWars Openings
delay(100);
noTone(sven);
delay(100);
tone(sven,293);
delay(100);
noTone(sven);
delay(100);
tone(sven,293);
delay(100);
noTone(sven);
delay(100);
tone(sven,391);
delay(400);
noTone(sven);
delay(400);
tone(sven,587);
delay(400);
noTone(sven);
delay(400);
tone(sven,523);
delay(100);
noTone(sven);
delay(100);
tone(sven,466);
delay(100);
noTone(sven);
delay(100);
tone(sven,440);
delay(100);
noTone(sven);
delay(100);
tone(sven,783);
delay(400);
noTone(sven);
delay(400);
tone(sven,587);
delay(400);
noTone(sven);
delay(400);
tone(sven,523);
delay(100);
noTone(sven);
delay(100);
tone(sven,466);
delay(100);
noTone(sven);
delay(100);
tone(sven,440);
delay(100);
noTone(sven);
delay(100);
tone(sven,783);
delay(400);
noTone(sven);
delay(400);
tone(sven,587);
delay(400);
noTone(sven);
delay(400);
tone(sven,523);
delay(100);
noTone(sven);
delay(100);
tone(sven,466);
delay(100);
noTone(sven);
delay(100);
tone(sven,523);
delay(100);
noTone(sven);
delay(100);
tone(sven,440);
delay(400);
noTone(sven);
delay(400);
}
else //bei keinem Signal von Spalte2 bleibt der Buzzer 'Sven' stumm
{
noTone(sven);
}
if (digitalRead(spalte1)==HIGH)
{ //Im loop wird über den write-Befehl 'servoblau.write(Grad)' das Servo angesteuert.
servoblau.write(0); //Position 1 ansteuern mit dem Winkel 0°
delay(3000);
servoblau.write(90); //Position 2 ansteuern mit dem Winkel 90°
delay(3000);
servoblau.write(180); //Position 3 ansteuern mit dem Winkel 180°
delay(3000);
servoblau.write(45); //Position 4 ansteuern mit dem Winkel 45°
delay(3000);
}
}