ich habe eine augenscheinlich recht einfache Aufgabenstellung. Ein LED Soll geschaltet werden wenn ein Digitaler Eingang (PullUp) auf Masse geschaltet wird und zwar erst dann, wenn der Schalter mind. 2 sec. gedrückt gehalten wurde.
Leider will mir gerade kein richtiger Ansatz einfallen, denn das Problem liegt darin, dass der Schalter auch deutlich länger gedrückt werden könnte und auch dann soll spätestens nach 2sec. die LED angehen. Ich kann also nicht einfach abwarten bis der Schaltvorgang beendet ist, die Zeit mit millis() messen, vergleichen und dann die LED Schalten.
jepp, das geht in die richtige Richtung, nur dass sich die LED direkt auch wieder ausschalten soll, wenn der Schalter los gelassen wird - also ohne weiteren Schaltvorgang...
Das schaue ich mir heute Abend aber nochmal in Ruhe an - das hat auf jeden Fall geholfen!
man kann das natürlich noch mit einem Timer machen. Das ist jetzt die quick & dirty version. es ist auch nicht optimal die Ports jedesmal zu schalten (kostet Zeit). Das ist aber schonmal ein Ansatz und wenn es nicht auf µS ankommt sollte das reichen. Und außerdem wenn die Led nach genau 2000 ms angehen soll. müsste man noch die
Schaltzeit des Conrtollers (bis der Port stabil ist ), die dauer der Programmzeilen und die Trägheit der LED abziehen. Aber ich denke wenn es um eine Optische Meldung geht reicht diese Tolleranz
Der Code in #7 funktioniert so nicht, da millis() vier Byte zurückliefert, daher unsigned long t = millis();Auf die Problematik von Gleichheit anstelle von Relation wurde schon hingewiesen. Dies könnte bei einem längeren loop zu einem Fehler werden, der nur manchmal auftritt, was unangenehm zu ermitteln ist.
Formal fehlt eine geschweifte Klammer, wobei die Frage, wo sie fehlt, durchaus nicht so einfach zu beantworten ist.
Nach Korrektur landet man dann bei #11.
@der_chipo: Ich schreibe das nur, damit sich nicht andere die Haare raufen, die gerade keinen UNO zum Probieren haben.
ich dachte hier kommt nochwas. Denn ich möchte zwar nicht meckern, aber der Code gefällt mir noch nicht so richtig. Denn wenn es nichts zu tun gibt, wird dennoch permanent der LED-Pin mit LOW beschrieben. Muß nicht sein. Klar der Codeaufwand würde steigen, dafür wäre Leerlauf dann Leerlauf.
Eigentlich ist das eine Tasterentprellung mit 2 sec. Entprellzeit beim Taster drücken.
wenn es nichts zu tun gibt, wird dennoch permanent der LED-Pin mit LOW beschrieben. Muß nicht sein
Das ist aber sehr egal. Vor allem, wenn nichts zu tun ist, hat der Arduino ja sowieso nichts zu tun, da kommt es auf eine microsekunde nicht wirklich an. Dem LED Signal merkt man es nicht an.
Auch der Stromverbrauch des Arduino ist der gleiche. Was stört dich?