2 Ausgänge mit einen Taster

Hallo Ardoino Freunde

Ich Bitte euch um Hilfe, bin echt schon verzweifelt und weis nicht mehr weiter.

Wie wäre hier der richtige Befehl, wenn man mit einen Taster 2 Ausgänge schalten will, es sollen aber nachher mit anderen taster die Relais einzeln auch geschaltet werden können.

1 Taster = 2 Ausgänge
Die gleichen Ausgänge auch mit anderen 2 Taster getrennt schaltbar machen.

Einzeln geht alles aber nur zusammen nicht

Versuche das schon Peinliche 2 Wochen :blush:

Hallo,

Hier ist ein beispiel,

val = digitalRead(inPin)
digitalWrite(OutPin1, val);
digitalWrite(OutPin2, val);

Krishna

condor01 beschreib bitte bessere Deine Schwierigkeiten. So können wir gezielt die Probleme angehen und Dir erklähren wies geht.
Grüße Uwe

Danke Uwefed

wenn ich mehrere Relais ansteuern möchte und jeden Relais einen Taster zuweise Funktioniert das super. Ich möchte gerne mit einen zusätzlichen Taster 2 von den Relais die schon einen anderen Taster zugewiesen sind schalten lassen.
Jedes mal wenn ich das versuche geht dann der ursprüngliche Taster nicht mehr (reagiert nicht).

Wie lassen sich Taster und die dazugehörigen Ausgänge mischen? Hardware ist denke ich nicht drann schuld, ich kann jede Funktion durch Spannung am Sockel belibig ansteuern.

Danke für eure Hilfe :slight_smile:

Eigentlich ist es kein Problem das zu machen was Du da sagst.

Taster 1 -> Ausgang 1 ein
Taster 2 ->Ausgang 2 ein
Taster 2 ->Ausgang 1 und 2 ein.
Taster 3 ->Ausgang 1 und 2 ein.

Schick doch mal den Sketch.
Grüße Uwe

  int Input1 = 1;
  int Input2 = 2;
  int Output1 = 3;
  int Output2 = 4;
  int value1, value2;
  
  void setup()
  {
    pinMode(Input1,INPUT);
    pinMode(Input2,INPUT);
    pinMode(Output1,OUTPUT);
    pinMode(Output1,OUTPUT);
  }
  
  void loop()
  {
    value1  = digitalRead(Input1);
    value2  = digitalRead(Input2);
    
     if( value1 == HIGH && value2 == LOW)
      digitalWrite(Output1,HIGH);
      else
      digitalWrite(Output1,LOW);
      
      if( value2 == HIGH && value1 == LOW)
      digitalWrite(Output2,HIGH);
      else
      digitalWrite(Output2,LOW);
      
      if( value1 == HIGH && value2 == HIGH)
      {
        digitalWrite(Output1,HIGH);
        digitalWrite(Output2,HIGH);
      }
      else
      {
        digitalWrite(Output1,LOW);
        digitalWrite(Output2,LOW);        
      }
    
  }

Ist das ok?.

Krishna

Schwierig zu sagen, was das Problem ist, ohne den Code zu sehen. Denke aber, dass die Eingabe und Ausgabe nicht wirklich abgetrennt ist und sich deshalb die verschiedenen Eingaben gegenseitig beeinflussen.

Ziemlich einfach lassen sich solche Sachen realisieren, indem du eine Variable machst, in der die Relaiszustände gespeichert werden. Eine Funktion fragt diese Variable bei jedem Loopdurchgang ab und stellt die Relais dementsprechend ein. Die Variable selbst kann dann von beliebig vielen anderen Funktionen verändert werden, ob nun ein Taster mehrere Zustände ändert oder was auch immer.

melden, wenn Beispiel erwünscht

Hallo,

If (Taster 1 == HIGH)
{
digitalWrite(Relais1, HIGH);
}

If (Taster 2 == HIGH)
{
digitalWrite(Relais2, HIGH);
}
If (Taster 3 == HIGH)
{
digitalWrite(Relais1, HIGH);
digitalWrite(Relais2, HIGH);
}

ist es das, was Du meinst?
Gruß und Spaß
Andreas

P.S.
Hallo Uwe
verrate mir den Trick mit Taster 2

 if( value1 == HIGH && value2 == LOW)
      digitalWrite(Output1,HIGH);
      else
      digitalWrite(Output1,LOW);

Mal eine Wahrheitstabelle:
Output1 HIGH wenn
value1 == HIGH && value2 == LOW

Output1 LOW wenn
value1 == LOW && value2 == LOW
value1 == HIGH && value2 == HIGH
value1 == LOW && value2 == LOW

also HIGH in einem Fall und LOW in 3 Fällen.

Das gleiche gilt für die anderen IF's.

Du mußt die LOW-setzen-Bedingung auch explizit ausschreiben und nicht durch else machen.

SkobyMobil:
P.S.
Hallo Uwe
verrate mir den Trick mit Taster 2

Der Trick ist daß die Tastatur 102 Tasten (geschätzt und nicht gezählt) hat man aber wenn man den Text kopiert und nicht verändert immernoch eine "2" dasteht anstatt die gedachte "3". :wink:
Habs ausgebessert.

Grüße Uwe

Kleines Beispiel zu meinem Ansatz. Anstatt direkt if (tasterabfrage) -> Relais = high oder low würde ich das ganze auftrennen:

int relaisPin [] = {x, y, z …};				// deklariert ein Array mit den Pins, an die deine Relais angeschlossen sind
byte relaisState = B00000000;				// deklariert Variable, in der festgehalten wird, ob das Relais angezogen werden soll oder nicht. Jede Ziffer der Binärzahl steht für ein Relais, 1 = eingeschaltet, 0 = ausgeschaltet, von rechts nach links.

void setup {
	// setup
}

void loop () {
	
	poll();									// hierfür eine lustige Funktion schreiben, die deine Taster abfragt und gegebenenfalls in einer Variablen speichert
	if (Taste 1 gedrückt) {							// hier wird auf die Tasteninputs reagiert und die Variable relaisState verändert. Somit kannst du so viele Taster, wie du willst, so viele Dinge tun lassen, wie du willst.
		relaisState = relaisState ^ B00000100;		// z.B. wird hier Relais Nr. 3 umgeschaltet
	}
	if (Taste 2 gedrückt) {
		relaisState = relaisState ^ B00000011;		// da werden Relais 1 und 2 umgeschaltet.
	}										// so kannst du auch Infraroteingaben, Mikrofongeräusche und alles Mögliche auch nachträglich noch einbauen, die deine Relaisvariable beeinflussen können.
	if (Notfall) {
		relaisState = B00000000;					// oder Sonstiges, wie eine Fehlerbehandlung, die die Relais in jedem Fall ausschalten soll
	}
	setRelais ();								// Das ist die Funktion, die bei jedem Durchlauf von Loop die Relais gemäss der Variable relaisState einstellt

}

void setRelais () {								// Die Funktion zum Schalten der Relais
	for (int i = 0; i < anzahl Relais; i++) {				// geht ein Relais nach dem anderen durch,
		if (bitRead(relaisState, i) == 1) {				// prüft, ob das Bit an der Stelle, die zum Relais gehört 1 ist (1. Relais = bit ganz rechts usw.)
			digitalWrite(relaisPin[i], HIGH);			// und schaltet es gegebenenfalls ein
		}
		else {								// steht da ne 0
			digitalWrite(relaisPin[i], LOW);			// wirds abgeschaltet
		}
	}
}

edit: sorry, das mit dem Formatieren des Codes und den Kommentaren hab ich noch nicht so im Griff :wink:

Phuu, da sieht man wieder: aller Anfang ist schwehr

Vielen Dank für die Hilfe an alle, ich werde das sobald wie möglich testen.