bwenox:
skips a ms sometimes.
I'd use TimerOne:
#include <TimerOne.h>
constexpr size_t NUMBER_OF_READINGS = 200;
constexpr uint32_t MICROS_BETWEEN_READINGS = 1000; // 1 millisecond
volatile int voltage[NUMBER_OF_READINGS];
volatile uint32_t timee[NUMBER_OF_READINGS];
volatile int pulseCount = 0;
void setup() {
Serial.begin(250000);
Timer1.initialize(MICROS_BETWEEN_READINGS);
Timer1.attachInterrupt(readPin);
Serial.println(F("Let's Go!"));
}
void loop() {
if (!pulseCount) {
Serial.println(F("Values:"));
for (int i = 0; i < 200; i++) {
Serial.print(F("Reading "));
Serial.print(i);
Serial.print("\tVoltage: ");
Serial.print(voltage[i]);
Serial.print("\tMicros: ");
Serial.println(timee[i]);
}
delay(10000); // <<<<<<<<<< holding here to slow the data
pulseCount = NUMBER_OF_READINGS;
Timer1.start();
}
}
void readPin(void) {
if(pulseCount--) {
voltage[pulseCount] = analogRead(A0);
timee[pulseCount] = micros();
} else {
Timer1.stop();
}
}