Mehere Schalter zusammen verwenden

Hallo zusammen,

Ich bin hier gerade ein bisschen am verzweifeln... Wir haben über die Uni ein Arduino Projekt, für das ich mehrere push buttons in Reihe schalten will, sodass sie jeweils wenn man sie drückt, bestimmte LEDs an oder aus machen. Zusätzlich wollte ich eigentlich einen "Hauptschalter" mit dem ich alle LEDs ausschalten kann. Ist das überhaupt möglich?
Ich bin leider ganz neu in Arduino und verstehe vieles noch nicht... Ich bekomme immer nur die einzelnen Schritte hin (mehrerer Schalter verwenden, einen Schalter, der umschalten kann) aber ich kann die beiden Sachen nicht verbinden... Einen Hauptschalter habe ich noch gar nicht hinbekommen

Vielleicht ist ja jemand so nett und wäre mir bereit zu helfen, ich wäre wirklich unendlich dankbar!

Und noch eine kleine Frage am Ende: schaffe ich es irgendwie, mehrere LEDs in Reihe zu schalten? Bei mir funktioniert das ab 2 LEDs nicht mehr

Viele Grüße
Mascha

Da solltest du mal ein Schaltbild posten, damit wir sehen, wie du es schalten willst.
Wenn mehrere Taster in Reihe geschaltet sind, müssen alle gedrückt werden, damit Strom fließen kann.

Und hier kommt es darauf an, mit welcher Spannung du die Leds betreiben möchtest. Bei 5 Volt funktionieren tatsächlich max. 2 Leds.

Schalter in Reihe ist blöd. Jeder einzelne Schalter an einen PIN des Arduinos. Dein Hauptschalter auch an einen. Mehr als zwei LEDs kannst du nur betreiben, wenn du eine höhere, externe Spannung mit einem Treiber benutzt.
Den Rest macht ein von dir zu entwickelndes Programm.

Poste mal die Aufgabenbeschreibung im Original.

Hallo
Ganz sicher wären ein paar Grundregeln aus der Physik / Elektrotechnik ganz hilfreich. Eigendlich sollst du das noch parat haben, so lange kann es noch nicht her sein.

Reihenschaltung = und
Parallel = oder

Gilt für Taster und auch für deine LEDs. Achtung Summenströme beachten
Heinz

Wow vielen Dank für die schnellen Antworten!!
Ich habe hier mal ein Schaltbild aus dem Internet mit den Schaltern, die jeweils einzelne LEDs an und ausschalten können (Quelle: Controlling LEDs with Multiple Push Button Using Arduino). So stelle ich mir das auch vor, nur dass ich vier "normale" Schalter wollte und eine, der den ganzen Stromkreis kappt. Da verstehe ich aber partout nicht, wie man diesen anschließen müsste oder würde man den ganz normal anschließen und nur über den Code bestimmen, dass dieser die Stromverbindung komplett unterbricht?
Beim Code aus der Quelle des Schaltbildes sind die Schalter nicht zum an und ausmachen, sondern wirken nur, wenn diese gedrückt werden. Ist es einfach möglich, den Code so umzuändern, dass diese als An- und Ausschalter funktionieren?

Ich verstehe ehrlich gesagt momentan wirklich noch nur die Grundzüge des Arduinos, deshalb sorry, dass ich so viel so blöd nachfragen muss...

Ich habe leider keine genaue Aufgabenstellung, da die einzige Vorgabe das Arbeiten mit Arduino war. Wir sind eigentlich Architekturstudenten und das Arduino dient nur zur Unterstützung unseres Projekts in einer Ausstellung. Dafür wollten wir mehrere LEDs einzeln an und ausschalten können.

Wenn das mit mehreren LEDs gleichzeitig mit einem Schalter bedienen schwierig ist, baue ich einfach pro Schalter nur eine LED ein, das wäre für das Projekt auch nicht weiter schlimm

Hallo
Wozu der Arduino,? Das geht auch nur mit Drähten , oder ich hab's noch nicht verstanden

2 Likes

Hallo mascha1902
Guck mal hier, da findest du die Grundlagen für den Arduino.

Ich wünsche einen geschmeidigen Abend und viel Spass beim Programmieren in C++.

Ja stimmt, ich erinnere mich vage :grimacing:
dann war das natürlich falsch von mir formuliert. Die einzelnen Schalter mit den einzelnen LEDs will ich dann parallel schalten. Die Reihenschaltung mehrerer LEDs für einen Schalter war nur eine Idee und wird dann jetzt verworfen :wink:
Ich hoffe, so stimmt es jetzt

Verstehe ich auch nicht so ganz. Um LEDs an und auszuschalten reicht ein Kipp- oder Schiebeschalter für jede LED. Das geht ganz ohne µController.

Wenn das Ganze zeitgesteuert oder aufgrund irgendwelcher messbarer Ereignisse (Person betritt einen Raum oder so etwas) passieren soll, dann würde ich das mit dem µController verstehen

Hallo,
Könnte es sich im weitesten Sinne um eine Art Modelle handeln. Gebäude/;Wohnungen sollen animiert beleuchtet werden. Zeitlicher Ablauf an / aus. Sowas in der Art.

Da gibt's die Modell Eisenbahner , die nutzen sowas. Schau dir Mal die Moba-tools Bibliothek an.

Kann man machen.
In reiner Hardware ohne Arduino:

Oder mit Arduino

Ich hab kein Fritzing und hab das jetzt mal so schnell hingekleckert.

In Software könnte das so sein:

// Forensketch switch2Led with all off
// https://forum.arduino.cc/t/mehere-schalter-zusammen-verwenden/1010652

const byte kreise = 3;
const byte led[kreise] = { 6, 7, 8};
const byte switch [kreise] = {3, 4, 5};
const byte hauptSchalter = 2;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  for (byte b = 0; b < kreise; b++)
  {
    pinMode(led[b], OUTPUT);
    pinMode(switch, INPUT_PULLUP);
    pinMode(hauptSchalter, INPUT_PULLUP);
  }
}

void loop()
{
  if (digitalRead(hauptSchalter) == LOW)
  {
    for (byte b=0; b<kreise; b++)
    {
      digitalWrite(led[b], LOW);
    }
  }
  else
  {
    for (byte b=0; b<kreise; b++)
    {
      digitalWrite(led[b], digitalRead(switch[b]));
    }
  }
}

Das hängt von der LED-Farbe ab. Die brauchen Spannungen zwischen 1,6V und 4V je nach Farbe.

Sie sollen was mit Arduino machen.
Natürlich kann man sowas auch ohne machen aber man kann wenn man einen Arduino zwischen den Tastern und den LED hat auch schöne Spielereien machen.
mit dem Taster ein und ausschalten (erste mal Drücken ein, das nächste mal aus,
Kurz drücken ein, lang drücken aus
Nachleuchten
Zeitrelais,
ecc.

Grüße Uwe

Ja genau, es geht in erster Linie darum, etwas mit dem Arduino zu erarbeiten. Was genau das ist oder wie komplex spielt am Ende für das Seminar gar keine Rolle. Das heißt, auch wenn es anders viel einfacher gehen könnte, muss ich trotzdem den Weg über den Arduino gehen

Vielen Dank für die Hilfe! Das werde ich mir gleich mal genauer anschauen und probieren umzusetzen.

So ganz ohne Vorerfahrung und Hilfestellung war es jetzt doch schwerer als gedacht, das Grundprinzip in so kurzer Zeit zu durchdringen, daher bin ich wirklich dankbar, dass du dir die Zeit genommen hast!

Hallo mascha1902
Das erinnert mich an die Schaukästen in Museen.
Hier kommt ein einfaches Beispiel in der Umsetzung in klassenloser OPP.
Die Portadressen für die Leuchtkörper werden hier festgelegt:

constexpr byte LedPins[] {9, 10, 11}; 

Die Portadressen für die Taster werden hier festgelegt:

constexpr byte ButtonPins[] {A1,A2,A3,A0}; 

Die Namen für die Tasten werden hier definiert:

enum Input {One, Two, Three, Main};

Wobei Main der Name für den "Hauptschalter" ist.
So kannst du einfach die Anzahl der Taster und der dazugehörigen Leuchtkörper nach belieben ändern ohne das Programm ändern zu müssen. Viel Spass beim Spielen.

/* BLOCK COMMENT
  ATTENTION: This Sketch contains elements of C++.
  https://www.learncpp.com/cpp-tutorial/
  Many thanks to LarryD
  https://europe1.discourse-cdn.com/arduino/original/4X/7/e/0/7e0ee1e51f1df32e30893550c85f0dd33244fb0e.jpeg
  https://forum.arduino.cc/t/mehere-schalter-zusammen-verwenden/1010652
  Tested with Arduino: Mega[x] - UNO [ ] - Nano [ ]
*/
#define ProjectName "Mehrere Schalter zusammen verwenden "

// HARDWARE AND TIMER SETTINGS
// YOU MAY NEED TO CHANGE THESE CONSTANTS TO YOUR HARDWARE AND NEEDS
constexpr byte ButtonPins[] {A1,A2,A3,A0};         // portPin o---|button|---GND
constexpr byte LedPins[] {9, 10, 11};     // portPin o---|220|---|LED|---GND
#define OutPutTest
constexpr  unsigned long OutPutTestTime {1000};

// CONSTANT DEFINITION
enum Input {One, Two, Three, Main};
// VARIABLE DECLARATION AND DEFINITION
unsigned long currentTime;

// -- objects -----------------------------------------
struct BUTTONLED {
  const byte ButtonPin;
  int stateOld;
  const int LedPattern[sizeof(LedPins)];
  unsigned long duration;   // memory for interval time
  unsigned long stamp;      // memory for actual time
};
BUTTONLED buttonLeds[] 
{
  {ButtonPins[Main],false,{LOW,LOW,LOW},20,0},
  {ButtonPins[One],false,{HIGH,LOW,LOW},20,0},
  {ButtonPins[Two],false,{LOW,HIGH,LOW},20,0},
  {ButtonPins[Three],false,{LOW,LOW,HIGH},20,0},
};

// -------------------------------------------------------------------
void setup() {
  Serial.begin(9600);
  Serial.println(F("."));
  Serial.print(F("File   : ")), Serial.println(__FILE__);
  Serial.print(F("Date   : ")), Serial.println(__DATE__);
  Serial.print(F("Project: ")), Serial.println(ProjectName);
  pinMode (LED_BUILTIN, OUTPUT);  // used as heartbeat indicator
  //  https://www.learncpp.com/cpp-tutorial/for-each-loops/
  for (auto ButtonPin : ButtonPins) pinMode(ButtonPin, INPUT_PULLUP);
  for (auto LedPin : LedPins) pinMode(LedPin, OUTPUT);
#ifdef OutPutTest
  // check outputs
  for (auto LedPin : LedPins) digitalWrite(LedPin, HIGH), delay(OutPutTestTime);
  for (auto LedPin : LedPins) digitalWrite(LedPin, LOW), delay(OutPutTestTime);
#endif
}
void loop () {
  currentTime = millis();
  digitalWrite(LED_BUILTIN, (currentTime / 500) % 2);
  for (auto &buttonLed:buttonLeds)
  {
    if (currentTime-buttonLed.stamp>=buttonLed.duration) 
    {
      buttonLed.stamp=currentTime;
      int stateNew=!digitalRead(buttonLed.ButtonPin); 
      if (buttonLed.stateOld!=stateNew) 
      {
        buttonLed.stateOld=stateNew;
        if (stateNew)
        {
          int element=0;
         for (auto LedPin : LedPins) digitalWrite (LedPin,buttonLed.LedPattern[element++]);
        }
      }
    }
  }
}


Ich wünsche einen geschmeidigen Abend und viel Spass beim Programmieren in C++.

Der Pinmode für den Hauptschalter muss nur einmal gesetzt werden. Die Anweisung ist wohl aus Versehen in die Schleife gerutscht.

Jo. Ich bau mit einem Pin um die Logik zu schreiben und dann das Array drumrum.
Bleibt jetzt da drin :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.