Array per EEProm definieren?

Ich habe ein Array mit

const byte numberOfBeams = 13;
const byte beam[numberOfBeams];

definiert. Das funktioniert.
Nun möchte ich "numberOfBeams" aber aus dem EEProm auslesen und mit dem Wert das Array definieren. Das führt aber zu einem Fehler.

const byte numberOfBeams = EEPROM.read(0x0000);
const byte beam[numberOfBeams];

Der EEProm Wert kann zur Laufzeit geändert werden, danach erfolgt aber grundsätzlich ein Neustart des Programms, d.h. das Array wird NIE zur Laufzeit umdefiniert, etc.

Wie kann ich das bewerkstelligen?

Danke im Voraus,

Gucky.

Das hängt davon ab, was du wirklich willst.

Die klassische Gegen-Frage:
Wofür willst du das wissen?

Was soll mit dem alten Array passieren,

  • wenn es kleiner wird
  • wenn es größer wird
    ?
    Wenn das keine Rolle spielt:
    Du kannst in Setup ein Array auf dem Heap anlegen
    new
#include <EEPROM.h> 

constexpr size_t numberOfBeams {13};
byte EEMEM eebeam[numberOfBeams];// daten im EEPROM
byte rambeam[numberOfBeams];// daten im RAM


void setup() 
{
  EEPROM.get(int(eebeam),rambeam); // lesen
 // EEPROM.put(int(eebeam),rambeam); // schreiben
}

void loop() 
{

}

Das wird verworfen und das Gerät wird dann neu gestartet (bisher).

Es handelt sich um ein elektr. Musikinstrument, und "numberOfBeams" legt lie Größe der "Klaviatur" fest, die je nach Anwendungsfall zwischen 6 und 13 liegen kann.

Wenn man das Array auch zur Laufzeit umdefinieren kann, wäre das natürlich noch eleganter, muss aber nicht sein. Diese Länge kann man in den Settings des Gerätes einstellen und der Wert wird im EEProm hinterlegt und beim Start dann wieder ausgelesen und da hängt es eben (noch).
Arrarys sind nicht so meine Stärke :wink:
Ich bin aber auch kein blutiger Anfänger mehr, was Arduinos angeht.

Gucky.

Du könntest das ganze EEPROM wie ein byte Array nutzen!

#include <EEPROM.h> 



void setup() 
{
  Serial.begin(9600);

  EEPROM[22] = 6; // an Adresse 22 schreiben
  EEPROM[22]++; // Wert im EEPROM erhöhen
  Serial.println(EEPROM[22]); // lesen und eine 7 ausgeben
}

void loop() 
{

}

Wenn du eh Platz für bis zu 13 brauchst, dann nimm die doch und hol dir die aktuell verwendete Länge aus dem im EEPROM gespeicherten Wert statt über sizeof.

Oder ist es hilfreich, bei einer kleineren numberOfBeams den RAM für etwas anderes zu verwenden, das bei einem größeren numberOfBeams dann eben nicht geht?
(Kann mir nicht vorstellen, was du durch ein kleineres Array erreichen kannst... )

Stimmt auch kopfklatsch :wink:
Der RAM spielt überhaupt keine Rolle.
Ich definiere einfach das Array mit 13 (dem Maximalwert) und benutzte eine neue Variable, um mit dem tatsächlichen Wert zu arbeiten.

Manchmal braucht es eben den berühmten "Klaps vorn Hinterkopf" :wink:

Danke Euch,

Gucky,

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.