Frage zum zeitgesteuerten Abschalten

Hallo,

ich möchte nun mein erstes "wirkliches" Projekt verwirklichen.
Für meinen Neffen (bald 6 Jahre) möchte ich eine Art Nachtlicht basteln.

Im Prinzip besteht das Projekt aus einem RGB-LED Strip, den er sich selbst irgendwo anbringen kann und dem Steuergerät.
Der LED-Streifen wird über eine Fernbedienung gesteuert. Er kann sich dann selbst aussuchen, ob das Licht rot, grün, blau oder weiß ist oder ob sich die Farben ändern.

Ich möchte allerdings auch eine Art "Abschaltautomatik" einbauen. Die Eltern können dann auf der Fernbedienung einen Code eingeben (z.B. 1234) und das Licht schaltet sich nach einer bestimmten Zeit (z.B. 30 Minuten) selbst ab.

Nun habe ich mir gedacht, dass ich bei Eingabe des richtigen Codes die Zeit nehme (time = millis();), dazu dann einfach die Millisekunden dazuaddiere (30 Minuten * 60 Sekunden * 1000) und wenn time >= der errechnete Wert wird sollen die PWM-Ausgänge des Arduino auf 0 dimmen.

Ist das so vernünftig oder gibt es da eine einfachere oder elegantere Lösung?
In der Arduino-Referenz zu millis() steht:

Note that the parameter for millis is an unsigned long, errors may be generated if a programmer tries to do math with other datatypes such as ints.

Heisst das, dass ich mit dem Wert von millis() nicht rechnen kann?

mfG,
f.

Hallo,

die elegantere Lösung wäre eine Batterie-gepufferte Echtzeituhr über I2C.
Dann könnte man nicht nur die Lichtdauer, sondern auch einen Abschaltzeitpunkt ("Um punkt 9 ist das Licht aus!!!") festlegen.
Und weil wir schon von elegant reden: dann würd ich noch einen Touch-Lcd empfehlen :wink:

Gruß
Reinhard

RTC: FM3130 vo Ramtron
hat auch integriertes nicht-flüchtiges Ram
Touch-Lcd: z.b.: MI0283QT Adapter v1 (inkl. 2.8" LCD + Touchpanel) - Watterott electro
verwende ich. ist preislich interessant und funktioniert gut

fatzgenfatz:
Ist das so vernünftig oder gibt es da eine einfachere oder elegantere Lösung?
In der Arduino-Referenz zu millis() steht:

Note that the parameter for millis is an unsigned long, errors may be generated if a programmer tries to do math with other datatypes such as ints.

Heisst das, dass ich mit dem Wert von millis() nicht rechnen kann?
mfG,
f.

Das heißt, daß bei der Umwandlung zu jedem anderen möglichen Variablentyp Daten verloren gehen.
Unsigned long ist bei Arduino eine 32 Bit Zahl und kann Werte von 0 bis 4,294,967,295 (2^32 - 1) darstellen. Alle anderen Variablentypen sind kleiner (unsigned int sind 16 Bit, Byte und Char sind 8bit).
float kann zwar größere Zahlen darstellen (von-3.4028235E+38 bis 3.4028235E+38) aber mit weniger Stellen (nur 6-7 Stellen)

@Reinhard
Wie Du weißt bin auch ich ein Fan von FRAMs aber in diesem Fall glaube ich daß man das auch mit millis() realisieren kann. Anders ist es wenn eine Maximalzeit einprogramiert wird zB: "Um 10:00 geht das Licht auf alle Fälle aus, egal ob die Eltern eine Ausschaltverzögerung programmiert haben. So kann der schlaue Sprössling auch nicht die Eltern mit der Kenntnis des Geheim-Codes bis spät lesen."

Grüße Uwe

Bedenke dass auch eine unsigned long-Variable (bzw. millis()) nach (theoretischen) 49 Tagen überläuft, oder es kann passieren dass das Licht alle etwa eineinhalb Monate völlig unmotiviert anspringt. :wink:

Ja, millis() läuft nach 49 und etwas Tagen über, aber bei geschickter IF Abfrage kann dieser Überlauf aufgefangen werden und die korrekte Zeit abgewartet werden.
Siehe http://arduino.cc/forum/index.php/topic,85706.msg642086.html#msg642086
Grüße Uwe

Hallo,

ich geb ja zu, für diesen Fall ist die RTC schon etwas zu weit gedacht.
Aber beim Thema Schlafengehen fällt mir ebenso auch das Aufstehen ein.
Vielleicht bei einem 6 Jahre alten Jungen noch zu früh, aber wenns mal in die Schule geht, wäre ein Licht, das gleichzeitig mit einem Wecksignal erbarmungslos angeht, oftmals eine willkommene Hilfe für die Eltern.
Und der Effekt einer Leselampe, die um -sagen wir mal gnädige- 7 Uhr ins Gesicht scheint, ist nicht zu unterschätzen :wink:
Zu allem Luxus kann man dann auch noch den Radio dranhängen.....

Gruß Reinhard

Hallo,

vielen Dank für die ganzen Anregungen! Die klingen alle sehr interessant, aber ehrlich gesagt bin ich froh, wenn ich für den Anfang mein erstes simples Miniprojekt fertig bekomme.
Ich bin ja noch blutiger Anfänger auf diesem Gebiet und bin schon froh, wenn ich mein Projekt rechtzeitig zu seinem Geburtstag fertig bekomme.

Aber eine RTC mit Abschalttimer und Weckfunktion kommt ja vielleicht noch später dazu, er hat ja noch ein paar Geburtstage. Vielleicht kann er ja zum 10. Geburtstag seine 3D-Holo-Mailbox über das Gerät abfragen :slight_smile:

mfG,
f.