Speicherprobleme

Wow. Hätte nicht gedacht, dass ich das so einfach reproduzieren kann. Es muss mit dem jagged Array zusammenhängen und hat vielleicht etwas damit zu tun wie der Speicher angelegt wird. Genau weiß ich es aber nicht.

Und wenn ich den Test-Code anders gemacht hätte, wäre mir es auch aufgefallen:

  for(int current_melody = 0; current_melody < 2; current_melody++)
  { 
    for(int i = 0; i < 15; i++)
    {
      Serial.println(pgm_read_byte_near(&(melodies[current_melody][i])), HEX);
    }
    Serial.println();
  }

Es geht sobald eine der beiden Index-Variablen fest ist. Wenn beide variabel sind, geht es schief. Sehr seltsam.

Es geht aber mit einem normalen zwei-dimensionalen Array:

const byte melodies[][15] PROGMEM =
{
  {
    0x00, 0x90, 0x2b,
    0x81, 0x3e, 0x90, 
    0x37, 0x32, 0x80, 
    0x2b, 0x00, 0x80, 
    0x37, 0x20, 0xff  
  },

  {
    0x11, 0x12, 0x13,
    0x14, 0x15, 0x16, 
    0x17, 0x18, 0x19,
    0x20, 0x21, 0x22, 
    0x23, 0x24, 0x25
  }
};

Das könnte ein Workaround sein. Du kannst die zweite Dimension im Array so groß machen wie dein größtes Array. Dann verschwendest du bei den kleineren Arrays natürlich Speicher. Nicht so toll, aber im Flash vielleicht auch nicht so schlimm. Kommt drauf an wie viel du abspeichern möchtest.