Ich gestehe, das ist mir zu hoch. Das sieht mir auch nicht nach Arduino IDE aus, richtig? Falls ja, wieso lässt du den Sensor nicht vom Arduino auslesen?
Das der Arduino Code den ich aus der IDE raus kopiert habe klar nur ein Auszug. Der Komplette Code ist im Repos der Link dazu ist ein paar Posting früher.
Was bring dich dazu zu den das es kein Arduino Code ist ?
Aber extern Links sind Unerwünscht habe ich gestern gelernt also hänge ich es mal als Zip an.
Beispiel:
Das ist keine Messreihe nur ein Beispiel !!!
Der Sensor bzw der Wert des AD's liefert:
50 51 55 100 99 102
Das gäbe zur Zeit 6 mal High am Pin
Möglichkeit 1:
if(ABS(adValue - lastAD[adress]) > mininmalChange )
wenn mininmalChange = 5 ist
dann würde nur 50 100 gemeldet und verarbeitet werden
Möglichkeit 2:
word roundValue = (adValue + lastAD[adress]) / 2;
if(roundValue != lastAD[adress])
dann würde 25 50 52 76 87 94 gemeldet werden.
Ok das fällt raus habe ich gerade beim durch rechnen gemerkt wer ändert die werte zu Stark und ändert nichts an der Anzahl der Änderungen.
Das dritte mag ich jetzt nicht per Hand durch rechnen.
Naja, mein Problem ist dass ich 1. kein Programmierer bin und mich erst seit kurzem mit dem Arduino beschäftige und 2. der Code halt so ganz anders aussieht als das was ich an Beispielen bisher so gesehen habe. Und wenn dann die Setup-Sektion fehlt und man nicht weiß was eine Variable oder Konstante oder sonstwas ist, dann ist der Code ohne Kommentare (für mich) einfach nicht einzuordnen.
Was mir jetzt dazu einfällt ist ein konzeptioneller Aspekt: ist es wirklich notwendig, so feinmaschlig dynamisch auf Helligkeitsveränderungen zu reagieren? Ich denke es geht ja immer noch um die Anpassung der Displayhelligkeit auf die Umgebungshelligkeit, richtig? Wäre es nicht besser, anstatt ständig nachzuregeln nur auf längerfristige Veränderung zu reagieren und auch nur ein paar Grenzwerte festzulegen, die genügend weit auseinander liegen? Ich stelle mir da vor du fährst bei Sonnenschein eine Allee entlang und die Displayhelligkeit reagiert ständig auf Baumschatten - Sonne - Baumschatten - Sonne - …
Und nochmal auf den Code bezogen (ich hoffe ich habe zumindest diesen Part richtig verstanden): ist es so, dass du hier
Code:
if(adValue != lastAD[adress]) {
lastAD[adress] = adValue;
valueChanged = true;
jeden Messwert, der sich vom vorigen unterscheidet, als Vergleichswert (auch wenn er nur minimal anders ist) abspeicherst? Wenn das so ist, wäre es dann nicht besser, den Vergleichswert nur zu ändern, wenn die Differenz mindestens einen bestimmten Wert (
minimalChange) erreicht hat? Ansonsten passiert bei einer schleichenden Veränderung schlichtweg garnichts.
Was für ein Sensor ist das eigentlich, den du da ausliest?
--
P.S.: Wenn ich da völlig falsch liege dann ignoriere das einfach! Wie erwähnt bin ich in diesem Punkt absoluter Laie und eventuell mehr störend als hilfreich. Ich hätte kein Problem damit.
So schlecht wie du Tuts bis du doch gar nicht.
Genau das von dir beschrieben ist doch der Punkt um den es geht ich will es eben nicht so feinmaschig zu mindestens im Moment nicht.
Weil dann sieht man den Wald vor lautern Bäumen nicht mehr. Wenn du einen PWM Bereich hast vom 0 - 500 für die Helligkeit und einen Lichtwert von 0 - 1024 da ist eine Änderung von 1 an dem Licht Sensor bestimmt nicht an der Helligkeit von Display menschlich zu erkennen. Aber der Bus Überträgtdaten bis zum Abwinken was Strom und Rechnenleistung kostet.
Zurück zum Thema:
if(ABS(adValue - lastAD[adress]) > mininmalChange ) -> Ist ja genau das was du da schreibst
Technsich muss man das nur so machen sonst Funktioniert es bei Negativ änderungen nicht oder das if wird zu lang
Beispiel :
adValue = 10
lastAD[adress] = 13
mininmalChange = 5
adValue - lastAD[adress] = -3
-3 ist aber nicht größer als 5
adValue = 10
lastAD[adress] = 4
mininmalChange = 5
adValue - lastAD[adress] = 6
Das wäre dann größer und wird gemeldet
adValue = 10
lastAD[adress] = 16
mininmalChange = 5
adValue - lastAD[adress] = -6 wäre nicht gößer
Wenn du jetzt ABS machst wird aus -6 eine 6 und dann geht es immer ohne einen Komplexen If da hin zu schreiben.
Warum ich das nicht einfach so um setze ist der Gedanke das der Mittelwert besser sei aber in glaube umso mehr ich darüber nachdenke das es der Falsche Ansatz ist.
Deshalb danke das du schreibst auch wenn du an anderer Stelle mit mir zu Diskutieren an sinnlos eingestuft hast.
Sensor
(14.01.2020, 11:01)Der kleine Punky schrieb: [ -> ]Deshalb danke das du schreibst auch wenn du an anderer Stelle mit mir zu Diskutieren an sinnlos eingestuft hast.
Du solltest das was ich schreibe nicht immer so ernst nehmen.
Was du da ansprichst war nur ein Missverständnis bezüglich eines Links, den du gepostet hast. Ich finde dein Projekt sehr interessant und diskutiere sehr gerne mit dir darüber (sonst würde ich das ja nicht tun). Vor allem kann ich dabei noch sehr viel lernen.
du könntest die werte in ein array (5-10werte) fortlaufend schreiben und immer den mittelwert bilden.
da habe ich auch drüber nach gedacht. Hat aber dann den Nachteil das 5 - 10 Messungen brauche bis zu einem Ergebniss was passt.
Lässt aber sprüngen verschwinden. Auf der Anderen seite das Display würde langsamer reagieren ist das gut oder schlecht ?
Beim Interval von 1 Sekunde über bei einer Tunnel einfahrt es 5 Sekunden dauert bei 5 Messwerten bis das Display regiert.
Rechnen wird mal (Keine Messwerte):
Code:
51 53 56 60 80
Mittel 60
110 <- neuen wert (Tunnel einfahrt)
Mittel 71
108 <- neuen wert
Mittel 82
Mal sehen vielleicht stelle ich heute Abend mal den Interval auf 500 msec und programmiere das und sehen mir es live an.
Ok Tunnel fahren ist nicht noch kann ich das Zeug nicht in Auto packen...
Ich bilde jetzt den Mittelweg über die Letzten 10 Messungen und messe dafür im 10tle des Angeben Intervals.
Im Log sieht das schon aus den wenn man jetzt die Lampe dran hält steigt der wert schön langsam.
Noch was ich habe die Programmierung des Nano auf PlatformIO um gestellt das habe ich am Wochenende durch ein Video Entdeckt.
Das sollte sich jedermal an sehen. Für mich ist es Obergenial weil ich jetzt alles in eine Projekt habe und nur eine GUI Offen dort kann ich beide Quelletexte auch gleichzeitig bearbeiten.
Man kann sogar fast alle Beispiel für die Arduino IDE dort Kompilieren.
https://www.youtube.com/watch?v=Yb-HOBynJdc
Wenn alles klappt gibt es die Tage erstmal ein neues Video auf der Homepage zum Steuern der Relais am MCP das mache ich jetzt damit ich meine I²C Lip testen kann dann wird der Nano per I²C Integriert. Nicht das ich beide Seiten Programmiert habe und nicht weiß auf welcher Seite der Fehler ist.
Damit das Durcheinander ein bissle leichter wird sind gestern die ersten Platinen gekommen. Erst mal für MCP und ULN so wie dem Treiber für den Lüfter.