Arduino Polska Forum
Obsługa 2 czujników halla - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino)
+--- Wątek: Obsługa 2 czujników halla (/watek-obs%C5%82uga-2-czujnik%C3%B3w-halla)



Obsługa 2 czujników halla - kellyq - 08-11-2020

Hej

Tworzę program do obsługi 2 czujników hala. Nie wiem czy mi to zadziała poprawnie. 

Jeden czujnik odpowiedzailny za zliczanie impólsów z przepływomierza z użyciem przerwania. Drugi zlicza czas pomiędzy impulsami i wyznacza prędkość. Osobno jedno i drugie działa, nie wiem jak się zachowa całość, mam tylko jeden czujnik. Możecie rzucić okiem?

Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,20,4);
#define hallPin 5


byte flowInterrupt = 0;   // 0 = digital pin 2
byte flowPin       = 2;   
float calibrationFactor = 4.0;
volatile byte flowCount;
unsigned long oldTime;
float predkosc;
float obwod_kola = 2.09;                        //tractor tire circum
byte ilosc_imp = 6;                             //pulses per revolution on sensor
float wycinek_kola = obwod_kola/ilosc_imp;     
float duration;
float dawka;
float wydatek;

  void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();

  pinMode(flowPin, INPUT);
  pinMode(hallPin, INPUT);
  digitalWrite(flowPin, HIGH);
  flowCount         = 0;
  wydatek          = 0.0;
  oldTime           = 0;
  attachInterrupt(flowInterrupt, flowCounter, FALLING);
}

  void loop() {

    if((millis() - oldTime) > 1000)   
  {
    detachInterrupt(flowInterrupt);   
    wydatek = ((1000.0 / (millis() - oldTime)) * flowCount) / calibrationFactor;
    oldTime = millis();
    // Reset the pulse counter so we can start incrementing again
    flowCount = 0;
    // Enable the interrupt again now that we've finished sending output
    attachInterrupt(flowInterrupt, flowCounter, FALLING);
   

    duration = pulseInLong(hallPin, HIGH);
    if(duration > 0){
    predkosc = (wycinek_kola/(duration*0.00001))*3.6;     //get km/h
    }else{
      predkosc = 0.00;
      }
    dawka = (wydatek*600)/(0.5 * predkosc);               //get litres per hectare

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(dawka, 1);
    lcd.print(" L/ha"); 
    lcd.setCursor(0, 3);
    lcd.print(predkosc, 1);
    lcd.print(" km/h");
  }   
  }


void flowCounter()
{
  // Increment the pulse counter for wydatek counting
  flowCount++;
}



RE: Obsługa 2 czujników halla - Jarewa0606 - 08-11-2020

Trochę do kitu, funkcja pulseIn może być zakłócona przez przerwania.... A tym samym okres morze być bardzo rozbieżny..


RE: Obsługa 2 czujników halla - kellyq - 08-11-2020

O faktycznie, a jak bym aktywował spowrotem przerwania np. poniżej funkcji pulsein, miało by to ręce i nogi? W sumie to niedopatrzenie.


RE: Obsługa 2 czujników halla - Jarewa0606 - 08-11-2020

No jest sens ale też i byś musiał oldtimer po pomiarze zresetować, wiec wyniki będziesz miał 1s+pulsein


RE: Obsługa 2 czujników halla - kellyq - 08-11-2020

No tak trzeba będzie zrobić.