Anfängerfrage - Schalterstellung abfragen und Tasterfunktion auslösen

Hallo,

ich bin noch völlig unerfahren was die Beschaltung und Programmierung des Arduino angeht, muss aber kurzfristig etwas realisieren. Die Ausgangslage ist wie folgt:

Es gibt einen Schalter mit drei Polen A, B und C, der so verdrahtet ist dass er drei Schaltzustände annehmen kann:

  1. A+C sind verbunden
  2. B+C sind verbunden
  3. Keine der drei Pole sind verbunden

Ausserdem habe ich ein Gerät mit zwei Tastern D und E, deren Funktion der Arduino abhängig von den Schalterstellungen übernehmen soll. Dazu müsste der Schaltzustand permanent abgefragt werden, und sobald sich der Schaltzustand ändert soll eine der zwei Tasterfunktionen D oder E durch den Arduino an dem Gerät und ausgelöst werden (eben so als ob man manuell einen von zwei Tastern drücken würden welche an dem Gerät angeschlossen sind). Diese sind wie folgt:

Schaltzustand 1: Tastfunktion D
Schaltzustand 2: Tastfunktion D
Schaltzustand 3: Tastfunktion E

Kann mir jemand sagen wie bzw wo ich die drei Pole des Schalters (A, B, C) am Arduino Uno 3 anschließe, welche Ausgänge des Arduino ich mit den Anschlüssen der Taster am Gerät verbinde und wie ein Sketch dazu prinzipiell aussehen könnte?

Für Tips und Inputs bin ich sehr dankbar!

Viele Grüße, Georg

Haben Sie überprüft, wie die Tasten D und E auf dem Gerät funktionieren? Pullup, Pulldown oder etwas anderes?
Welche Spannung wird auf diesem Gerät verwendet?

Das verstehe ich nicht. Wenn Du Taster mit dem Arduino auswerten willst, sollten das doch Eingänge sein oder liegt Deiner Beschreibung etwas anderes zu Grunde
Dann beschreibe das genauer, auch um welche Gerätre und welche Spannungen es sich handelt.

Gruß Tommy

Dazu musst Du erstmal wissen, wie die Taster des Gerätes intern funktionieren. Da kann man normalerweise nicht einfach Ausgänge des Arduino anschließen.

Ich denke, @hervshahn möchte die momentanen Tasten (die möglicherweise defekt sind) seines Geräts durch seinen 3-Positionsschalter ersetzen. So habe ich das Bedürfnis verstanden.

Kann sein, dann soll er es genauer beschreiben.
Und dann muss er sein Gerät (welches) an diesen Stellen genau durchmessen.
Im Zweifel Reedrelais einsetzen, aber da braucht es mehr Infos vom TO.

Gruß Tommy

Ja, deshalb habe ich Fragen zu seinen Tasten, der Spannung usw. gestellt.

Poste Bilder von den Tastern und Schaltern und einen Schaltplan.

Pol C an GND
Pol B an einen Eingang - Ich nehme mal Digital 2
Pol A an einen anderen Eingang - Ich nehme mal Digital 3

Die Pins werden im setup() mit dem internen Pullup initialisiert, sodass der PIN immer ein gesichertes Potential annimmt.
Ist der Schalter nicht in Mittelstellung, geht ein PIN auf LOW
Ist der Schalter in Mittelstellung gehen beide PIN auf HIGH.

Im Code musst Du Dir den letzten Zustand merken und beim nächsten Umlauf überprüfen, ob sich der Zustand geändert hat.
Darauf Deine Aktion ausführen und den Zustan merken.

Nichts was nicht lösbar ist.

1 Like

Ja, das Einlesen seines Kippschalters ist sicher kein Problem. Die Probleme fangen auf der Ausgangsseite an, wo er scheinbar die Tasterfunktionen eines anderen Gerätes 'bedienen' will.
Aber wie schon erwähnt, erstmal muss @hervshahn mehr Infos liefern, was er eigentlich wirklich will.

Die haben wir alle gestellt. Warten wir mal ab, was da kommt. Vorher ist ja nicht mal Raten sinnvoll.

Gruß Tommy

1 Like

Sehe ich nicht.
Er will nur kein Schalt- sondern ein Tastsignal.
Was er damit macht, ist mir erstmal egal. :wink:

@hervshahn
Hier mal hingerotz* - ohne auf das prellen zu achen, bekommst Du mit jedem Schaltvorgang hoffentlich eine Ausgabe auf dem Seriellen Monitor.

// Forensketch
// https://forum.arduino.cc/

constexpr byte pinA {2};
constexpr byte pinB {3};

constexpr byte pinAactive {0x01};
constexpr byte pinBactive {0x02};
byte mySwitch;
byte lastSwitch;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("\r\nStart...\r\n"));
  pinMode (pinA, INPUT_PULLUP);
  pinMode (pinB, INPUT_PULLUP);
  if (!digitalRead(pinA))
  { lastSwitch = pinAactive; }
  else if (!digitalRead(pinB))
  { lastSwitch = pinBactive; }
}

void  loop()
{
  pinAbfrage();
  checkState();
}

void pinAbfrage()
{
  if (!digitalRead(pinA))
  { mySwitch = pinAactive; }
  else if (!digitalRead(pinB))
  { mySwitch = pinBactive; }
}

void checkState()
{
  if (mySwitch != lastSwitch)
  {
    switch (mySwitch)
    {
      case 0:
        Serial.println(F("Kein Schalter"));
        break;
      case 0x01:
        Serial.println(F("Schalter A"));
        break;
      case 0x02:
        Serial.println(F("Schalter B"));
        break;
    }
    lastSwitch = mySwitch;
  }
}
1 Like

@hervshahn Frage beinhaltet auch die Steuerung der Funktion der Tasten seines externen Geräts.

Eine vollständige Antwort muss das berücksichtigen... Wir können nicht einfach sagen, dass es uns nicht interessiert und ihn sein Arduino oder das andere Gerät beschädigen lassen.

:innocent:

Was ist daran schwer zu verstehen ??

Er hat ein Schiebeschalter den er abfragen will. (Als Programmschalter sozusagen).

Wenn der Schiebeschalter auf Pos-0 ist (nix angeschlossen alles aus) passiert nix.

Wenn der Schiebeschalter auf z.b. Pos-1 ist, wird vermutlich einmalig der Taster an einen anderen Gerät ausgelöst.

Bei einer anderen Stellung halt ein anderer.

Also muss an dem anderen Gerät die beiden Pins des Tasters elektronisch kurzfristig verbunden werden. Ohne die Schaltung zu kennen würde ich das denke ich mit einen Transistor/MoFet/etc. lösen.

Der Ausgangspin schaltet via Transitor/MoFet/etc kurzfristig den Kontakt und das Gerät bildet sich ein das ein Benutzer darauf getippt hat.

Der Druck muss dann in der Software "gemerkt" werden, damit das Teil nicht alle paar Nanosekunden durchschaltet. Es sei denk, der Taster ist eine Morsetaste. :wink: Dann wären viele Schaltvorgänge sinnvoll.

Gruß

Pucki

ps.: Für mich klingt das ganze wie eine Hausaufgabe. "Steuere ein externes Gerät via Programmierschaltung"

Es gibt schon genügend Fragen, die sich immer um Dinge drehen, die vom Code nicht erfasst werden.
Ich kann mich doch nicht erst vergewissern, dass der Fragesteller eine Elektronikausbildung hat :sweat_smile:

Wie kommst Du da drauf?
Habe ich nirgend gelesen.

Hi,

sorry wenn ich das nicht klar genug beschrieben habe, ich versuche es mal etwas detaillierter, habe allerdings keinerlei Schaltunterlagen des Gerätes.

Es geht um ein Effektgerät für Musikinstrumentr, genauer gesagt um einen Leslie-Simulator der in einen Hammond Orgel Clone eingebaut wird. Im Originalzustand hat das Gerät zwei Fuß-Taster mit denen die Geschwindigkeit des Effekts zwischen Schnell und Langsam umgeschaltet wird (Taster D) bzw der Effekt gestoppt wird (Taster E). Da ich nach dem Einbau die Fußschalter nicht mehr bedienen kann und statt dessen einen sog. Hammond Halfmoon Schalter verwenden will sollen die Taster ausgebaut werden und der Arduino bzw. ein an den Arduino angeschlossenes Bauteil die Tasterfunktion auslösen, je nach Schaltzustand des Halfmoon Switch. Im Prinzip soll also einfach nur der jeweilige Tasterkontakt dann kurz geschlossen werden.

Ist das so klarer beschrieben?

Ich glaube dass das Gerät intern mit 5V arbeitet, müsste aber mal schauen ob ich das irgendwo messen kann. Leistungsfähig wird da nichts geschaltet, nur Steuersignale.

Auch für den Sketch hab ich dann noch keine Vorstellung, gibt es da vielleicht ne passende Vorlage die man anpassen kann?

Danke, hab ich erst nach meinem letzten Post gesehen

Bei seiner Beschreibung kann das nur ein Multi-Funktionsschalter sein. Und ich habe da der einfach halt halber ein Schiebeschalter gemacht. Klar kann das auch ein Dreh-/Kipp-/oder was auch immer Schalter sein.

Gruß

Pucki

Es wird besser.

Wichtig wäre zu wissen, welche Volt / mA da fließen, wenn der Fuss-Schalter geschlossen ist.

Gruß

Pucki