[Risolto] Lunghezza massima di caratteri in matrice

Hai ragione. Avevo cominciato con una domanda semplice per avere eventuali conferme da qualcun altro che abbia avuto lo stesso problema. Eccolo: (l'ho diviso in schede per facilitarmi la lettura durante l'elaborazione)

// ---------------------- PRIMA SCHEDA:

#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <avr/pgmspace.h>
LiquidCrystal lcd(8,9,10,11,12,13); // RS,EN,D4,D5,D6,D7
int x=0; // Per i cicli For.
int z=0;
int zo=0; // Valore precedente di z.
int nSanti=0; // Numero dei santi nell'elenco (vengono cntati all'inizio).
byte LD=0; // Numero del LED da accendere in SANTI.
char Santo[70]; // Per copiare la stringa del Santo (1 carattere = 2 byte).
String Santostr="abcdefghijabcdefghijabcdefghij";

/* 2.2 OK Nomi corti
 *  
 * 2.4 OK Nomi lunghi fino a 27 cratteri su 2 righe (14 car. sulla prima riga).
 * Scrivendo una stringa più lunga di 27 caratteri si blocca il ciclo! (???)
 * 
 * Ho provato a fare la versione con esclusione dei nomi già usciti, usando Zeta[z],
 * ma l'ultimo nome non esce: mettendone solo 3, ne escono solo 2.
 */

// ---------------------- SCHEDA a_nomi:

const char Santo1[]  PROGMEM="Andrea";
const char Santo2[]  PROGMEM="Maria";
const char Santo3[]  PROGMEM="Carla";
const char Santo4[]  PROGMEM="Antonella";
const char Santo5[]  PROGMEM="Antonio";
const char Santo6[]  PROGMEM="Giuseppe";
const char Santo7[]  PROGMEM="Alessandra";
const char Santo8[]  PROGMEM="Francesco";
const char Santo9[]  PROGMEM="Attilio";
const char Santo10[] PROGMEM="Chiara";
const char Santo11[] PROGMEM="Paola";
const char Santo12[] PROGMEM="Stefano";
const char Santo13[] PROGMEM="Filippo Neri";
const char Santo14[] PROGMEM="Matteo";
const char Santo15[] PROGMEM="Marco";
const char Santo16[] PROGMEM="Luca";
const char Santo17[] PROGMEM="Giovanni";
const char Santo18[] PROGMEM="Lucia";
const char Santo19[] PROGMEM="Cristina";
const char Santo20[] PROGMEM="Paolo";
const char Santo21[] PROGMEM="Antonello";
const char Santo22[] PROGMEM="Pio";
const char Santo23[] PROGMEM="Teresa";
const char Santo24[] PROGMEM="Giovanni Paolo  II";
const char Santo25[] PROGMEM="Francesca Cabrini";
const char Santo26[] PROGMEM="Federica";
const char Santo27[] PROGMEM="Sara";
const char Santo28[] PROGMEM="Simone";
const char Santo29[] PROGMEM="Francesca  Romana";
const char Santo30[] PROGMEM="Basilio";
const char Santo31[] PROGMEM="Bernardo";
const char Santo32[] PROGMEM="Agnese";
const char Santo33[] PROGMEM="Tommaso";
const char Santo34[] PROGMEM="Biagio";
const char Santo35[] PROGMEM="Girolamo";
const char Santo36[] PROGMEM="Gabriele";
const char Santo37[] PROGMEM="Costantino";
const char Santo38[] PROGMEM="Giorgio";
const char Santo39[] PROGMEM="Michele";
const char Santo40[] PROGMEM="Raffaele";
const char Santo41[] PROGMEM="Luigi Maria   Gr.de Monfort";
const char Santo42[] PROGMEM="Caterina";
const char Santo43[] PROGMEM="Atanasio";
const char Santo44[] PROGMEM="Giacomo";
const char Santo45[] PROGMEM="Ignazio";
const char Santo46[] PROGMEM="Pietro";
const char Santo47[] PROGMEM="Bernardo";
const char Santo48[] PROGMEM="Agostino";
const char Santo49[] PROGMEM="Giovanna      d'Arco";
const char Santo50[] PROGMEM="Maria Goretti";
const char Santo51[] PROGMEM="Camillo       de Lellis";
const char Santo52[] PROGMEM="Lorenzo";
const char Santo53[] PROGMEM="Gioacchino";
const char Santo54[] PROGMEM="Anna";
const char Santo55[] PROGMEM="Gaetano";
const char Santo56[] PROGMEM="Elena";
const char Santo57[] PROGMEM="Alfredo";
const char Santo58[] PROGMEM="Monica";
const char Santo59[] PROGMEM="Nicola    da Tolentino";
const char Santo60[] PROGMEM="Matteo";
const char Santo61[] PROGMEM="Maurizio";
const char Santo62[] PROGMEM="Cosma e       Damiano";
const char Santo63[] PROGMEM="Tommaso";
const char Santo64[] PROGMEM="Cecilia";
const char Santo65[] PROGMEM="Crisogono";
const char Santo66[] PROGMEM="Francesco     Saverio";
const char Santo67[] PROGMEM="Ambrogio";
const char Santo68[] PROGMEM="Rita da Cascia";
const char Santo69[] PROGMEM="Pietro e Paolo";
const char Santo70[] PROGMEM="";
const char Santo71[] PROGMEM="";
const char Santo72[] PROGMEM="";
const char Santo73[] PROGMEM="";
const char Santo74[] PROGMEM="";
const char Santo75[] PROGMEM="";
const char Santo76[] PROGMEM="";
const char Santo77[] PROGMEM="";
const char Santo78[] PROGMEM="";
const char Santo79[] PROGMEM="";
const char Santo80[] PROGMEM="";
const char Santo81[] PROGMEM="";
const char Santo82[] PROGMEM="";
const char Santo83[] PROGMEM="";
const char Santo84[] PROGMEM="";
const char Santo85[] PROGMEM="";
const char Santo86[] PROGMEM="";
const char Santo87[] PROGMEM="";
const char Santo88[] PROGMEM="";
const char Santo89[] PROGMEM="";
const char Santo90[] PROGMEM="";
const char Santo91[] PROGMEM="";
const char Santo92[] PROGMEM="";
const char Santo93[] PROGMEM="";
const char Santo94[] PROGMEM="";
const char Santo95[] PROGMEM="";
const char Santo96[] PROGMEM="";
const char Santo97[] PROGMEM="";
const char Santo98[] PROGMEM="";
const char Santo99[] PROGMEM="";
const char Santo100[] PROGMEM="";

PGM_P const Puntatore[] PROGMEM ={
Santo1, Santo2, Santo3, Santo4, Santo5, Santo6, Santo7, Santo8, Santo9,
Santo10, Santo11, Santo12, Santo13, Santo14, Santo15, Santo16, Santo17, Santo18, Santo19,
Santo20, Santo21, Santo22, Santo23, Santo24, Santo25, Santo26, Santo27, Santo28, Santo29,
Santo30, Santo31, Santo32, Santo33, Santo34, Santo35, Santo36, Santo37, Santo38, Santo39,
Santo40, Santo41, Santo42, Santo43, Santo44, Santo45, Santo46, Santo47, Santo48, Santo49,
Santo50, Santo51, Santo52, Santo53, Santo54, Santo55, Santo56, Santo57, Santo58, Santo59,
Santo60, Santo61, Santo62, Santo63, Santo64, Santo65, Santo66, Santo67, Santo68, Santo69,
Santo70, Santo71, Santo72, Santo73, Santo74, Santo75, Santo76, Santo77, Santo78, Santo79,
Santo80, Santo81, Santo82, Santo83, Santo84, Santo85, Santo86, Santo87, Santo88, Santo89,
Santo90, Santo91, Santo92, Santo93, Santo94, Santo95, Santo96, Santo97, Santo98, Santo99,
Santo100};


// ---------------------- SCHEDA b_Setup:

void setup()
{
pinMode(4,INPUT); // Interruttore suono Sì/No (1:Sì)
pinMode(4,INPUT_PULLUP);
pinMode(5,INPUT); // Encoder - Pulsante.
pinMode(5,INPUT_PULLUP);
pinMode(7,OUTPUT);
pinMode(A0,OUTPUT);
digitalWrite(A0,0);
pinMode(A1,OUTPUT); // LED 1
pinMode(A2,OUTPUT); // LED 2
pinMode(A3,OUTPUT); // LED 3
pinMode(A4,OUTPUT); // LED 4
pinMode(A5,OUTPUT); // LED 5

lcd.begin(16,2);
lcd.clear(); lcd.print(F("   Estrattore"));
lcd.setCursor(0,1); lcd.print(F("    di Santi"));
if(PIND&0x10)tone(7,1000,15);
char Santo[]="Qualcosa";
z=1;
while(strlen(Santo)>0)
  {
  strcpy_P(Santo, (PGM_P)pgm_read_ptr(&(Puntatore[z])));
  nSanti+=1; z+=1;
  }
  LD=1;
  SLED();
while(digitalRead(5)==0){delay(500);} // Attende che venga lasciato l'encoder.
}


// ---------------------- SCHEDA c_loop:

void loop()
{
while(digitalRead(5)==1); // Attende che venga premuto l'encoder.
while(digitalRead(5)==0)
  {
  RND1:
  z=random(0,nSanti); // da 0 a nSanti-1, come gli elementi dell'array.
  if(z==zo) goto RND1;
  scriveSanto();
  SLED();
  delay(60);
  }
  
LD=3;  
for(x=1; x<11; x++)
  {
  RND2:
  z=random(0,nSanti); // da 0 a nSanti-1, come gli elementi dell'array.
  if(z==zo) goto RND2;
  scriveSanto();
  SLED();
  delay(60);
  }
  
randomSeed(millis());
for(x=0; x<6; x++)
  {
  RND3:
  z=random(0,nSanti); // da 0 a nSanti-1, come gli elementi dell'array.
  if(z==zo) goto RND3;
  scriveSanto();
  SLED();
  delay(200+150*x);
  }

RND4:
z=random(0,nSanti); // da 0 a nSanti-1, come gli elementi dell'array.
if(z==zo) goto RND4;
scriveSanto();
SLED();
delay(1150);

RND5:
z=random(0,nSanti); // da 0 a nSanti-1, come gli elementi dell'array.
if(z==zo) goto RND5;
scriveSanto();
delay(100);
for(x=1; x<6; x++) // Fa lampeggiare 3 volte i 5 LED
  {
  PORTC|=B00111110;
  delay(20);
  PORTC&=B11000001;
  delay(100);
  }

LD=0;
while(digitalRead(5)==0) {delay(500);}

} // END loop


// ---------------------- SCHEDA d_funzioni:

void scriveSanto()
{
zo=z;
strcpy_P(Santo, (PGM_P)pgm_read_ptr(&(Puntatore[z])));
if(PIND&0x10)tone(7,1000,15);
lcd.clear(); lcd.print("S.");
Santostr=String(Santo);
lcd.print(Santostr.substring(0,14));
lcd.setCursor(0,1); lcd.print(Santostr.substring(14,30));
LD+=1;
}

void SLED()
{
if(LD>5)LD%=5; if(LD==0)LD=5;
  //  LED 54321-              LED 54321-
PORTC&=B11000001|1<<LD; PORTC|=B00000000|1<<LD;
}

L'hardware è quello del mio contatore Geiger, perfettamente funzionante, cun un ATmega328p su millefori con quarzo a 16MHz, LCD su I/O 8...13, pulsante su I/O 5 verso massa, interruttore su I/O 4 verso massa. Lo programmo mediante USBASP. Questo è lo schema completo: