Hi User,
ich bin absoluter Neuling. Arbeite seit 3 Tagen mit Arduino Uno. Habe Erfahrungen mit Simatic S7.
Ich möchte eine Haussteuerung aufbauen. Dabei Fehlen mir eine Reihe Grundlagen.
Die Funktion soll so aussehen:
Tastendruck – kurz – OUTPUT – LED bestimmte lange Zeit ( kein Problem funktioniert bei mir)
Tastendruck (gleiche Taste) Taste bestimmte Zeit halten so ca. 2sec. – OUTPUT – gleiche LED –Dauerlicht!
Tastendruck kurz – LED aus.
Das habe ich programmiert:
int led = 12;
int schalter = 10;
long pause = 5000;
long zeitschalter = millis();
int ledstatus = HIGH;
int tasterstatus = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(schalter, INPUT);
}
void loop() {
tasterstatus = digitalRead(schalter);
if (tasterstatus == HIGH)
{
digitalWrite(led, HIGH),
delay(5000);
digitalWrite(led, LOW);
}
else
{
digitalWrite(led, LOW);
if (digitalRead(schalter) == HIGH) {
if ((millis() - zeitschalter) > pause) {
zeitschalter = millis();
if (ledstatus == HIGH) {
ledstatus = LOW;
} else {
ledstatus = HIGH;
}
}
{
digitalWrite(led , ledstatus);
}
Fehlermeldung:
Schalter_Vorschlag_mein:36: error: expected '}' at end of input
exit status 1
expected '}' at end of input
Die Zeiten sind nur erstmal zu Probe eingegeben.
Wer kann mir helfen? Was mache ich falsch?
Die Fehler-Meldung ist doch eindeutig. Da fehlt mindestens eine schließende Klammer am Ende. Praktisch sind es mehrere. Sieht man auch deutlich im Editor.
Das hier steht am Ende irgendwie alleine rum:
{
digitalWrite(led , ledstatus);
}
Also das Ende des Codes noch mal ansehen. Überlegen was genau gemacht werden soll und die Klammern entsprechend ergänzen
Wobei der Code glaube ich auch von der Logik her nicht so recht passt
danke für Eure Hinweise.
Mit den Klammern Das habe ich hinbekommen. Kann jetzt den Code ohne Probleme laden.
Nur die Software macht noch nicht was ich will. Natürlich aus Unkenntnis von mir.
Ich kann nur Taster ein und die Zeit läuft ab und danach geht die LED aus.
Die Funktion soll aber so aussehen:
Tastendruck - kurz - OUTPUT - LED leuchtet bestimmte lange Zeit! ( nur das Funktioniert bisher in der setuerung)
Tastendruck (gleiche Taste) Taste bestimmte Zeit halten so ca. 2sec. - OUTPUT - gleiche LED -Dauerlicht!
Tastendruck kurz - LED aus. --- Das Funktioniert noch nicht.
Wie kann ich die Verküpfung herstellen.
ZB. Taster kurz oder Taster ca. 2sec drücken und dann Dauerlicht.
Die Oder Verknüpfung habe ich noch nichts gefunden.
Meine bisherige Steuerung:
int led = 12;
int schalter = 10;
long pause = 5000;
long zeitschalter = millis();
int ledstatus = HIGH;
int tasterstatus = 0;
delay(5000); und Taster kombinieren ist Mist!
delay(10); // zum Entprellen ist was anderes.
Du brauchst eine Zustandsführung, damit klar ist, was der kurze Tasterdruck machen soll.
Ob es ein kurzer oder langer Druck ist, kann man erst entscheiden, wenn die Taste losgelassen wurde oder die lange Zeit um ist. Das geht nur ohne delay(), dafür aber mit Merken der Startzeit.
Es gibt einige Fälle, wo (mir) noch nicht klar ist, was passieren soll:
Taste wird erneut gedrückt (kurz oder lang), während die Nachleucht-Zeit noch läuft.
Taste wird lang gedrückt, war aber vorher Dauerlicht
Wenn die Nachleucht-Zeit und die Unterscheidung kurz/lang gleich sind, vereinfacht sich das Ganze deutlich:
Beim Drücken geht die LED an, für x sec.
Ist nach den x sec der Taster immer noch gedrückt, bleibt die LED an.
Wird innerhalb der x sec der Taster neu gedrückt, fängt die Geschichte neu an.
Ist die LED an (Dauerlicht) und der Taster wird gedrückt, passiert das gleiche: LED bleibt erstmal an, aber Zeit startet neu, d.h, nach weiteren x sec ist die LED aus.
( Das ist geringfügig anders als du es wohl willst, damit kannst du aber auch das Dauerlicht an und aus kriegen, und es sind weniger verschiedene Fälle zu unterscheiden )
Alternativ kannst du auch mehr Logik beim Loslassen programmieren:
Beim Drücken geht die LED an.
Beim Loslassen gilt:
War der Tastendruck kurz, leuchtet die LED noch eine Weile nach.
OpaDD:
Die Funktion soll aber so aussehen:
Tastendruck - kurz - OUTPUT - LED leuchtet bestimmte lange Zeit! ( nur das Funktioniert bisher in der setuerung)
Tastendruck (gleiche Taste) Taste bestimmte Zeit halten so ca. 2sec. - OUTPUT - gleiche LED -Dauerlicht!
Tastendruck kurz - LED aus. --- Das Funktioniert noch nicht.
Wie kann ich die Verküpfung herstellen.
Ich finde Bedienkonzepte mit unterschiedlich langen Tastendrücken schrecklich. Schrecklich für den Programmierer und auch schrecklich für den Bediener. Denn bei solchen Bedienkonzepten reagiert das Gerät immer erst mit Verzögerung auf gedrückte Tasten, insbesondere die Aktion "langer Tastendruck" kann ja erst erkannt werden, wenn mindestens die "lange Tastendruckzeit" abgelaufen ist. Das führt zu extrem langsam bedienbaren Geräten.
Ich würde an Deiner Stelle lediglich Tastendrücke vorsehen (Dauer egal) und Timeouts seit dem letzten Tastendruck.
Erster Tastendruck (während AUS): Einschalten für 500ms, danach Aus
Zweiter Tastendruck (innerhalb einer Timeout-Zeit nach dem ersten Tastendruck): Dauer-Ein
Tastendruck während "Dauer-Ein": Aus
Also quasi eine "Finite-State-Machine" (Endlicher Zustandsautomat) mit 3 Zuständen:
AUS
Kurzzeit-Ein
Dauer-Ein
Und per Tastendruck kann unter Vorliegen bestimmter Bedingungen zwischen den Zuständen umgeschaltet werden.
Wenn die Dauer von Tastendrücken nichts zählt, sondern im Prinzip nur der Flankenwechsel von "nicht-gedrückt" auf gedrückt" ausgewertet wird und ggf. der Zeitpunkt des Drückens, bekommst Du automatisch ein schnelles Bediener-Interface für den Bediener und eine einfache Programmlogik für den Programmierer.
Und übrigens: Die Funktion "delay()" ist in jedem Mikrocontroller-Programm (Arduino-Sketche eingeschlossen") vollkommen fehl am Platze! Allenfalls für Kontroll- und Debug-Zwecke kann man während der Programmentwicklung zum Testen ein delay() einfügen, um den Programmablauf zu blockieren, wo man es möchte.
Ansonsten hat delay() keine Daseinsberechtigung und ist strikt zu VERMEIDEN!
OpaDD:
Die Funktion soll so aussehen:
Tastendruck – kurz – OUTPUT – LED bestimmte lange Zeit ( kein Problem funktioniert bei mir)
Tastendruck (gleiche Taste) Taste bestimmte Zeit halten so ca. 2sec. – OUTPUT – gleiche LED –Dauerlicht!
Tastendruck kurz – LED aus.
Folgender Sketch macht, so denke ich, was Du willst:
muß jurs recht geben. Die Sache mit lange Taste drücken finde ich auch blöd. Mit kurz Taste drücken kurz hintereinander ist schon eher brauchbar. Hab eine Lampe die Schalterbetätigungen auswertet in der Bude. Sind 2 Lampenkreise verbaut.
Lichtschalter bleibt also bestehen, mußte ich nicht gegen einen Taster wechseln. Da muß eine Art Zeitrelais in der Lampe verbaut sein. Funktioniert so.
1x Schalter ein ... dunkler Lampenkreis leuchtet.
Schalte ich 2x kurz hintereinander ein, geht der 2. hellere an
Schalte ich 3x kurz hintereinander ein, gehen beide an.
Schalte ich den Schalter aus, ist immer alles aus.
Oder ich schalte, wenn sie schon an ist, nach einer Weile nochmal kurz aus/ein, dann wechsel ich zur nächsten Stufe.
Ist die Lampe längere Zeit aus, fängt sie immer mit der kleinen Lampe an.
Die Bedienlogik war mir sofort verständlich und sie reagiert eben sofort auf Betätigungen. Ich muß nicht erst warten.