Arduino – Aus- und Eingänge

Die Pins auf Arduino-Karten können als digitale oder analoge Ein- oder Ausgänge konfiguriert werden, und es gibt auch verschiedene Kommunikationsanschlüsse. Analoge Arduino-Pins können als digitale Pins verwendet werden.

pinMode () Funktion

Mit der Funktion pinMode () kann ein bestimmter Pin als Ein- oder Ausgang konfiguriert werden. Syntax der Funktion pinMode ():

pinMode(pin, mode)

Pin  – Die Nummer des Pins, dessen Modus Sie einstellen möchten. Der Datentyp ist  int .
Modus  – Dies kann INPUT, OUTPUT oder INPUT_PULLUP sein.

Arduino-Pins sind standardmäßig Eingängen, daher müssen sie nicht als Eingang deklariert werden, es ist jedoch besser, sie mit der Funktion pinMode () auszuführen.

pinMode (pin, INPUT);

Pins mit einer INPUT-Konfiguration, die an nichts angeschlossen sind, können durch elektrische Umgebungsgeräusche beeinträchtigt werden, die zu unerwarteten Änderungen des Pin-Zustands führen können. Aus Stabilitätsgründen muss ein Pull-up-Widerstand installiert werden. Bei Verwendung von Pull-up-Widerständen ist der Eingang standardmäßig auf HIGH eingestellt. Dies kann durch Anschließen eines 10K-Widerstands zwischen dem Eingang und 5V erfolgen. Der INPUT-Modus deaktiviert die Verwendung eines internen Pull-up-Widerstands.

Im INPUT-Modus können wir auch einen Pull-down-Widerstand verwenden. Dies kann mit einem 10K-Widerstand erfolgen, der an Masse (GND) angeschlossen ist. Dann ist unser Eingang standardmäßig niedrig (LOW).

Sie können auch den internen Pull-up-Widerstand (INPUT_PULLUP) verwenden. In diesem Fall ist der Eingang standardmäßig hoch.

pinMode(pin, INPUT_PULLUP);

Mit pinMode () können Sie die Pins als Ausgang (OUTPUT) konfigurieren. Atmega-Pins können bis zu 40 mA (Milliampere) Strom liefern. Dies ist genug Strom, um eine LED zu beleuchten oder einen Transistor zu betreiben, aber es gibt wenig, um Relais oder Motoren zu betreiben. Das Anschließen von Hochstromgeräten an die Ausgangspins kann die Pin-Ausgangstransistoren oder den gesamten Atmega-Chip beschädigen. Sie können zum Schutz Ihrer Pins beitragen, indem Sie die OUTPUT-Pins über einen 470Ω – 1k-Widerstand mit anderen Geräten verbinden.

digitalWrite () Funktion

Wenn der Pin als OUTPUT konfiguriert ist, können Sie mit der   Funktion digitalWrite () HIGH oder LOW darauf schreiben. In diesem Fall wird die Pin-Spannung, wenn der Parameter HIGH angegeben ist, auf die Betriebsspannung der Karte (5 V oder 3,3 V) eingestellt. Wenn LOW verwendet wird, beträgt die Pin-Spannung 0V.

Wenn der Pin als INPUT konfiguriert ist, aktiviert digitalWrite () den internen Pull-up-Widerstand des Eingangs-Pins (HIGH) oder deaktiviert ihn (LOW). Verwenden Sie stattdessen die Funktion pinMode (Pin, INPUT_PULLUP), um den internen Pull-up-Widerstand zu aktivieren. Syntax der Funktion digitalWrite ():

digitalWrite(pin, VALUE);

Pin  – Die Nummer des Pins, dessen Modus Sie einstellen möchten.
VALUE  – HIGH oder LOW.

Sehen wir uns ein Beispiel an. (Pin 13 ist die Bord-LED.)

int Led = 13;

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

digitalRead () Funktion

Der Arduino kann erkennen, ob an einem seiner Kontakte Spannung anliegt. Diese kann mit der Funktion digitalRead () gelesen werden. 

Wenn der Pin als INPUT oder INPUT_PULLUP konfiguriert ist, können Sie mit der   Funktion digitalRead () den Status des Pins lesen. Dies kann HOCH oder NIEDRIG sein.

Bei 5-V-Karten gibt eine Spannung von mehr als 3,0 V einen hohen Logikwert und eine Spannung von weniger als 1,5 V einen niedrigen Logikwert zurück.

Bei 3,3-V-Karten ist eine Spannung von mehr als 2,0 V hoch, während eine Spannung von weniger als 1,0 V ein niedriger logischer Wert ist. Syntax der Funktion digitalRead ():

digitalRead(pin);

Pin  – Die Nummer des Pins, über den Sie lesen möchten.

Ein Beispiel. Wenn die Taste gedrückt wird, leuchtet die LED:

int Led = 13;
int Button = 2;

void setup()
{
  pinMode(Led, OUTPUT);
  pinMode(Button, INPUT_PULLUP);
}
void loop()
{
  bool ButtonValue = digitalRead(Button);
  
  if(ButtonValue == true)
  {
    digitalWrite(Led, HIGH);
  }
  else
  {
    digitalWrite(Led, LOW);
  }
}
Arduino UNO, Taster und LED

analogRead () Funktion

Der Wert eines analogen Sensors ändert sich ständig. Um diese Arten von Sensoren lesen zu können, benötigen wir einen Eingang, der dies verarbeiten kann.

Auf der Arduino-Karte finden Sie Eingänge mit der Bezeichnung „Analog In“. Diese speziellen Pins zeigen nicht nur an, ob Spannung an ihnen anliegt, sondern auch deren Wert. Mit der  Funktion analogRead () kann die Pin- Spannung abgelesen  werden.

Diese Funktion gibt eine Zahl zwischen 0 und 1023 zurück, die eine Spannung zwischen 0 und 5 Volt darstellt. Wenn wir beispielsweise 2,5 V von Pin A0 lesen, beträgt der Wert von analogRead (A0) 512. Die Syntax der Funktion analogRead () lautet:

analogRead(pin);

Pin  – Die Nummer des analogen Pins, über den Sie lesen möchten. (Dies ist auf den meisten Boards, z. B. UNO: A0 – A5, für Mini und Nano A0 – A7, wenn die gewählte Karte Mega ist, dann A0 – A 15 Pins.)

Im folgenden Beispiel wird der Wert eines Potentiometers gelesen und an die serielle Schnittstelle gesendet.

int potmeterPin = A0;
int potmeterValue = 0;

void setup()
{
  Serial.begin(9600);
} 

void loop()
{
  potmeterValue = analogRead(potmeterPin);
  Serial.println(potmeterValue);
  delay(100);
}

analogReference () Funktion

Legt die Referenzspannung für den Analogeingang fest. Dies ist der obere Wert des Eingabebereichs. Die Funktion analogReference gibt eine Zahl zwischen 0 und 1023 zurück. Syntax der Funktion analogReference ():

analogReference(type);

Typ – Sie können einen der folgenden Typen verwenden:

DEFAULT  – Die standardmäßige analoge Referenz. Betriebsspannung von Arduino-Karten (5V oder 3,3V).

INTERN  – Eingebaute Referenz, 1.1 bei ATmega168 oder ATmega328 und 2.56 bei ATmega8 (Arduino Mega nicht verfügbar)

INTERNAL1V1  – Eingebaute 1,1-V-Referenz (nur Mega)

INTERNAL2V56  – Eingebaute 2,56-V-Referenz (nur Mega)

EXTERN – Die an den AREF-Pin angelegte Spannung (nur 0-5 V) wird als Referenz verwendet.

Für die externe Referenzspannung des AREF-Pins können nur Werte zwischen 0 V und 5 V verwendet werden. Wenn Sie eine externe Referenz am AREF-Pin verwenden, müssen Sie die analoge Referenz mithilfe der Funktion analogReference () im Abschnitt setup () auf EXTERNAL setzen, bevor Sie  die  Funktion analogRead () aufrufen . Andernfalls kann die aktive interne Referenzspannung an den AREF-Pin angeschlossen und der Mikrocontroller beschädigt werden. 

Der AREF-Pin auf der Arduino UNO-Karte
Der AREF-Pin auf der Arduino UNO-Karte
Arduino Uno AREF EXTERNAL Beispiel
Arduino Uno AREF EXTERNAL Beispiel

In der obigen Abbildung gezeigten Schaltung stellen wir die AREF-Spannung mit einem Spannungsteiler auf 3,3 V ein. Dies ist die Obergrenze des messbaren Wertes. Verbinden Sie den mittleren Anschluss des Potmeter mit Pin A0, rechts mit GND und links mit 3,3 V. Und ein Beispielcode:

int potmeterPin = A0;
int potmeterValue = 0;

void setup()
{
   Serial.begin(9600);
   analogReference(EXTERNAL);
}

void loop()
{
   potmeterValue = analogRead(potmeterPin);
   Serial.println(potmeterValue);
}

Sie können den mit dem Potmeter eingestellten Wert auf der seriellen Konsole sehen.

analogWrite () Funktion

Die Funktion analogWrite () schreibt einen analogen Wert in die entsprechenden Pins. Dies ist ein konstantes rechteckiges Vorzeichen mit einem Füllfaktor gemäß dem im Parameter angegebenen Wert.

Die Funktion analogWrite () kann beispielsweise verwendet werden, um die Helligkeit von LEDs zu ändern, die Drehzahl von Motoren zu steuern usw. 

BoardPWM-PINSPWM-FREQUENZ
Uno, Nano, Mini3, 5, 6, 9, 10, 11490 Hz (Pins 5 und 6: 980 Hz)
Mega2 – 13, 44 – 46490 Hz (Pins 4 und 13: 980 Hz)

PWM-Pins können auf Arduino-Boards verwendet werden

Syntax der Funktion analogWrite ():

analogWrite(pin, VALUE);

Pin – Die Nummer des Pins, auf den Sie schreiben möchten. (Geeignete Stifte siehe Tabelle oben)
WERT – Arbeitszyklus (Füllfaktor): 0 -255.

Schauen wir uns ein Beispiel an:

int ledPin = 9;
int potmeterPin = A0;
int potmeterValue = 0;

void setup()
{
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  potmeterValue = analogRead(potmeterPin);
  analogWrite(ledPin, potmeterValue / 4);
}

Lesen Sie den Wert des Reglers mit der Funktion analogRead (), teilen Sie den Wert durch vier und schreiben Sie ihn mit der Funktion analogWrite in den ledPin.

Der eingehende Wert muss jedoch durch vier geteilt werden, da der von der Funktion analogRead zurückgegebene Wert zwischen 0 und 1023 liegen kann. Sie können jedoch nur einen Wert zwischen 0 und 255 für die Funktion analogWrite angeben.


Das vielleicht wichtigste Mittel zur Kommunikation mit Arduino-Boards ist die serielle Schnittstelle. Mal sehen, wie es funktioniert.

Serial.begin ()

Bevor Sie die serielle Kommunikation auf Ihrer Arduino-Karte verwenden können, müssen Sie die serielle Schnittstelle initialisieren. Serial.Begin () legt die Datenrate für die serielle Datenübertragung in Bit pro Sekunde (Baud) fest. Dies sollte im Abschnitt void setup () erfolgen.

// Serial.Begin(baud);

void setup()
{
  Serial.Begin(9600);
}

Serial.print ()

Druckt die Daten in lesbarer Form als ASCII-Text auf der seriellen Schnittstelle. Zahlen werden für jede Ziffer in ASCII-Zeichen gedruckt. Float-Typen werden ähnlich wie ASCII-Ziffern gedruckt, standardmäßig mit bis zu zwei Dezimalstellen. Die Bytes werden als einzelnes Zeichen gesendet. Zeichen und Zeichenfolgen werden so gesendet, wie sie sind.

void setup()
{
  Serial.Begin(9600);

  Serial.print(40);              // ausschreibt 40-et
  Serial.print(29.2236);         // Es werden nur 29,22 bis zu zwei Dezimalstellen gedruckt
  Serial.print('H');             // a H karakter
  Serial.print("Hello World");   // und eine string: Hello World
}
void loop()
{

}

Optional können Sie einen zweiten Parameter angeben, um die Ausgabe zu formatieren.

void setup()
{
  Serial.Begin(9600);
  
  Serial.print(100, 0);   // Druckt gemäß ASCII-Tabelle: 40
  Serial.print(40, BIN);  // Druckt gemäß ASCII-Tabelle: 0110 0100 
  Serial.print(40, OCT);  // Druckt gemäß ASCII-Tabelle: 144
  Serial.print(40, HEX);  // Druckt gemäß ASCII-Tabelle: 64
}
void loop()
{

}

Dieser Parameter kann auch für Gleitkommazahlen verwendet werden (float, double). Dies bestimmt die Anzahl der Dezimalstellen.

void setup()
{
  Serial.Begin(9600);
  
  Serial.print(29.2236, 0);  // ausschreibt: 29
  Serial.print(29.2236, 1);  // ausschreibt: 29.2
  Serial.print(29.2236, 4);  // ausschreibt: 29.2236
}
void loop()
{

}

Serial.println ()

Es funktioniert ähnlich. Wie bei Serial.print () besteht der Unterschied am Ende der gedruckten Zeile aus dem Wagenrücklaufzeichen ‚\ r‘ und dem neuen Zeilenzeichen ‚\ n‘. Die nächste Druckwarteschlange beginnt also in einer neuen Zeile. Alle anderen Parameter sind mit der Funktion Serial.print () identisch.

void setup()
{
  Serial.Begin(9600);
  
  Serial.println("Hello World");
}
void loop()
{

}

Die folgende Tabelle zeigt die Pins der seriellen Schnittstelle(n), die für Arduino-Tabellen verwendet werden können.

TABELLEEmpfangsstifteTX-Pins
Uno, Nano, Mini01
Mega0, 15, 17, 191, 14, 16, 18
Serielle Anschlussstifte zur Verwendung auf Arduino-Karten

Ich empfehle zu üben:

Im nächsten Abschnitt werden wir uns mit Variablen und Datentypen befassen.

Der Arduino Mega 2560 Mikrocontroller-Board

Arduino Mega 2560
Werbung – Arduino Mega 2560