/* 
Opera in congiunzione con Processing (programma adc_arduino_5)
Quando Processing invia il comando di start (numero di buffers da acquisire, bufNum):
- Acquisisce adc e spedisce dati a Processing sulla seriale in buffers da 50 bytes (bufLen) l'uno
Quindi si acquisiscono bufLen*bufNum/2 punti
*/
int ledPin = 13;      //Collegato al led sulla scheda
int signalPin = 12;   //M. Raggi 13/07/2017
int bufNum = 0;
int bufLen = 50;
int npoint = 0;
int dataLen = 0;
int Delay   = 20;

void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT); 
digitalWrite(ledPin, LOW);

//pinMode(pin, OUTPUT);
//digitalWrite(pin,HIGH);

pinMode(signalPin,OUTPUT);    //M. Raggi 13/07/2017
digitalWrite(signalPin,LOW);  //M. Raggi 13/07/2017
}

void loop() {
  byte buff[bufLen];

 
 if(bufNum > 0)
 {   
   dataLen = bufNum*bufLen;
   byte data[dataLen];  
   
   digitalWrite(ledPin, HIGH); 
   npoint = dataLen/2;

/* Legge ADC */
        int ii = 0;
        for (int i = 0; i < npoint; i++)
        { 
         if(i==100){
            digitalWrite(signalPin,HIGH); // Apre un gate sul pin 12 digitale all'interno della finestra di lettura ADC
         }
         if(i==100+Delay)digitalWrite(signalPin,LOW);  //chiude il gate sul pin 12
        //crea un segnale di lunghezza sufficiente a caricare il condensatore del filtro RC 100KOhm 100nF
        // la tipica lunghezza e' di 110us per ogni lettura di analogread quindi con 20 letture circa 2ms
        
         int value  = analogRead(3);
         data[ii]   = highByte(value);
         data[ii+1] = lowByte(value);
         ii = ii +2;
          /* Serial.println(value); */
         }     
   
 /* Invia i dati a Processing */  
 //  return;
    for (int  k=0; k < bufNum; k++)
    {
      for(int j=0; j < bufLen; j++)
      {
        int jj = bufLen*k + j;
        buff[j] = data[jj];
      }
        Serial.write(buff, bufLen); 
        delay(200);
    }
       digitalWrite(ledPin, LOW);
       bufNum = 0;       // azzera bufNum quando ha finito   
       
 }

}
void serialEvent()
{
  if(Serial.available() > 0)
  {
  char val = Serial.read();
  bufNum = int(val);
  }
}