Forum: Gesperrte Threads Unbekanntes Problem: Schaltkreis mit zwei Schaltern


von Gabriel T. (Gast)


Lesenswert?

Hallo zusammen


Als erstes habe ich eine Schaltung gebaut, bei der ich zwei LED's und 
einen Taster gebraucht habe. Drückte ich den Schalter, wechselten sich 
die zwei LED's jeweilig beim blinken ab. Soweit so gut.

Jetzt möchte ich einen zweiten Schalter einbauen, sodass die beiden 
LED's beide schnell blinken.

Unten habe ich den Code jetzt mit den zwei Schaltern programmiert, doch 
aus irgend einem Grund will er nicht gehen.

Eventuell liegt der Fehler auch noch bei einem Zeichen, um das werde ich 
mich später kümmer.


int switchState = 0;
int switchState1 = 0;

void setup() {
  pinMode(2, INPUT);
  pinMode(A0, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  switchState = digitalRead(2);
  switchState1 = analogRead(A0);

  if(switchState == LOW)&& (switchState1 == LOW){
    digitalWrite(3, HIGH);
    digitalWrite(5, LOW);

   }

   else{
   digitalWrite(3, LOW);
   digitalWrite(5, HIGH);

   delay(250);
   digitalWrite(5, LOW);



}
}








Aber nun, was meint ihr, würde der Code so funktionieren mit den zwei 
Schaltern?

Oder soll ich anstatt "int" "define" nehmen?


Was meint ihr?


MFG

: Verschoben durch Admin
von JJ (Gast)


Lesenswert?

hmm, zwei Dinge:

- Warum nutzt du einen analogen und einen Digitalen Eingang?

- So wie deine if Verzweigung aufgebaut ist, setzt du im 
Schnell-Blinken-Fall auf Dauerlicht, da nichts mehr umgeschaltet wird 
(der else Teil wird nicht abgearbeitet). Ich würde bei erfüllter 
Schnell-blink-Bedingung den Delay verkleinern.

von Gabriel T. (Gast)


Lesenswert?

Meinst du der Fehler liegt dort, weil ich einen analogen und digitalen 
Eingang gebrauche? Ich habe gelesen, dies ist zusammen kombinierbar. Ich 
habe mich für diese Möglichkeit entschieden, weil ich so sicher bin, 
dass die Eingänge sicher stimmen.


Also noch kleiner als 250?

von JJ (Gast)


Lesenswert?

Naja, ich weiß weder was für einen Controller, noch was für eine 
Schaltung du nutzt... Vielleicht geht es, vielleicht nicht. Aber wenn 
die Basisschaltung mit einem Schalter an digitalem Eingang funktioniert 
würde ich die Erweiterung auf der gleichen Technik aufbauen.
Die Definition als INT und anschließendes abfragen auf HIGH und LOW 
passt für mich auch nicht richtig zusammen, aber wenn es in der Basis 
funktioniert hat: OK

Dein Problem liegt aber ehr in dem IF: Wenn beide Eingänge LOW sind 
führst du keine Umschaltung mehr durch weil das blinken (delay und 5 auf 
LOW) bei der aktuellen Klammersetzung im ESLE Teil steht und gar nicht 
mehr ausgeführt wird wenn die Bedingung erfüllt ist.

von JJ (Gast)


Lesenswert?

und bei anderer Klammersetzung passt die Folge von HIGH und LOW nicht.
Ich würde in diese Richtung denken:


-------------------------------------------

digitalWrite(3, LOW);
digitalWrite(5, HIGH);

if(switchState == LOW) && (switchState1 == LOW){
    delay(250);
}
else{
    delay(100);
}

digitalWrite(3, HIGH);
digitalWrite(5, LOW);

-----------------------------------------

von JJ (Gast)


Lesenswert?

bzw; was soll der erste Schalter denn tun? Wenn er das ganze blinken 
erst aktivieren soll, gehört er in eine eigene Abfrage rund um die 
gesamte Loop:

-------------------------------------------

if(switchState == LOW) {
    digitalWrite(3, LOW);
    digitalWrite(5, HIGH);

    if (switchState1 == LOW){
        delay(250);
    }
    else{
        delay(100);
    }

    digitalWrite(3, HIGH);
    digitalWrite(5, LOW);
}

-----------------------------------------

von Cyborg (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/Netiquette#Klare_Beschreibung_des_Problems


Man o man. Rafft eigentlich von euch Threaderstellern einer mal
sich an die Nettiquette zu halten oder die wenigstens zu lesen?

Zu jedem Software-Problem, insbesondere bei µ-Controllern gehört
auch die Hardware. Wie viel du Ahnung hast, weiß doch hier keine
Sau.  Also poste auch die Schaltung, dann sehen wird weiter, oder
vergiss es.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.