Vectoren in Arduino IDE 2.2.1

Hello!

muss aktuell mit "dynamischen Arrays" arbeiten und wollte dafür Vectoren nutzen. Hierfür habe ich die ArduinoSTL.h heruntergeladen und eingebunden. Leider funktioniert etwas nicht. Auch mit originalen Beispielen von GitHub nicht.

Fehlermeldung:
new.cpp.o (symbol from plugin): In function operator new(unsigned int)': (.text+0x0): multiple definition of std::nothrow'
C:\Users\Benutzer1\AppData\Local\Temp\arduino\sketches\BD8D9BE6C55A8A20A0D2FB98CE3C19A3\libraries\Arduino_AVRSTL\new_handler.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1

Scheinbar ist da irgendwie eine Mehrfachverwendung. Was kann ich tun?

Gruß

sind auf µC aufgrund des stark beschränkten RAMs ganz übel. Brauchst du das wirklich?

Hast du eine andere Idee, wie ich in eine Variable X, Elemente aus unterschiedlichen Arrays laden kann? Diese müssen dort zwischengespeichert und verglichen werden. Die Größe(Anzahl der Elemente) variiert, je nach dem welche Arrays benutzt wurden.

Es wären ca. 3 Vectoren, mit bis zu ca. 20 Elementen.

Bin da noch recht frisch.

Hallo

du könntest 3 Arrays mit je 20 Elementen anlegen. Falls du uint32_t nimmst sind das in Summe 240 Byte. Ist kein Ding.

Dann werden aber auch immer die leeren Elemente durchlaufen, wenn ich nicht irre. Oder ist das zu vernachlässigen?

Hallo,

pauschal ja, kommt auch darauf was du machen willst. Müßtest konkreter werden.

je nach Situation werden unterschiedliche Kombinationen von Arrays ausgegeben. Derzeit wird immer die komplette Ausgabe aktualisiert, was unschön ist. Ich möchte erreichen, dass nur die Elemente, die neu sind, geladen, und nur der Teil der alten ist, gelöscht wird. Also muss die Ausgabe, vor jedem Laden, in einem Array(oder ähnlichem), zum vergleich, zwischengespeichert werden. In einem zweiten Array werden die neuen Elemente geladen und mit dem ersten, auf neu und alt, verglichen.

Hallo,

ich dachte eher du erzählst was du machen möchtest. Nicht wie du es machen möchtest.
Ganz grob klingt das nach einem Ringbuffer.

In diesem Fall geht es um den LED-Strip WS2812b. Vor jeder neuen Ausgabe werden die LED´s gelöscht - pixels.clear()(pixels.fill() ist nicht besser) und die neue Kombination angesteuert. Die Idee wäre, wenn das herausfiltern klappt, die nicht mehr gebrauchten LED´s raus- und die neuen reinzudimmen.

Ringbuffer?

Hallo,

es geht um byte Datentyp und immer im Wechsel neue Werte speichern und danach wieder auslesen?

Wenn du immer die zuletzt nicht gelesenen Werte nutzt, sollte das mit Ringbuffer funktionieren. Gelesen werden immer alle Werte die vorher noch nicht gelesen wurden. Die letzte Schreibposition und die letzte Leseposition rückt immer nach.

Oder mit Array, du weißt ja bestimmt wieviel Werte du neu reingeschrieben hast. Soviel liest du auch wieder aus. Merkst dir also die höchste Indexposition beim schreiben.

Solange du kein pixels.show machst, wird das auch nur intern in arrays geändert.

Beschreibe doch einmal die ganze Aufgabenstellung.

So häufig wie du den Begriff Array verwendest, drängt sich der Verdacht auf, dass du eventuell etwas anderes suchst :slight_smile:

ArduinoSTL zum Laufen kriegen ist evtl. eine andere Aufgabe als einen WS2812b-Strip anzusteuern.
So ein Strip hat eine feste Anzahl von Pixeln, die immer alle ( auch die aktuell unbenutzten ) angesteuert werden. Und dazu wird ein traditionelles Array benutzt.

Weiß nicht, ob das aufgeht.

Hier ein Beispiel:

Array1 = [0, 1, 2, 3];
Array2 = [32, 33, 34, 35];
Array3 = [17, 18, 19, 20];
Array4 = [49, 50, 51, 52];
Array5 = [3, 4, 6];

Ausgabe1: Array1, Array3, Array4
löschen
Ausgabe2: Array1, Array4, Array5

Ist bekannt. Funktioniert an sich auch wunderbar. Nur kanns schöner.

Es ist halt ein LED-Strip, bei dem ich LED´s ansteuere :smiley:
Weiß nicht, was du hören möchtest.

Muss ich den Befehl pixels.claer() aber nicht vor der nächsten Ausgabe schicken? Sonst leuchten doch, wenn ich nicht irre, auch die alten LED´s weiter.

Keine Ahnung, was das bedeuten soll. Und was hat das mit einem LED Strip zu tun?

Die Elemente in den jeweiligen Arrays sind die Piexel(Leds), die angesteuert werden.

Wann und warum du wann welche (also einfach alle w Wörter) LED du ansteuern willst.

Gibt es eine Logik dahinter?

Taste 1, 2, 3,´4 ,5.... -> unterscheidliche Kombinationen. Überschneiden sich Arrays auf den jeweiligen Tasten, sollen die LED´s, die wieder geladen werden würden, nicht ausgehen, die, die nicht in der neuen Kombination sind, sollen runtergedimmt werden und die neuen sollen aufdimmen.