Programm verkürzen

Hallo,

möchte gern mehrere Ausgänge gleichzeitig schalten.
Ich schreibe das momentan so:
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(R3, HIGH);
digitalWrite(R4, HIGH);

Meine Frage ist es kann ich diese Zeilen zur einer Zusammenfassen?
Bzw kann ich dafür eine Variable setzen die diese Ausgänge zusammenfasst?

Wenn ja wie mache ich sowas habe im Netz nichts dazu gefunden.

Gruß

Leg ein Array an

uint8_t pins[4] = { 3,4,5,8};

void setup()
{
for(uint8_t i = 0; i < 4; i++) pinMode(pins[i], OUTPUT);
}
void loop()
{
for(uint8_t i = 0; i < 4; i++) digitalWrite(pins[i], HIGH);
}

Ansonsten schau dir Bitmanipulation an. Da sollte man aber dann auch in der Lage sein, Datenblätter der Controller zu lesen, um die genauen Ports/Bits ausfindig zu machen.

Dankeschön

Klappt soweit und die wie verhält sich das wenn ich die Ausgänge nach einer Zeit wieder auf LOW setzen möchte ?

Gruß

wenn die Zeit abgelaufen ist z.B. mit delay oder besser mit millis() wie im Beispiel "BlinkWithoutDelay"
entweder alle zurücksetzen mit

for(uint8_t i = 0; i < 4; i++) digitalWrite(pins[i], LOW);
}

oder wenn nur einzelne Ports geschaltet werden sollen

digitalWrite(pins[1], LOW);

Wobei allerdings darauf geachtet werden muß, das pins[1] nicht den Pin 1 schaltet.
Da pins so definiert wurde

uint8_t pins[4] = { 3,4,5,8};

und ein Array bei 0 beginnt

schaltet pins[1] eben nunmal Pin4!

Gruß Katsu

Danke

Wenn verschiedene Packete geschalten werden sollen
wäre das nur mit Bitmanipulation möglich?

Oder gibt es noch andere Befehle wie uint8_t ?

Gruß

Besorg dir ein C/Arduino-Buch. Das sind Basics. uint8_t ist nichts anderes als ein unsigned char oder byte (0...255).

Bit-Manipulation verwendet man vor allem in folgenden Fällen:

1.) Wenn das Setzen oder Einlesen eines Pins schneller als ca. 4µs gehen muss
2.) Wenn man mehrere Pins wirklich gleichzeitig Setzten oder Einlesen muss

Es gibt aber auch ein paar Anwendungen wo es nur den Code schöner macht. z.B. DIP-Schalter oder BCD-Schalter einlesen und daraus eine Variable machen. Das muss nicht unbedingt gleichzeitig eingelesen werden und das kann man auch mit der Arduino Syntax machen, aber es ist aufwendiger als einfach bis zu 8 Pins auf einmal einzulesen.