Problema con programma di acquisizione dati

Ho scritto un programmino di acquisizione dati da PC.
Invio 2 byte per settare il numero di samples da acquisire e alti 2 byte per l’intervallo di tempo di campionamento.

Il codice che ho messo sull’arduino è riportato sotto.

Finchè mando questo stream di dati in esadecimale “000A000A” (10 sample, 10 ms di delay) tutto funziona.
Se invece mando tipo “00E0000A” (224 sample, 10 ms di delay) non parte. il led 13 nn si accende nemmeno. che c’è ke non va?

byte data[1024];

/* Read a char from the serial port */
char readSerialChar ()
{
  while (true)
  {
    if (Serial.available()>0)
    {
      return Serial.read();
    }
  }
}


void setup()
{
  // baud rate must be <=57600 
  Serial.begin(19200);
}

void loop()
{
  int nSample;
  int nDelay;
  nSample = readSerialChar()<<8;
  nSample += readSerialChar();
  nDelay = readSerialChar()<<8;
  nDelay += readSerialChar();

  int i;
  int temp;
  digitalWrite(13, HIGH);
  for (i=0; i<nSample; i++)
  {
    data[i] = ((unsigned int)analogRead(3) >>2) & 0xFF;
    delay(nDelay);
  }
  digitalWrite(13, LOW);  
  for (i=0; i<nSample; i++)
  {
    Serial.print(data[i], BYTE);
  }
}

Uhm... il primo problema l'ho risolto. Invece di usare readSerialChar() che restituisce un char ho rinominato la funzione in readSerialByte() facendogli restituire un unsigned char. (avevo notato ke il limite prima di incappare in problemi era proprio 127).

Il secondo, penso abbia a che fare con i limiti della ram dell'avr. Limitando il numero di campioni a 512 tutto funziona bene. se ne prendo 1024 c'è un problema, mi restituisce qualcosa che non ha alcun senso (gli forzo massa e vcc ma nn fa quello!)

Quanto potrei spingermi in alto come numero di campioni?

Altrimenti potrei fare acquisizione e simultaneo invio al pc, ma in tal caso c'è il rpoblema della seriale ke è asincrona...

Se non hai problemi di tempo per i campionamenti puoi inviare i primi 512 alla eeprom interna in modo da liberare spazio per i successivi e poi svuotarla quando richiedi da PC

http://www.arduino.cc/en/Reference/EEPROM

Attenzione che la eeprom interna ha un numero limitato di cicli di scrittura, 10000 quindi tienine conto.
Se ti serve per una applicazione permanente a lunga durata usa una versione di arduino con piu memoria interna:
duemilanove con 328
Arduino Mega
O cloni tipo sanguino ecc…

grazie. no beh nn ho voglia di scomodare la eeprom. è un programmino stupido. mi serve più che altro per fare un programma demo in Qt sul pc. Sto lavorando sulla seriale e sui grafici, e funziona sia sotto win ke su linux.