Witam
Zmagam się z programem i nie bardzo wiem jak z tego wybrnąć. Mianowicie program działa tak jak chcę poza momentem w którym następuje wykasowanie licznika przerwań i ponowne zliczanie. Wtedy na ułamek sekundy LED gaśnie mimo ciągłego przepływu i zliczania impulsów. Zauważyłem że od czasu wyzerowania licznika do kolejnej pętli nie zlicza impulsów. Gdzie zrobiłem błąd i jak zlikwidować gaśnięcie LEDa?
Zmagam się z programem i nie bardzo wiem jak z tego wybrnąć. Mianowicie program działa tak jak chcę poza momentem w którym następuje wykasowanie licznika przerwań i ponowne zliczanie. Wtedy na ułamek sekundy LED gaśnie mimo ciągłego przepływu i zliczania impulsów. Zauważyłem że od czasu wyzerowania licznika do kolejnej pętli nie zlicza impulsów. Gdzie zrobiłem błąd i jak zlikwidować gaśnięcie LEDa?
Kod:
const int flowPin = 2; // przepływomierz podłączony do pinu 2
const int wiatrak = 5;
void(*resetFunc) (void) = 0;
volatile unsigned int flowCount = 0; // zmienna do przechowywania liczby impulsów (volatile oznacza, że zmienna jest modyfikowana w przerwaniu)
unsigned long flowMillis = 0; // zmienna do przechowywania czasu
unsigned long aktualnyCzas = 0;
unsigned long opuznienie = 1;
unsigned long opuznienie2 = 1;
int woda = 0;
const unsigned long czasReset = 604800000UL;
unsigned long czasRReset = 0;
void setup() {
Serial.begin(9600);
pinMode(flowPin, INPUT_PULLUP); // ustawienie pinu 2 jako wejście
pinMode(wiatrak, OUTPUT);
attachInterrupt(digitalPinToInterrupt(flowPin), flowISR, RISING); // dodanie przerwania do pinu 2 na stan wysoki
digitalWrite(wiatrak, LOW);
czasRReset = millis();
opuznienie = millis();
opuznienie2 = millis();
pinMode(13, OUTPUT);
}
void loop() {
aktualnyCzas = millis();
Serial.print("1 przeplyw = ");
Serial.println(flowCount);
woda = flowCount;
Serial.print("3 woda =");
Serial.println(woda);
if (woda >1){
Serial.println("4 otwarty wiatrak");
digitalWrite (wiatrak, HIGH);
digitalWrite (13,HIGH);
woda = 0;
}
else {
Serial.println("5 Else ");
digitalWrite (wiatrak,LOW);
digitalWrite (13, LOW);
}
if (aktualnyCzas - opuznienie >= 300) {
Serial.println("6 kasuj czas ");
opuznienie = aktualnyCzas;
flowCount = 0;
}
if (aktualnyCzas - czasRReset >= czasReset) {
resetFunc();
}
}
void flowISR() {
flowCount++; // zwiększ liczbę impulsów o 1
}