Hallo,
ein paar Sachen, die mir aufgefallen sind:
int Zeitscheibe; muss heißen:
unsigned long Zeitscheibe; weil die Funktionen millis() und micros() einen unsigned long Wert liefern.
for (j=0; [b]j==i[/b]; j++)
{
SummePeriodendauer = SummePeriodendauer + ([b]m[i+1][/b]-m[i ]);
Da stecken drei Fehler drin:
- Die for-Schleife wird durchlaufen, solange die Bedingung "true", also erfüllt ist. Deine Bedingung i==j ist aber nur erfüllt, wenn das Array leer ist, also bei Windstärke Null!.
- Du fragst in der Schleife das Array mit "i" ab, deine Laufvariable ist aber "j"
- Du fragst in der Schleife eine Arrayplatz "j+1" ab, als darf j nur bis "i-1" laufen.
Also:
for (j=0; [b]j<i[/b]; j++)
{
SummePeriodendauer = SummePeriodendauer + (m[[color=maroon]j[/color]+1]-m[[color=maroon]j[/color]]);
Aber dies Schleife ist meiner Meinung sowieso überflüssig:
Du mußt nicht die Dauer jeden einzelnen Pulses ausrechnen und diese Summieren.
SummePeriodendauer = m[i]-m[0]; erfüllt genau den gleichen Zweck!
Schreib dir mal eine Reihe von Zahlen auf und rechne es nach.
j = 0; //Zuruecksetzen der brauchts nicht. j wird autmatisch in der for-schleife zurückgesetzt.
Bei der Umrechnung
Frequenz = 1 / (Periodendauer * Umrechnung);
Bin ich mir nicht sicher. Aber ich weiß, dass der Arduino mit sehr kleinen Zahlen Probleme hat.
Ich würde das eher so lösen:
Umrechnung = 1000000;
Frequenz = Umrechnung / Periodendauer ;
Generell:
Wenn deine Code Sachen macht, die du nicht verstehst, da fragt mit "Serial.print" an den verschiedenen Stellen die zwischenergebnisse ab.
z.B. würde ich mir mal den Inhalt des Array anzeigen lassen. Also in der Zeitscheibe als erstes:
for (j=0; j<=i; j++)
{
Serial.println(m[j]);
}
Und dann aber auch mal die Zwischenergebnisse jeweils ansehen:
Serial.print("SummePeriodendauer: ");Serial.println(SummePeriodendauer);
und
Serial.print("Periodendauer: ");Serial.println(Periodendauer);
Das sind dann Hilfen um rauszufinden, was der Arduino überhaupt rechnet.
und, was mir gerade noch auffällt:
Deine for-Schleife ist erst sehr spät geschlossen.
Ich denke da fehlt eine geschweifte Klammer:
for (j=0; j==i; j++)
{
SummePeriodendauer = SummePeriodendauer + (m[i+1]-m[ i]);
}
Grüße
Gunther