Hallo Leute,
ich hab das bisher hier von euch gelernte nun in folgendem Code umgesetzt:
int Zeitscheibe;
int i = 0;
int j = 0;
float Periodendauer = 0;
float SummePeriodendauer = 0;
float Umrechnung = 0.000001;
float Frequenz = 0;
volatile float m[100];
void setup()
{
Serial.begin(9600); //starten der seriellen Kommunikation
attachInterrupt(0,Interrupt,RISING); //wenn ein Signal von LOW nach HIGH an digital Pin 2 eingeht, wird die Interrupt-Routine "Interrupt" gestartet
}
void Interrupt() //Interrupt-Routine
{
m[i++] = micros(); //in das Array wird, wenn der Interrupt ausgelöst wird, die jeweilige Zeit seitdem das Programm gestartet wurde, in Mikrosekunden, gespeichert
}
void loop() //loop-Routine
{
if (millis() > Zeitscheibe ) // wird jede Sekunde aufgerufen
{
detachInterrupt(0); //Interrupt wird zur Auswertung des Arrays vorübergehend außer Kraft gesetzt
Zeitscheibe = millis()+1000; //Berechnung der neuen Größe der Zeitscheibe
for (j=0; j==i; j++)
{
SummePeriodendauer = SummePeriodendauer + (m[i+1]-m[i]); //Aufsummierung der Periodendauern zwischen den Interrupts
Periodendauer = SummePeriodendauer / i; //gemittelte Periodendauer innerhalb einer Sekunde in Mikrosekunden
Frequenz = 1 / (Periodendauer * Umrechnung); //Frequenzberechnung
Serial.print("Frequenz: "); //Ausgabe der gemittelten
Serial.println(Frequenz);//Frequenz pro Sekunde auf dem Serial Monitor
}
j = 0; //Zuruecksetzen der
i = 0; //Zaehlvariablen
attachInterrupt(0,Interrupt,RISING); //Interrupt kann wieder ausgeführt werden
}
}
Der Serial Monitor zeigt mir als Ausgabe wenn der Windmesser steht als Frequenz brav 0.00 an. Sobald ich ihn jedoch in Bewegung versetze, wird mir nix mehr ausgegeben, obwohl ich doch in der Auswertungsroutine (loop) extra den Interrupt während der Auswertung und der Ausgabe unterbinde.
Woran kann es liegen, dass mir nur "richtige" Werte ausgegeben werden, wenn der Windmesser steht?
P.S. Starte ich nur den Serial Monitor, bewege den Windmesser aber noch nicht, wird mir folgendes ausgegeben: Frequenz: nan
Woran kann das liegen?
Gruß Alex