keine Literatur gefunden ... hust ...
Erste Anlaufstelle hier auf der Seite oben unter Learning > Reference
Oder man gibt im Browser Suchbegriffe wie "C array" ein oder ähnliches.
Ein kleines Bsp.
unsigned int lux[] = {11, 22, 33}; // 3 Werte auf Indexzähler 0, 1 und 2
if (lux[2] > 30) { // lux mit Wert 33 > 30 ?
dann mach ...
}
Den Indexzähler vom Array kann man auch mit einer for Schleife durchlaufen lassen und darin abfragen wenn das zum Problem passen sollte.
Was klappt denn mit dem array nicht? Du musst genau so jeden Wert einzelnd vergleichen, aber da das mit einer Schleife geht, wird es viel einfacher.
So ungefähr:
werte_array = [1,2,3,4];
array_laenge = 4;
byte wert_in_lux(unsigned int lux) { // Luxwerte mit Tabelle abgleichen
for(int i = 0; i < (array_laenge - 1); i++ ){
if (lux > werte_array[i] ) {
return i;
}
}
}
Genau danach habe ich gesucht!
Die Lösung mit den Vergleichswerten von Genosse scheint die richtige zu sein.
Ich hatte das Programm schon mit 41 if Abfragen lauffähig aber so währe es bestimmt eleganter.
Auch die Literatur Hinweise sind klasse. Habt alle vielen vielen Dank !
Ich versuche noch immer die Nuss zu knacken mit dem Array ..
Was mein Ziel ist das ist ein Array von 40 Speicherstellen lux[0] .. lux[39]
ist ist damit möglich an die Werte für z.b lux 0 zu gelangen wenn der Messwertwert vom BH1750 z.b
36 ist dann liegt dieser bei 0 oder 893 bei 4 .. mein ziel ist es mit den Werten von 0 bis 39 einen Bargraph
zu erhalten in abhängigkeit von Messwert den der BH1750 liefert.
Geht das mit einem Array ?
Doc_Arduino war so freundlich einen Lösungs Ansatz zu Posten..
Wenn ich diesen richtig Verstehe komme ich bei dieser Variante nicht um 40 if Abfragen herum - richtig?
um die 40 Abfragen kommste nicht drum herum, jedoch mit einer for Schleife eleganter
du definierst dein array. Bsp.
unsigned long lux[] = {30, 200, 478, 567}
und fragst in einer for Schleife einen Wertevergleich mittels Indexzähler ab. Den letzten ermittelten Index verarbeitest du sinnvoll weiter.
Bsp. ungetestet
int _Index; // ggf. global definiert
int value = analogRead( );
for (int i=0; i<41; i++) { // geht die Indexwerte durch
if ( value > lux[i] ) { // vergleicht diese Arraywerte mit value
_Index = i; // bei einem Treffer wird Indexnummer gespeichert
break; // und for vorzeitig verlassen
}
}
unsigned int gesuchter_LuxWert = lux[_Index]; // mach sinnvolle Dinge
Ansonsten verschiedene Literatur lesen und damit experimentieren bis es Klick macht.
stevie72:
Wenn ich diesen richtig Verstehe komme ich bei dieser Variante nicht um 40 if Abfragen herum - richtig?
Falsch Es gibt Möglichkeiten, die Anzahl der Abfragen zu reduzieren:
Vergleich mit dem Wert in der Feldmitte, dann in der linken oder rechten Hälfte weitersuchen. 21 Vergleiche.
Vergleich mit dem Wert in der Feldmitte, dann linke oder rechte Hälfte erneut halbieren usw. Irgendwann landest Du bei fünf Elementen, die Du einzeln vergleichen kannst. Wenn meine Finger richtig zählen, 8 Vergleiche.
Du vergleichst mit einer Funktion anstelle der Wertetabelle, wozu die Funktion aber bekannt sein muß.
Wo hast Du die Werte für das Feld her? Sieht nach einer nichtlinearen Funktion aus, kennst Du die? Ein Sinus scheint es nicht zu sein, rote Linie.
Eine ganz andere Frage ist die der Nützlichkeit für Dein Projekt. Aber möglicherweise soll Dein Bargraph ja mehr Striche erhalten.
ElEspanol:
Bei mir hat es bislang noch nicht mal in der Problemstellung richtig klick gemacht.
Bargraphdarstellung mit einer nichtlinearen Funktion.
ElEspanol:
Bei mir hat es bislang noch nicht mal in der Problemstellung richtig klick gemacht.
Hallo Spanier,
so wie ich das verstanden hatte, weiß/wußte er nicht, wie man ein Array anlegt und dann auf die darin gespeicherten Werte einzeln oder nacheinander zugreift bzw. mit einer anderen Variablen vergleicht. Das sagte mir meine Glaskugel.
Bargrafen, jetzt kann ich mir etwas darunter vorstellen. Das heißt, er sucht den Wert im RE und zeigt dann entsprechend dem index, wo er fündig wurde, die entsprechende Anzahl Blöcke als Bargraf an. und warum sagt er das nicht gleich so?