/* 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); } }