
Die digitalen und die analogen Pins des Arduinos sind in drei Gruppen aufgeteilt:


Funktionen wie digitalWrite() und digitalRead() sind relativ langsam in der Ausführung und manchmal werden Programme mit vielen Ein- oder Ausgängen komplex und schwer überschaubar.Deshalb ist es oft übersichtlicher die Pins mithilfe der Ports zu definieren und zu schalten.
Es existieren drei sogenannte Register:
| Register | Funktion |
|---|---|
| DDR(D,B,C) | Pins als INPUT = 0 oder als OUTPUT = 1 definieren |
| PORT(D,B,C) | Pins als HIGH = 1 oder als LOW = 0 festlegen |
| PIN(D,B,C) | gibt den Zustand der Pins an, die im DDR-Register auf Input gesetzt wurden |
Das Register wird jeweils mit dem Namen des Ports (D, B oder C) ergänzt.
Beim Zugriff auf die Ports wird jeweils ein Bit gesetzt. Sein Wert ist entweder 1 = an, oder 0 = aus
Beispiele:
Digitale Pins 7, 6, 5, 4 und 3 als OUTPUT setzen
DDRD = B11111000;
Digitale Pins 7, 6, 5, 4 und 3 auf HIGH setzen:
PORTD = B11111000;
Taster an Pin 13 als INPUT setzen
DDRB = B00100000;
PULL_UP-Widerstand an Pin 13 einschalten
PORTB = B00100000;

Beispiel: Wechselblinker mit Ports
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | void setup() { // Pins 7 und 5 als OUTPUT definieren DDRD = B10100000; } void loop() { // LED an Pin 7 einschalten PORTD = B10000000; delay(1000); // alle LEDs ausschalten PORTD = B00000000; // LED an Pin 5 einschalten PORTD = B00100000; delay(1000); // alle LEDs ausschalten PORTD = B00000000; } |

Beispiel: Ampel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | void setup() { // Pins 7 bis 5 als OUTPUT definieren DDRD = B11100000; } void loop() { // LED an Pin 5 (rot) einschalten PORTD = B00100000; delay(5000); // LED an Pin 5 und Pin 6 (rot/gelb) einschalten PORTD = B01100000; delay(1000); // LED an Pin 7 (grün) einschalten PORTD = B10000000; delay(3000); // LED an Pin 6 (gelb) einschalten PORTD = B01000000; delay(1000); } |
Einzelne Bits werden mit den Operatoren « eine Position nach links und » eine Position nach rechts verschoben.
Nach rechts schieben:

PORTD = PORTD » 1;
PORTD = PORTD » 1;
PORTD = PORTD » 1;
PORTD = PORTD » 1;
PORTD = PORTD » 1;
Nach links schieben:

PORTD = PORTD « 1;
PORTD = PORTD « 1;
PORTD = PORTD « 1;
PORTD = PORTD « 1;
PORTD = PORTD « 1;

Der Parameter ~ kehrt den Wert eines Bits um:
1 2 3 4 5 6 7 | // LEDs an den Pins 7 5 3 leuchten PORTD = B10101000; // Werte umkehren, aus 0 wird 1 und aus 1 wird 0 PORTD = ~PORTD; // PORTD hat jetzt den Wert B01010111 // -> Die LEDs an den Pins 6 4 leuchten (Pins 2 bis 0 sind nicht belegt) |