Satte variablerna till volatile enligt tidigare diskussion och då gick det att stänga av studsen enkelt och snabbt. Men...Interrupten aktiveras ju likförbannat och den första mikrofonen stör väl ut den andra mikrofonens interrupt på nån vänster. Eller så är min diskbänk betydligt större än jag trott, närmare bestämt 17m!
Sen provade jag en annan grej och då fick jag svarstider på 16us, vilket motsvarar ett avstånd på ca 6mm. Inte coolt.
Till sist provade jag att vålda av interrupten i samband med att de triggades. Det gav faktiskt hyfsade värden. Jag har mikrofonerna 50cm från varandra och jag klappar bortanför den ena så att tiden mellan mikrofonerna alltid ska vara samma. Första mätserien gav ett snitt på 58cm med 12cm standrardavvikelse och andra serien gav 81cm med en standardavvikelse på 27cm. Fubar m a o.
Idéer?
Den senaste iterationen av koden:
Kod: Markera allt
const byte interruptPin1=2;
const byte interruptPin2=3;
volatile long mictime1=0;
volatile long mictime2=0;
volatile bool bounce1=false;
volatile bool bounce2=false;
volatile long time_now;
void setup() {
Serial.begin(115200);
//starta interrupten
pinMode(interruptPin1, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin1), blink1, CHANGE);
pinMode(interruptPin2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin2), blink2, CHANGE);
}
void loop() {
noInterrupts();
Serial.print("Mic1: ");
Serial.print(mictime1);
Serial.print(", Mic2: ");
Serial.println(mictime2);
Serial.print(", Diff: ");
Serial.println(mictime2-mictime1);
mictime1=0;
mictime2=0;
bounce1=true;
bounce2=true;
interrupts();
//koppla på interrupten
//starta interrupten
pinMode(interruptPin1, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin1), blink1, CHANGE);
pinMode(interruptPin2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin2), blink2, CHANGE);
time_now = millis();
while(millis() < time_now + 1000){}
//wait approx. 1000 ms
}
void blink1(){
if (bounce1=true) {
mictime1=micros();
bounce1=false;
detachInterrupt(digitalPinToInterrupt(2));
}
}
void blink2(){
if (bounce2=true) {
mictime2=micros();
bounce2=false;
detachInterrupt(digitalPinToInterrupt(3));
}
}




