Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
- // which pin to use for reading the sensor? can use any pin!
- #define FLOWSENSORPIN 2
- // count how many pulses!
- volatile uint16_t pulses = 0;
- // track the state of the pulse pin
- volatile uint8_t lastflowpinstate;
- // you can try to keep time of how long it is between pulses
- volatile uint32_t lastflowratetimer = 0;
- // and use that to calculate a flow rate
- volatile float flowrate;
- // Interrupt is called once a millisecond, looks for any pulses from the sensor!
- SIGNAL(TIMER0_COMPA_vect) {
- uint8_t x = digitalRead(FLOWSENSORPIN);
- if (x == lastflowpinstate) {
- lastflowratetimer++;
- return; // nothing changed!
- }
- if (x == HIGH) {
- //low to high transition!
- pulses++;
- }
- lastflowpinstate = x;
- flowrate = 1000.0;
- flowrate /= lastflowratetimer; // in hertz
- lastflowratetimer = 0;
- }
- void useInterrupt(boolean v) {
- if (v) {
- // Timer0 is already used for millis() - we'll just interrupt somewhere
- // in the middle and call the "Compare A" function above
- OCR0A = 0xAF;
- TIMSK0 |= _BV(OCIE0A);
- } else {
- // do not call the interrupt function COMPA anymore
- TIMSK0 &= ~_BV(OCIE0A);
- }
- }
- void setup() {
- Serial.begin(9600);
- Serial.print("Flow sensor test!");
- lcd.begin(20, 4);
- pinMode(FLOWSENSORPIN, INPUT);
- digitalWrite(FLOWSENSORPIN, HIGH);
- lastflowpinstate = digitalRead(FLOWSENSORPIN);
- useInterrupt(true);
- }
- void loop() // run over and over again
- {
- lcd.setCursor(0, 0);
- lcd.print("Pulses:"); lcd.print(pulses, DEC);
- lcd.print(" Hz:");
- lcd.print(flowrate);
- //lcd.print(flowrate);
- Serial.print("Freq: "); Serial.println(flowrate);
- Serial.print("Pulses: "); Serial.println(pulses, DEC);
- // if a plastic sensor use the following calculation
- // Sensor Frequency (Hz) = 7.5 * Q (Liters/min)
- // Liters = Q * time elapsed (seconds) / 60 (seconds/minute)
- // Liters = (Frequency (Pulses/second) / 7.5) * time elapsed (seconds) / 60
- // Liters = Pulses / (7.5 * 60)
- float liters = pulses;
- liters /= 7.5;
- liters /= 60.0;
- // _________________________ AB HIER: _________________________________
- float z;
- z = flowrate * 60 / 400; // hier kommt 5-6 liter/min raus, müssten aber ca. 2,67 l/min sein
- lcd.setCursor(0,2);
- lcd.print(z,2);
- delay(300); //damit das LCD Zeit hat, die Werte auch anzuzeigen
- /*
- // if a brass sensor use the following calculation
- float liters = pulses;
- liters /= 8.1;
- liters -= 6;
- liters /= 60.0;
- */
- Serial.print(liters); Serial.println(" Liters");
- lcd.setCursor(0, 1);
- lcd.print(liters); lcd.print(" Liters ");
- delay(100);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement