Arduino - E / A-Funktionen

Die Pins auf der Arduino-Karte können entweder als Ein- oder Ausgänge konfiguriert werden. Wir werden die Funktionsweise der Pins in diesen Modi erklären. Es ist wichtig zu beachten, dass ein Großteil der analogen Arduino-Pins genauso konfiguriert und verwendet werden kann wie digitale Pins.

Als EINGANG konfigurierte Pins

Arduino-Pins sind standardmäßig als Eingänge konfiguriert, sodass sie nicht explizit als Eingänge mit deklariert werden müssen pinMode()wenn Sie sie als Eingaben verwenden. Auf diese Weise konfigurierte Pins sollen sich in einem hochohmigen Zustand befinden. Eingangsstifte stellen extrem geringe Anforderungen an die Schaltung, die sie abtasten, was einem Vorwiderstand von 100 Megaohm vor dem Stift entspricht.

Dies bedeutet, dass nur sehr wenig Strom benötigt wird, um den Eingangspin von einem Zustand in einen anderen zu schalten. Dies macht die Pins nützlich für Aufgaben wie die Implementierung eines kapazitiven Berührungssensors oder das Lesen einer LED als Fotodiode.

Als PinMode (Pin, INPUT) konfigurierte Pins, an die nichts angeschlossen ist, oder mit ihnen verbundene Drähte, die nicht mit anderen Schaltkreisen verbunden sind, melden scheinbar zufällige Änderungen des Pin-Zustands, nehmen elektrisches Rauschen aus der Umgebung auf oder koppeln den Zustand kapazitiv eines nahe gelegenen Stiftes.

Pull-up-Widerstände

Pull-up-Widerstände sind oft nützlich, um einen Eingangspin in einen bekannten Zustand zu lenken, wenn kein Eingang vorhanden ist. Dies kann durch Hinzufügen eines Pull-Up-Widerstands (bis + 5V) oder eines Pull-Down-Widerstands (Widerstand gegen Masse) am Eingang erfolgen. Ein 10K-Widerstand ist ein guter Wert für einen Pull-Up- oder Pull-Down-Widerstand.

Verwenden des eingebauten Pull-up-Widerstands mit als Eingang konfigurierten Pins

In den Atmega-Chip sind 20.000 Pull-up-Widerstände eingebaut, auf die über Software zugegriffen werden kann. Auf diese eingebauten Pull-up-Widerstände kann durch Einstellen von zugegriffen werdenpinMode()als INPUT_PULLUP. Dies invertiert effektiv das Verhalten des INPUT-Modus, wobei HIGH bedeutet, dass der Sensor ausgeschaltet ist, und LOW bedeutet, dass der Sensor eingeschaltet ist. Der Wert dieses Pull-Ups hängt vom verwendeten Mikrocontroller ab. Bei den meisten AVR-basierten Karten liegt der Wert garantiert zwischen 20 kΩ und 50 kΩ. Auf dem Arduino Due liegt er zwischen 50 kΩ und 150 kΩ. Den genauen Wert finden Sie im Datenblatt des Mikrocontrollers auf Ihrer Platine.

Wenn Sie einen Sensor an einen mit INPUT_PULLUP konfigurierten Pin anschließen, sollte das andere Ende mit Masse verbunden werden. Bei einem einfachen Schalter zeigt der Pin bei geöffnetem Schalter HIGH und bei gedrücktem Schalter LOW an. Die Pull-up-Widerstände liefern genügend Strom, um eine LED zu beleuchten, die schwach mit einem als Eingang konfigurierten Pin verbunden ist. Wenn LEDs in einem Projekt zu funktionieren scheinen, aber sehr schwach, ist dies wahrscheinlich der Fall.

Dieselben Register (interne Chipspeicherorte), die steuern, ob ein Pin HIGH oder LOW ist, steuern die Pull-up-Widerstände. Folglich wird bei einem Pin, der so konfiguriert ist, dass Pull-up-Widerstände eingeschaltet sind, wenn sich der Pin im INPUT-Modus befindet, der Pin als HIGH konfiguriert, wenn der Pin dann mit pinMode () in einen OUTPUT-Modus geschaltet wird. Dies funktioniert auch in die andere Richtung, und bei einem Ausgangspin, der in einem HIGH-Zustand belassen wird, wird der Pull-up-Widerstand eingestellt, wenn er mit pinMode () auf einen Eingang geschaltet wird.

Example

pinMode(3,INPUT) ; // set pin to input without using built in pull up resistor
pinMode(5,INPUT_PULLUP) ; // set pin to input using built in pull up resistor

Als OUTPUT konfigurierte Pins

Mit PinMode () als OUTPUT konfigurierte Pins sollen sich in einem niederohmigen Zustand befinden. Dies bedeutet, dass sie anderen Schaltkreisen eine erhebliche Strommenge zuführen können. Atmega-Pins können bis zu 40 mA (Milliampere) Strom für andere Geräte / Schaltkreise liefern (positiven Strom liefern) oder sinken (negativen Strom liefern). Dies ist genug Strom, um eine LED hell zu beleuchten (vergessen Sie nicht den Vorwiderstand) oder viele Sensoren zu betreiben, aber nicht genug Strom, um Relais, Magnete oder Motoren zu betreiben.

Der Versuch, Hochstromgeräte über die Ausgangspins zu betreiben, kann die Ausgangstransistoren im Pin beschädigen oder zerstören oder den gesamten Atmega-Chip beschädigen. Dies führt häufig zu einem "toten" Pin im Mikrocontroller, aber die verbleibenden Chips funktionieren immer noch angemessen. Aus diesem Grund empfiehlt es sich, die OUTPUT-Pins über 470Ω- oder 1k-Widerstände mit anderen Geräten zu verbinden, es sei denn, für eine bestimmte Anwendung ist maximaler Strom aus den Pins erforderlich.

pinMode () Funktion

Mit der Funktion pinMode () wird ein bestimmter Pin so konfiguriert, dass er sich entweder als Eingang oder als Ausgang verhält. Es ist möglich, die internen Pull-up-Widerstände im Modus INPUT_PULLUP zu aktivieren. Darüber hinaus deaktiviert der INPUT-Modus die internen Pullups explizit.

PinMode () Funktionssyntax

Void setup () {
   pinMode (pin , mode);
}
  • pin - Die Nummer des Pins, dessen Modus Sie einstellen möchten

  • mode - INPUT, OUTPUT oder INPUT_PULLUP.

Example

int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(button , INPUT_PULLUP); 
   // set the digital pin as input with pull-up resistor
   pinMode(button , OUTPUT); // set the digital pin as output
}

void setup () {
   If (digitalRead(button ) == LOW) // if button pressed {
      digitalWrite(LED,HIGH); // turn on led
      delay(500); // delay for 500 ms
      digitalWrite(LED,LOW); // turn off led
      delay(500); // delay for 500 ms
   }
}

digitalWrite () Funktion

Das digitalWrite()Mit dieser Funktion wird ein HIGH- oder ein LOW-Wert in einen digitalen Pin geschrieben. Wenn der Pin mit pinMode () als OUTPUT konfiguriert wurde , wird seine Spannung auf den entsprechenden Wert eingestellt: 5 V (oder 3,3 V auf 3,3 V-Karten) für HIGH, 0 V (Masse) für LOW. Wenn der Pin als INPUT konfiguriert ist, aktiviert (HIGH) oder deaktiviert (LOW) digitalWrite () den internen Pullup am Eingangspin. Es wird empfohlen, pinMode () auf INPUT_PULLUP zu setzen, um den internen Pull-up-Widerstand zu aktivieren.

Wenn Sie den pinMode () nicht auf OUTPUT setzen und beim Aufrufen von digitalWrite (HIGH) eine LED an einen Pin anschließen, erscheint die LED möglicherweise dunkel. Ohne explizite Einstellung von pinMode () hat digitalWrite () den internen Pull-up-Widerstand aktiviert, der wie ein großer Strombegrenzungswiderstand wirkt.

Funktionssyntax von digitalWrite ()

Void loop() {
   digitalWrite (pin ,value);
}
  • pin - Die Nummer des Pins, dessen Modus Sie einstellen möchten

  • value - HOCH oder NIEDRIG.

Example

int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(LED, OUTPUT); // set the digital pin as output
}

void setup () { 
   digitalWrite(LED,HIGH); // turn on led
   delay(500); // delay for 500 ms
   digitalWrite(LED,LOW); // turn off led
   delay(500); // delay for 500 ms
}

analogRead () Funktion

Arduino kann erkennen, ob an einem seiner Pins eine Spannung anliegt, und diese über die Funktion digitalRead () melden. Es gibt einen Unterschied zwischen einem Ein / Aus-Sensor (der das Vorhandensein eines Objekts erkennt) und einem analogen Sensor, dessen Wert sich kontinuierlich ändert. Um diesen Sensortyp lesen zu können, benötigen wir einen anderen Stifttyp.

Im unteren rechten Teil der Arduino-Platine sehen Sie sechs Pins mit der Aufschrift „Analog In“. Diese speziellen Pins zeigen nicht nur an, ob eine Spannung an sie angelegt ist, sondern auch deren Wert. Mit demanalogRead() Funktion können wir die an einen der Pins angelegte Spannung ablesen.

Diese Funktion gibt eine Zahl zwischen 0 und 1023 zurück, die Spannungen zwischen 0 und 5 Volt darstellt. Wenn beispielsweise eine Spannung von 2,5 V an Pin Nummer 0 angelegt wird, gibt analogRead (0) 512 zurück.

Funktion analogRead () Syntax

analogRead(pin);
  • pin - die Nummer des analogen Eingangspins, von dem gelesen werden soll (0 bis 5 auf den meisten Karten, 0 bis 7 auf dem Mini und Nano, 0 bis 15 auf dem Mega)

Example

int analogPin = 3;//potentiometer wiper (middle terminal) 
   // connected to analog pin 3 
int val = 0; // variable to store the value read

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

void loop() {
   val = analogRead(analogPin); // read the input pin
   Serial.println(val); // debug value
}