Ich stehe gerade etwas auf dem schlauch. Folgendes versuche ich gerade. Für den Anfang soll ein Arduino Mega 2560 2 Relais schalten wenn einer der beiden Schwimmerschalter ausgelöst hat. Der Aufbau soll dazu dienen bei einem Aquarium die Förderpumpen ab zu schalten damit das Technik Becken nicht überläuft. Dabei soll egal sein welcher der Beiden Schalter ausgelöst hat, beide sollen die gleiche Wirkung haben, egal ob einzelne, oder zusammen.
Momentan ist es so das zwar beide Relais Schalten, jedoch nur bei Schalter 1, Schalter 2 ist ohne Funktion und ich frage mich was ich übersehen, oder nicht bedacht habe.
Ich habe versucht die Schaltung mit Fritzing mal so gut wie möglich dar zu stellen, ich hoffe das hilft weiter. Die Widerstände die ich verwendet habe sind 6,3kohm, etwas passenderes zu 10kohm habe ich leider gerade nicht da, laut meiner suche im www sollte das aber funktionieren, 10ner besorge ich mir aber noch für den endgültigen Aufbau. Ich hoffe nicht das es jetzt daran liegt.
Hier mal der sketch
// 8 Relais Shield an Arduino
// In diesem Beispiel schalten Schwimmer Schalter Relais
#define RELAY1 2
#define RELAY2 3
#define RELAY3 4
#define RELAY4 5
#define RELAY5 6
#define RELAY6 7
#define RELAY7 8
#define RELAY8 9
#define schwimmer1 10
#define schwimmer2 11
// variables die sich ändern:
int stateRELAY1 = LOW;
int stateRELAY2 = LOW;
int stateRELAY3 = LOW;
int stateRELAY4 = LOW;
int stateRELAY5 = LOW;
int stateRELAY6 = LOW;
int stateRELAY7 = LOW;
int stateRELAY8 = LOW;
int schwimmer1State = 0; // variable für den schwimmer status
int schwimmer2State = 0;
void setup()
{
// Inizialisiere die Pinn's
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(RELAY5, OUTPUT);
pinMode(RELAY6, OUTPUT);
pinMode(RELAY7, OUTPUT);
pinMode(RELAY8, OUTPUT);
pinMode(schwimmer1, INPUT);
pinMode(schwimmer2, INPUT);
}
void loop()
{
// liest den status von schwimmer1 und schwimmer2:
schwimmer1State = digitalRead(schwimmer1); digitalRead(schwimmer2);
// überprüft ob schwimmer1 ausgelöst hat.
// wenn das so ist, schaltet RELAY1 und RELAY2 an
if (schwimmer1State == HIGH) {
// schaltet RELAY1 aus:
digitalWrite(RELAY1, HIGH); digitalWrite(RELAY2, HIGH);
// überprüft ob schwimmer2 ausgelöst hat.
// wenn das so ist, schaltet RELAY1 und RELAY2 an
if (schwimmer2State == HIGH) {
digitalWrite(RELAY1, HIGH); digitalWrite(RELAY2, HIGH);
}
}
else {
// schaltet RELAY1 aus
digitalWrite(RELAY1, LOW); digitalWrite(RELAY2, LOW);
}
}
Ich bin schon auf der suche nach dem Ergebnis, aber habe noch nichts passendes / funktionierendes gefunden. Was mir auf jedenfalls schon mal aufgefallen ist, ich hoffe das war schon mal ein schritt in die richtige Richtung, das dieser teil des code
Super, jetzt funktioniert es so wie es soll. Ob es der beste weg ist, oder nicht kann ich nicht sagen, aber es funktioniert.
Ich hatte die und, oder vergleiche in separate klammern gesetzt und bekam nur Fehlermeldungen. Nachdem ich in dem Beispiel den oder vergleich sah, war mir klar wo mein Fehler lag. Ich kann zwar noch immer nicht richtig Programmieren und die Syntax ist mir deshalb fremd, aber stück für stück komme ich voran. Hier mal der Code wie ich es jetzt gelöst habe und es funktioniert.
// 8 Relais Shield an Arduino
// In diesem Beispiel schalten Schwimmer Schalter Relais
#define RELAY1 2
#define RELAY2 3
#define RELAY3 4
#define RELAY4 5
#define RELAY5 6
#define RELAY6 7
#define RELAY7 8
#define RELAY8 9
#define schwimmer1 10
#define schwimmer2 11
// variables die sich ändern:
int stateRELAY1 = LOW;
int stateRELAY2 = LOW;
int stateRELAY3 = LOW;
int stateRELAY4 = LOW;
int stateRELAY5 = LOW;
int stateRELAY6 = LOW;
int stateRELAY7 = LOW;
int stateRELAY8 = LOW;
int schwimmer1State = 0; // variable für den schwimmer status
int schwimmer2State = 0;
void setup()
{
// Inizialisiere die Pin's
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(RELAY5, OUTPUT);
pinMode(RELAY6, OUTPUT);
pinMode(RELAY7, OUTPUT);
pinMode(RELAY8, OUTPUT);
pinMode(schwimmer1, INPUT);
pinMode(schwimmer2, INPUT);
}
void loop()
{
// liest den status von schwimmer1 und schwimmer2:
schwimmer1State = digitalRead(schwimmer1);
schwimmer2State = digitalRead(schwimmer2);
// überprüft ob schwimmer1, oder schwimmer2 ausgelöst hat.
// wenn das so ist, schaltet RELAY1 und RELAY2 an
if (schwimmer1State == HIGH || digitalRead(schwimmer2) == HIGH) {
// schaltet RELAY1 aus:
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
}
else {
// schaltet RELAY1 aus
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
}
}
schwimmer1State = digitalRead(schwimmer1);
schwimmer2State = digitalRead(schwimmer2);
if (schwimmer1State == HIGH || digitalRead(schwimmer2) == HIGH) {
Entscheide dich für eine Variante. Entweder mit Zwischenvariablen oder nicht. Eigentlich kannst du die weglassen und direkt digitalRead() in der if-Abfrage machen.
Aber du solltest konsequent sein. Also wenn du sie hast, dann hier auch auf die Variable abfragen und nicht nochmal auslesen.
Ich denke ich habe verstanden was du meinst. Hatte da gar nicht drauf geachtet, da es ja funktionierte, aber so sieht es gleich ordentlicher aus.
// 8 Relais Shield an Arduino
// In diesem Beispiel schalten Schwimmer Schalter Relais
#define RELAY1 2
#define RELAY2 3
#define RELAY3 4
#define RELAY4 5
#define RELAY5 6
#define RELAY6 7
#define RELAY7 8
#define RELAY8 9
#define schwimmer1 10
#define schwimmer2 11
// variables die sich ändern:
int stateRELAY1 = LOW;
int stateRELAY2 = LOW;
int stateRELAY3 = LOW;
int stateRELAY4 = LOW;
int stateRELAY5 = LOW;
int stateRELAY6 = LOW;
int stateRELAY7 = LOW;
int stateRELAY8 = LOW;
int schwimmer1State = 0; // variable für den schwimmer status
int schwimmer2State = 0;
void setup()
{
// Inizialisiere die Pin's
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(RELAY5, OUTPUT);
pinMode(RELAY6, OUTPUT);
pinMode(RELAY7, OUTPUT);
pinMode(RELAY8, OUTPUT);
pinMode(schwimmer1, INPUT);
pinMode(schwimmer2, INPUT);
}
void loop()
{
// überprüft ob schwimmer1, oder schwimmer2 ausgelöst hat.
// wenn das so ist, schaltet RELAY1 und RELAY2 an
if (digitalRead(schwimmer1) == HIGH || digitalRead(schwimmer2) == HIGH) {
// schaltet RELAY1 und 2 an
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
}
else {
// schaltet RELAY1 und 2 aus
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
}
}
So funktioniert es auch, ich hoffe das es so aussehen sollte. Wenn dem so ist, habe ich das jetzt, denke ich, verstanden und kann bei bedarf weitere Funktionen dazu schreiben.