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
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.
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?
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.
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); -----------------------------------------
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); } -----------------------------------------
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.