Ich habe ein Anemometer und schalte bei jeder Umdrehung einen Reed-Kontakt.
Da ich die Umdrehungen pro Minute messen muss wollte ich fragen ob ihr eine Möglichkeit kennt ein Messintervall über eine Minute zu programmieren.
der Code für den Counter funktioniert schon:
int reedPin = 2;
int count = 0;
int actualState = 0;
int lastState = 0;
void setup()
{
Serial.begin(9600);
pinMode(reedPin, INPUT);
}
void loop()
{
readReed();
delay(10);
Serial.print("Counter:");
Serial.println(count);
}
void readReed()
{
actualState = digitalRead(reedPin);
if (actualState == 1 && lastState == 0)
{
count++;
lastState=actualState;
}
if (actualState == 0)
{
lastState=0;
}
{;}
}
mit millis()
Du speicherst den aktuellen millis()-Wert in einer unsigned long Variablen ab und beginnst mit der Messung . Dann mißt DU solange die Impulse wie millis() minus alten millis-Wert kleiner als 60000 ist.
Meist ist aber besser die Zeit zwischen 2 Impulsen zu messen und daraus die Drehgeschwindigkeit berechnen. So erhält man schneller Meßwerte weil die Messung schneller geht.
Das ist wenn man alle X Zeiteinheiten was machen will. Das kann man rumdrehen zu:
void loop()
{
unsigned long previousMillis = millis();
while(millis() - previousMillis < 60000L)
{
//hier Code der eine Minute lang ausgeführt werden soll
}
}
EDIT: muss natürlich while sein :s
Das sollte man aber in einem Interrupt machen und dann nur alle X Zeiteinheiten den Wert auslesen.