Hallo liebes Forum,
ich möchte mittels einer Gabellichtschranke die stationär positioniert ist die aktuelle Geschwindigkeit einer sich bewegenden Zahnstange bestimmen. Testverläufe haben ohne Probleme ein HIGH/LOW Signal angezeigt, der Sensor funktioniert also.
Nun zu meinem Problem:
Mein Code bisher:
#define black 2 //
volatile float t0, t1;
volatile float delta, speedval;
//Für Interrupt
const float p = 1.57; //Teilung = Pi * Modul der Zahnstange (0.5) gerundet auf zwei Nachkommastellen
void setup() {
Serial.begin(9600);
pinMode(black, OUTPUT);
//**********************************************************************************
////Lets interrupt this shiat
//Bei freier Lichtschranke ist der Ausgabewert 1
attachInterrupt(0, getTime, LOW); //0 corresponds to D2 (Arduino Mega), FALLING ->Immer wenn ein Zahn die Schranke blockiert soll die Geschwindigkeit gemessen werden
attachInterrupt(0, calcSpeed, HIGH);
//**********************************************************************************
}
void loop() {
Serial.println(t0);
Serial.print(" ");
Serial.println(t1);
//Testen
//Serial.print(digitalRead(black));
//Serial.print(" ");
//Serial.println(speedval);
//Serial.print("DeltaTime: ");
//Serial.print(delta);
//Serial.print(" ****** ");
//Serial.print("Speed: ");
//Serial.println(speedval);
//Serial.println(blaval);//Gibt ON/OFF aus 1=Kein Objekt, 0=Objekt - in der Lichtschranke
//Ausgabewert [0:Objekt in Lichtschranke/1:Freie Lichtschranke]: "); //Nur zum Testen des Gesamtcodes
//**********************************************************************************
//Interrupt Section
void calcSpeed(){
t1 = millis();
delta= (t1-t0)/1000; //Delta in Sec.
speedval = p/(delta); //Teilung durch deltaTime
}
void getTime(){
t0 = millis();
}
//**********************************************************************************
Meine calcSpeed Function funktioniert nicht und das hat damit zu tun, dass sich der t0 Wert nicht erhöht wie er sollte während das beim t1 Wert kein Problem ist. Wo ist da der Gedankensalat/-fehler bei mir?
- Gibt es eventuell bessere Möglichkeiten die Geschwindigkeit herauszubekommen, gerade wenn der Code eigentlich länger ist und die Interrupts "dauernd" Kapazitäten beanspruchen?