int ledPin = 13; // LED aus Digitalpin 13
void setup() // wird einmal druchlaufen
{
pinMode(ledPin, OUTPUT); // setzt Pin 13 als Ausgang
}
void loop() // Laufen als Endlosschleife
{
digitalWrite(ledPin, HIGH); // schaltet die LED ein
delay(1000); // Pause fuer 1 Sekunde
digitalWrite(ledPin, LOW); // schaltet die LED aus
delay(1000); // Pause fuer 1 Sekunde
}
Digitaler Eingang
Dies ist die einfachste Form eines Einganges mit nur zwei möglichen Zuständen: ein oder aus. Dieses Beispiel liest einen einfachen Schalter oder Taster an Pin 2 aus. Wenn der Schalter geschlossen ist und der Einganspin HIGH ist wird die LED eingeschaltet.
int ledPin = 13; // Ausgangspin fuer die LED
int inPin = 2; // Eingangspin fuer einen Schalter
void setup()
{
pinMode(ledPin, OUTPUT); // deklariert LED als Ausgang
pinMode(inPin, INPUT); // deklariert Schalter als Eingang
}
void loop()
{
if (digitalRead(inPin) == HIGH) // prüfen ob die der Eingang HIGH ist
{
digitalWrite(ledPin, HIGH); // schaltet die LED ein
delay(1000); // Pause fuer 1 Sekunde
digitalWrite(ledPin, LOW); // schaltet die LED aus
delay(1000); // Pause fuer 1 Sekunde
}
}
Ausgänge mit hoher Stromstärke
Machmal ist es notwendig mehr als die 40 Milliampere der Ausgänge des Arduino zu kontrollieren. In diesem Fall kann ein MOSFET oder Transistor benutzt werden um höhere Stromstärken zu schalten. Das folgende Beispiel schaltet einen MOSFET etwa 5 mal pro Sekunde ein und aus.
Bemerkung: Die Schaltung zeigt einen Motor und eine Schutzdiode, es können aber andere nicht-induktive Ladungen ohne die Verwendung der Diode genutzt werden.
int outPin = 5; // Ausgangspin fuer den MOSFET
void setup()
{
pinMode(outPin, OUTPUT); // setzt Pin5 als Ausgang
}
void loop()
{
for (int i=0; i<=5; i++) // Schleife wird 5 mal durchlaufen
{
digitalWrite(outPin, HIGH); // schaltet MOSFET an
delay(250); // Pause 1/4 Sekunde
digitalWrite(outPin, LOW); // schaltet MOSFET aus
delay(250); // Pause 1/4 Sekunde
}
delay(1000); // Pause 1 Sekunde
}
analoger PWM Ausgang
Pulsweiten Modulation (PWM) ist eine Methode um analoge Ausgänge zu simulieren, indem man die Ausgangsspannung pulsiert. Damit kann man zum Beispiel eine LED heller oder dunkler werden lassen oder später einen Servomotor kontrollieren. Das folgende Beispiel lässt eine LED mit Hilfe einer Schleife langsam heller und dunkler werden.
int ledPin = 9; // PWM Pin fuer die LED
void setup(){} // Kein Setup notwendig
void loop()
{
for (int i=0; i<=255; i++) // aufsteigender Wert für i
{
analogWrite(ledPin, i); // setzt den Helligkeitswert auf i
delay(100); // Pause fuer 100ms
}
for (int i=255; i>=0; i--) // absteigender Wert fuer i
{
analogWrite(ledPin, i); // setzt den Helligkeitswert auf i
delay(100); // Pause fuer 100ms
}
}
Potentiometer Eingang
Mit einem Potentiometer und einem der analog-digital Converter (ADC) Eingänge des Arduinos ist es möglich analoge Werte von 0-1024 zu lesen. Das folgende Beispiel verwendet ein Potentiometer um die Blinkrate einer LED zu kontrollieren.
int potPin = 0; // Eingangspin fuer das Potentiometer
int ledPin = 13; // Ausgangspin fuer die LED
void setup()
{
pinMode(ledPin, OUTPUT); // deklariere ledPin als OUTPUT
}
void loop()
{
digitalWrite(ledPin, HIGH); // schaltet ledPin ein
delay(analogRead(potPin)); // pausiert Program um Wert des Potentiometers
digitalWrite(ledPin, LOW); // schaltet ledPin aus
delay(analogRead(potPin)); // pausiert Program um Wert des Potentiometers
}
Eingang für variable Widerstände
Variable Widerstände umfassen CdS Lichtsensoren, Thermistoren, Flex Sensoren und ähnliches.
Dieses Beispiel nutzt eine Fuktion um den Analogwert auszulesen und seiner Größe entsprechend eine Pause im Programmablauf zu definieren. Dies kontrolliert die Geschwindigkeit nach der eine LED heller und dunkler wird.
int ledPin = 9; // PWM Pin für die LED
int analogPin = 0; // variabler Widerstand auf Analog Pin 0
void setup(){} // kein Setup benoetigt
void loop()
{
for (int i=0; i<=255; i++) // ansteigender Wert fuer 'i'
{
analogWrite(ledPin, i); // setzt die Helligkeit der LED auf Level 'i'
delay(delayVal()); // laenge der Pause aus der Funktion delayVal()
}
for (int i=255; i>=0; i--) // absteigender Wert fuer 'i'
{
analogWrite(ledPin, i); // setzt die Helligkeit der LED auf Level 'i'
delay(delayVal()); // laenge der Pause aus der Funktion delayVal()
}
}
int delayVal()
{
int v; // definert temporaere Variable
v = analogRead(analogPin); // liest den Analogwert aus
v /= 8; // rechnet 0-1024 auf 0-128 um
return v; // gibt das Resultat der Funktion zurueck
}
Servo Output
Hobby-Servos sind eine geschlossene Motoreinheit, die sich in der Regel in einem 180-Grad-Winkel bewegen lassen. Es braucht nur einen Puls der alle 20ms gesendet wird. In diesem Beispiel wird eine servoPulse-Funktion genutzt um das Servo von 10-170 Grad und wieder zurück zu bewegen.
int servoPin = 2; // Servo mit Digital-Pin 2 verbunden
int myAngle; // Drehwinkel des Servos ca 0-180 Grad
int pulseWidth; // Variable der servoPulse-Funktion
void setup()
{
pinMode(servoPin, OUTPUT); // Pin 2 als Ausgang setzen
}
void servoPulse(int servoPin, int myAngle)
{
pulseWidth = (myAngle * 10) + 600; // bestimmt die Verzögerung
digitalWrite(servoPin, HIGH); // setzt den Ausgang auf HIGH
delayMicroseconds(pulseWidth); // Mikrosekunden Pause
digitalWrite(servoPin, LOW); // setzt den Ausgang auf LOW
}
void loop()
{
// Servo startet bei 10 Grad und dreht auf 170 Grad
for (myAngle=10; myAngle<=170; myAngle++)
{
servoPulse(servoPin, myAngle); // sendet Pin und Winkel
delay(20); // Zyklus erneuern
}
// Servo startet bei 170 Grad und dreht auf 10 Grad
for (myAngle=170; myAngle>=10; myAngle--)
{
servoPulse(servoPin, myAngle); // sendet Pin und Winkel
delay(20); // Zyklus erneuern
}
}
0 Antworten auf “Anhang”