Brauche HIlfe bei der logischen Konzeption eines Sketches

Hallo liebe Forengemeinde,

ich benötige mal wieder eure Hilfe. :confused:

Der Plan sieht folgendes vor:

Ein Arduino Uno soll eine indirekte Raumbeleuchtung steuern. Als Leuchtmittel dient ein doppelter Led-Stripe. Auf dem Stripe sind abwechselnd 30 RGB und 30 warmweisse Leds aufgebracht. Die RGBs sollen das Ambient Light besorgen, wenns aber mal hell werden soll/muss, sollen die weissen Leds zum Einsatz kommen. Bis hierhin gäbe es alles auch von der Stange zu kaufen.

Nun habe ich aber folgende Idee:

  1. Ich möchte das Licht zeitschaltuhrgesteuert dimmen bzw. ein und ausschalten können.
    Zu diesem Zweck habe ich eine RTC mit Temperaturkompensation beschafft, damit Arduino auch weiss, was die Stunde geschlagen hat.

  2. Um zu wissen, was Arduino gerade so tut, dachte ich an ein LCD Display mit ein paar zusätzlichen Tasten. Das Ganze wird wahrscheinlich über I2C laufen müssen, weil mein Keypadshield, was ich hier habe, frisst einfach zu viele Pins.

  3. Als Besonderheit plane ich die Raumhelligkeit mit einem oder mehreren LDR zu messen und möchte gern, das Arduino bei Helligkeitsänderungen im Raum selbständig nachdimmt, um eine gleichmäßige Helligkeit zu halten.

  4. Als Sahnehäubchen wäre es am Schluss (so denke ich mir das, kann aber auch verkehrt sein) eine tolle Sachen, wenn man das Ganze noch über eine Fernbedienung steuern könnte.

Mein Problem besteht darin, dass ich es immer noch nicht schaffe in eine Proggrammierdenke zu wechseln.
Daher habe ich mir gedacht, dass ich das Projekt in kleinere Unterprojekte aufteile, an denen ich arbeiten kann und an denen ich vor allem lernen kann. Deshalb habe ich es mit dem Projekt auch nicht wirklich eilig. Ich will lernen und wenn es sein muss dann auch langsam lernen, denn vom Nachbauen anderer Projekte, wo ich hinterher auch nicht viel schlauer und selbständiger bin, habe ich inzwischen genug.

Hier kommt das Forum ins Spiel, denn mir fehlt die Erfahrung, das Projekt in sinnvolle und leistbare Teilschritte zu unterteilen, die hinterher auch noch zu einem funktionierenden Ganzen zusammen gefügt werden können.
Ich hoffe hier auf die Profis, die schon große Projekte erfolgreich umgesetzt haben und mich auf die entsprechenden Stolpersteine hinweisen können.

Folgende Bausteine hatte ich mir gedacht:

  1. Led auf Breadboard durch LDR dimmen lassen, um die grundlegende Programmfunktion zu entwickeln/erlernen. Später muss das dann auf die 3 RGB Kanäle und die weißen Leds ausgedehnt werden.
  2. Entwicklung eines Sketch, der auf Tastendruck den Wert vom LDR als neuen Sollwert schreibt und bei Abweichung nachregelt.
  3. Sketch zur Farb- und Helligkeitswahl über Taster um die Beleuchtung manuell einstellen zu können. Gefolgt vom bereits entwickelten Sollwert Sketch.
  4. Sketch zur Ausgabe von Uhrzeit, Temperatur gewählter Farbe und Helligkeit auf dem Display
  5. Sketch zur Zeitsteuerung
  6. optional: Steuerung der Funktionen per Fernbedienung

Ich hoffe nichts vergessen zu haben und würde ich euch bitten wollen mir hier ein wenig zur Seite zu stehen, ob meine Aufteilung sinnvoll ist, und wie man es evtl. lern- und anfängerfreundlich besser machen kann.

Für mich wäre es das Optimum, wenn wir zusammen eine Aufteilung festlegen könnten und ich mich mit den Teilschritten nacheinander ans Werk machen könnte. Ich würde meine Entwürfe zu den Teilschritten dann gerne zur Diskussion stellen, um dazulernen zu können.

Mir wäre es nur sehr wichtig, wenn ihr bei euren Antworten erläutern würdet, warum ihr etwas anders machen würdet, denn oftmals erschließt sich mir die Logik hinter der Sache noch nicht, weshalb ich allein auf der Stelle trete.

Vielen Dank schon einmal für eure Hilfe.

Confused Electron

Confusedelectron:
ich benötige mal wieder eure Hilfe. ...

Zuerst solltest Du IMO damit anfangen, die Dinge zu lernen, die delay() vermeiden helfen. Blockaden gleich welcher Art, gleich wo im Programm, können sich im späteren Verlauf zu etwas entwickeln, weshalb Du am Ende eine Elends-Änderei-Orgie anstellen musst, wenn Du ein Fürzle erweitern willst. Was mir zur Vermeidung von delay() einfiel, habe ich hier zusammengeschrieben. Vielleicht enthalten auch meine anderen Weekender nützliche Informationen (guck ggf. die Seiten an, die unter meinem Avatarbildchen (die Erdkugel) verlinkt sind).

Dann solltest Du IMO möglichst viel über Klassen und deren Einsatz lernen. Dann kannst Du vieles so programmieren, dass es den Kopf nicht blockiert (von der Sicht will ich erst gar nicht reden), wenn es fertig ist.

Wenn Du Dir obendrein angewöhnst, Funktionen usw. möglichst knapp und übersichtlich zu halten (Richtlinie: Ein Funktionsblock sollte auf eine Bildschirmseite passen), hast Du deutlich weniger Probleme, die Dinge zu überblicken und im Griff zu behalten.

Das sind zumindest die Tipps, die mir spontan einfallen.

Gruß

Gregor

Ich denke "gleichmäßige Helligkeit sicherstellen" und "Ambilight" beißen sich schon vom Grundgedanken her etwas.

Welche Variante der Fernbedienung schwebt Dir vor? IR oder BT oder über WLAN?

Gruß Tommy

Hallo,

danke für eure Antworten, Ich bastel ja nun schon ein Bisschen mit dem Arduino rum, und habe als mein "Hauptproblem" identifiziert, dass ich einen mehr oder weniger großen Sketch einfach im Ganzen noch nicht auf die Beine gestellt bekomme. Daher meine Idee der Unterteilung in leistbarere "Häppchen". Leider stellt sich die Entscheidung, wo man die Torte am besten schneidet, um sie dann aber später wieder zusammenstöpseln zu können auch nicht viel leichter dar, wenn man noch nicht genug Erfahrung hat.

Inzwischen habe ich mir den "Blink without delay" Sketch auch schon diverse Male angeguckt und glaube verstanden zu haben, wie das läuft.

Auf der anderen Seite finde ich die üblichen Beispiele, die z.B. bei der IDE dabei sind nicht wirklich sinnhaft. Einfach weil sie dem Anfänger isoliert einen Werkzeugkasten vor die Füße kippen, ohne zu zeigen wie mand ie unterschiedlichen Werkzeuge sinnvoll miteinander verzahnt.

Greets
CE

Daher meine Idee der Unterteilung in leistbarere "Häppchen".

Richtig so!

Du bist nicht der erste mit diesem Problem.
Ich glaube da müssen/mussten wir alle durch.

Es gibt dutzende "coding style guides" im Netz.
Ich kann dir nur raten, dir diese zu Herzen zu nehmen

Hallo,
Die grösste herausforderung wird das LCD mit den Tasten werden..ist tricky und aufwendig.
Wenn du Ferbedienen willst....plane entsprechend.

Eigentlich könntest dir dann das Keypad schenken oder später einbinden.
Bei BT/WLan könntest du deine relevanten Parameter per App visualisieren/ändern.
Da könnte man auch noch glatt das LCD streichen.
Den Ardu könnte man jetzt mit den MosFets direkt an den Stripe..was nicht gesehen wird schaut
immer gut aus.
RTC hab ich bei meiner Beleuchtung rausgenommen, kann man bestens über die LDR mappen.
Hab mir stattdessen die EEPROMex zum update der Parameter installiert
(bei uns gibt es starke Netzschwankungen bei Gewittern).

Gutes Schaltnetzteil, Stripes mit mehrfacher Einspeisung, LogicLevel Mosfets, Kleinteile..alles bereits
angedacht?

Dimmen mit LDR ,genau so gehts los. Versuchs auch mit der SoftPWM Library.

mfg Martin

Confusedelectron:
Daher meine Idee der Unterteilung in leistbarere "Häppchen".

Diese Idee ist super und IMO der einzige Weg, wie man auch alleine Dinge stemmen kann, die sonst nur im Team zu schaffen sind.

Confusedelectron:
Leider stellt sich die Entscheidung, wo man die Torte am besten schneidet, um sie dann aber später wieder zusammenstöpseln zu können auch nicht viel leichter dar, wenn man noch nicht genug Erfahrung hat.

Naja ... wenn Du noch nicht genug Erfahrung hast, musst Du die eben noch bekommen. Und dazu musst Du halt auch mal Sachen mehrmals programmieren oder hier fragen. Lt. dem hier dauert es etwa 10 Jahre, bis man behaupten kann, man sei ein guter Programmierer. Als ich anno '08 mit C++ anfing habe ich viel geflucht und mir auf der Suche nach Fehlern eine Hornhaut auf die Brille geglotzt.

Wenn Du richtig gute Flüche kennst und hartnäckig bist, hast Du auf jeden Fall gute Karten :slight_smile:

Gruß

Gregor

gregorss:
Lt. dem hier dauert es etwa 10 Jahre, bis man behaupten kann, man sei ein guter Programmierer.

Der Artikel ist gut geschrieben. Wichtig ist, zu wollen, sich dafür zu interessieren.

Anderseits kenne ich leider auch Beispiele, für die gilt:

Manche lernen es aber auch nie, andere noch später.

Die waren aber auch nicht interessiert. Für die war das ein gut bezahlter Posten.

Gruß Tommy

Hallo,

ich wollte es nicht versäumen, mich an dieser Stelle für eure Antworten zu bedanken und ein gutes neues Jahr zu wünschen. Noch geht das ja. :wink:

VG
CE