Dieses Programm hier ist auf dem Board wohl im Lieferzustand drauf. Oder jedenfalls die für Anfänger einfach übersichtlichere Methode. Damit kann man kurz testen, ob die 8 Relais und die Board LED funktionieren. Alle 8 Relais werden im Abstand von 100ms eingeschalten, dann die Board LED auch ein. danach werden die 8 Relais wieder im 100ms Abstand abgeschalten und zum Schluss auch die Board LED wieder aus. Das läuft im Endlos Betrieb.
Franz
Code: Alles auswählen
#define Relais1 32
#define Relais2 33
#define Relais3 25
#define Relais4 26
#define Relais5 27
#define Relais6 14
#define Relais7 12
#define Relais8 13
#define LED1 23
void setup()
{
pinMode(Relais1, OUTPUT);
pinMode(Relais2, OUTPUT);
pinMode(Relais3, OUTPUT);
pinMode(Relais4, OUTPUT);
pinMode(Relais5, OUTPUT);
pinMode(Relais6, OUTPUT);
pinMode(Relais7, OUTPUT);
pinMode(Relais8, OUTPUT);
pinMode(LED1, OUTPUT);
}
void loop() {
digitalWrite(Relais1, HIGH);
delay(100);
digitalWrite(Relais2, HIGH);
delay(100);
digitalWrite(Relais3, HIGH);
delay(100);
digitalWrite(Relais4, HIGH);
delay(100);
digitalWrite(Relais5, HIGH);
delay(100);
digitalWrite(Relais6, HIGH);
delay(100);
digitalWrite(Relais7, HIGH);
delay(100);
digitalWrite(Relais8, HIGH);
delay(100);
digitalWrite(LED1, HIGH);
delay(100);
digitalWrite(Relais1, LOW);
delay(100);
digitalWrite(Relais2, LOW);
delay(100);
digitalWrite(Relais3, LOW);
delay(100);
digitalWrite(Relais4, LOW);
delay(100);
digitalWrite(Relais5, LOW);
delay(100);
digitalWrite(Relais6, LOW);
delay(100);
digitalWrite(Relais7, LOW);
delay(100);
digitalWrite(Relais8, LOW);
delay(100);
digitalWrite(LED1, LOW);
delay(100);
}
Hier ist ein Programm, das genau das selbe macht, aber der Programm Aufwand deutlich kleiner ist.
.
Code: Alles auswählen
/*
Zum Laden des Programmes, bei Connecting... EN-Taste drücken und halten, GIO Taste drücken und halten,
dann EN-Taste loslassen, dann die GIO-Taste loslassen. Dann, wenn der Ladenvorgang abgeschlossen ist,
die EN-Taste nochmal zum Programm Starten drücken.
*/
byte zaehler = 9;
byte i = 0;
int RelaisEin[10] = {32, 33, 25, 26, 27, 14, 12, 13, 23};
int RelaisAus[10] = {13, 12, 14, 27, 26, 25, 33, 32, 23};
void setup()
{
for (i = 0; i < zaehler; i++)
{
pinMode(RelaisEin[i], OUTPUT);
}
}
void loop() {
//for Schleife zum Relais Steuern 1-8 + LED
for (i = 0; i < zaehler; i++)
{
digitalWrite(RelaisEin[i], HIGH);
delay(100);
}
//for Schleife zum Relais Steuern 8-1 + LED
for (i = 0; i < zaehler; i++)
{
digitalWrite(RelaisAus[i], LOW);
delay(100);
}
}
Ich frage mich jetzt, welches der beiden Programme hier unten besser ist. Im Untersten Programm gibt es nur ein Array zur Ausgabe der Relais-Pin´s. Aber ich kann die LED-Pin nicht mit rein nehmen, weil die zu unterschiedlichen Zeiten geschalten wird. Es werden immer erst die 8 Relais im 100ms Tackt eingeschalten, dann die Board-LED ein, dann die 8 Relais wieder im 100ms Tackt aus, dann als letztes die Board-LED aus. Das ganze 2x weil es ja eine vor Schleife für alles einschalten, und eine vor Schleife für alles aus gibt. Dazu kommt noch im Setup die extra pinMode Zeile für die LED
Das konnte ich mit einem Array nicht bewerkstelligen. Da muss der LED-Pin nicht aus dem Array über die for-Schleife ausgegeben werden, sondern erst die 8 Relais über die for-Schleife und dann der LED-Pin extra. Das ist das untere Programm.
Wenn ich zwei Array´s mache, dann kann ich die Reihenfolge der Relais-Pin´s entsprechend für Rauf und Runter verändern und auch gleich die LED-Pin mit dazu nehmen. Somit spare ich mir die extra Steuerung der LED-Pin, und die pinMode Zeile für die LED. Das spart 5 Zeilen im Programm, dafür aber eine Zeile mehr in der Deklaration, für das zweite Array.
Code: Alles auswählen
/*
Zum Laden des Programmes, bei Connecting... EN-Taste drücken und halten, GIO Taste drücken und halten,
dann EN-Taste loslassen, dann die GIO-Taste loslassen. Dann, wenn der Ladenvorgang abgeschlossen ist,
die EN-Taste nochmal zum Programm Starten drücken.
*/
constexpr uint8_t ausgang[] = {13, 12, 14, 27, 26, 25, 33, 32};
byte zaehler = 8;
int i = 0;
void setup()
{
Serial.begin(9600);
for (i = 0; i < zaehler; i++)
{
pinMode(ausgang[i], OUTPUT);
}
pinMode(23, OUTPUT);
}
void loop() {
//for Schleife zum Relais Steuern 1-8
for (i = 0; i < zaehler; i++)
{
digitalWrite(ausgang[i], HIGH);
delay(100);
}
digitalWrite(23, HIGH);
delay(100);
//for Schleife zum Relais Steuern 8-1
for (i = zaehler; i > 0; i--)
{
digitalWrite(ausgang[i - 1], LOW);
delay(100);
}
digitalWrite(23, LOW);
delay(100);
}