ich weiss nicht, ob ich an dieser Stelle richtig bin, um ein Projekt vorzustellen, aber ich versuche es einfach mal.
Bilder, Erklärungen und den sketch zu diesem Projekt findet ihr unter diesem link.
Für Anregungen, Kritik und Beifall bin ich immer dankbar, insbesondere für Vorschläge zur Programmoptimierung und -vereinfachung, denn ich bin kein C/C++ Experte.
Was ist denn das für eine Lego-Reihe? Ist die speziell für solche Mechanik-Sachen? Sieht mal interessant aus...
Thema Code:
a)ziemlich großes delay im Code... da dürfte doch die Uhrzeitanzeige immer recht große Sprünge machen? Stichwort an dieser Stelle: BlinkWithoutDelay oder Nachtwächtererklärung
b)Du hast die serielle Ausgabe aktiviert.... hast Du denn auch stets eine Konsole für diese Ausgaben dran?
c)Wenn im Dauerbetrieb mal Stromausfall ist oder der Controller sich aus irgend einem anderen Grund neu startet, hast Du wieder die Anfangsuhrzeit in der RTC drin. Einfach die RTC 1x mit einem Programm stellen, und in diesem Code hier nur noch auslesen.
d)Man müsste jedes mal zur Uhrzeitumstellung stets den Code neu draufladen...
mit dem Code hier könntest DST automatisch erkennen lassen:
Dieses Lego heißt FischerTechnik (Die mit den Dübeln).
Ebenfalls sauteuer, hatte damals Pneumatik, ELektronik, Elektromechanik, diverse Starter-Sets (hatte der Vater irgendwo ergattern können), Start 100, Start 200, diverse Bausätze (den Buggy fand ich toll).
Nebenbei wurde damit eine Garn-Verzwirbelmaschine gebaut, um auf 4 dünnen Garnen ein etwas festeres Garn zum Stricken (->Mutter) herzustellen.
Besserungsvorschläge:
Benutze das F() -Makro bei print von Zeichenketten:
Serial.print("Text"); wird serial.print(F("Text"));
Das spart mächtig RAM.
gleiches bei lcd.print("Text").
Funktion: int Windrichtung (float azimutPoti)
Das kannst Du mit einer Berechnung besser machen. Wahrscheinlich genügt ein einfaches map();
double pi2 = 6.283185307179586476925286766559; // Globale Variablen
double pi = 3.1415926535897932384626433832795;
double RAD = 0.017453292519943295769236907684886;
Float Variablen in Arduinoumgebungen haben 4 Byte und darum einen Genauigkeit von 6-7 significanten Stellen.
Wenn Du 32 Stellen schreibst bedeutet das, daß Du von der Materie nichts weißt. In meiner Schulzeit hätte dies eine negative Note provoziert.
So etwas wollte ich mir auch schon seit langen bauen, hatte aber eher eine normales Pan/Tilt Modul im Sinn. Der kleine Servo machte mir _bei den gelinkten Modull _ allerdings noch Kopfzerbrechen.
Ich sehe Du verwendest das Adafruit Motor Shield v2. Auf dem Shield gibt es 4 ungenützte PWM Pins. <- Die kann man allerdings ziemlich leicht verwenden, ist allerdings nirgends Dokumentiert. Deshalb möchte ich Dir einfach meinen Erfahrungsbericht ans Herz legen. Leider habe ich es noch nicht mit Schrittmotoren getestet.
Jetzt musst Du nur noch einen HMC5883 oder QMC5883 (Kompass Breakout) einbauen damit Du es nach belieben drehen kannst.