2 Water flow sensor + UNO

Тема в разделе "Arduino & Shields", создана пользователем Мистер Кот, 27 мар 2016.

Метки:
  1. Добрый день, уважаемые форумчане.
    Закралась в скетче у меня ошибка, никак второй датчик работать не хочет.
    Помогите устроить так, чтобы данные считывались с двух датчиков потока воды.
    Заранее благодарен

    Исходный скетч брал отсюда: http://www.electroschematics.com/12145/working-with-water-flow-sensors-arduino/

    Код (C++):
    volatile int flow_frequency;
    volatile int flow_frequency2;
    float l_hour;
    float l_hour2;
    unsigned char flowsensor = 2;
    unsigned char flowsensor2 = 3;
    unsigned long currentTime;
    unsigned long cloopTime;

    void flow ()
    {
       flow_frequency++;
    }

    void rpm()
    {
    flow_frequency2++;
    }

    void setup()
    {
       pinMode(flowsensor, INPUT);
       pinMode(flowsensor2, INPUT);
     
       digitalWrite(flowsensor, HIGH);
       digitalWrite(flowsensor2, HIGH);
     
       Serial.begin(9600);
     
       attachInterrupt(0, flow, RISING);
       attachInterrupt(0, rpm, RISING);
       sei();
       currentTime = millis();
       cloopTime = currentTime;
     
    }
    void loop ()
    {
       currentTime = millis();
     
       if(currentTime >= (cloopTime + 1000))
       {
          cloopTime = currentTime; // Updates cloopTime
       
       
          l_hour = (flow_frequency / 5.5);
          l_hour2 = (flow_frequency2 / 5.5);
       
          flow_frequency = 0;
          flow_frequency2 = 0;
       
          Serial.print(l_hour, 1);
          Serial.print("\t");
          Serial.print(l_hour2, 1);
          Serial.print("\t");
          Serial.println(" L/minute");
       }
    }
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Код (C++):
    attachInterrupt(0, flow, RISING);
    attachInterrupt(0, rpm, RISING);
    А переменные flow_frequency и flow_frequency2 нужно инициализировать перед первым использованием.
     
    Мистер Кот нравится это.
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    volatile int flow_frequency1;
    volatile int flow_frequency2;
    float l_hour1;
    float l_hour2;
    const byte flowsensorPin = 2;
    const byte rpmsensorPin = 3;
    unsigned long currentTime;
    unsigned long cloopTime;

    void flow()
    {
      flow_frequency1++;
    }

    void rpm()
    {
      flow_frequency2++;
    }

    void setup()
    {
      pinMode(flowsensorPin, INPUT_PULLUP);
      pinMode(rpmsensorPin, INPUT_PULLUP);

      Serial.begin(9600);

      attachInterrupt(0, flow, RISING);
      attachInterrupt(1, rpm, RISING);
      sei();
      flow_frequency1 = 0;
      flow_frequency2 = 0;
      cloopTime =  millis();
    }

    void loop ()
    {
      currentTime = millis();

      if (currentTime >= (cloopTime + 1000))
      {
        cloopTime = currentTime; // Updates cloopTime

        l_hour1 = (flow_frequency1 / 5.5);
        l_hour2 = (flow_frequency2 / 5.5);

        flow_frequency1 = 0;
        flow_frequency2 = 0;

        Serial.print("Value1 = ");
        Serial.print(l_hour1, 1);
        Serial.print(" L/min\tValue2 = ");
        Serial.print(l_hour2, 1);
        Serial.print("\t");
        Serial.println(" L/min");
      }
    }
     
     
    arduino pls и Мистер Кот нравится это.
  4. Спасибо Вам огромное!
     
  5. arduino pls

    arduino pls Нуб

    День добрый, уважаемые, если вы ещё живы помогите мне запрограмировать ещё и третий такой же датчик
     
  6. arduino pls

    arduino pls Нуб

    можно ли ещё и третий запрограммировать ??
     
  7. asam

    asam Гик

    Можно. Добавь третий точно таким же образом как и второй был добавлен.
     
  8. vvr

    vvr Инженерище

    тогда нужно брать мегу
     
  9. asam

    asam Гик

    Можно и на Уно/нано если воспользоваться PinChangeInterrupt Library
     
  10. arduino pls

    arduino pls Нуб

    ребята, нету времени разбираться, если можете, помогите мне код написать
     
  11. parovoZZ

    parovoZZ Гуру

    в "Закажу проект".
     
  12. Limoney

    Limoney Гик

    Вы в "Закажу проект" не берете денег
     
  13. asam

    asam Гик

    500p
     
  14. akl

    akl Гуру

    там всего то надо записать по единичке в два регистра и потом в прерывании проверять состояние пина.
    быстрее будет самому разобраться чем ждать когда кто-то сделает. да еще и за деньги
    https://gist.github.com/Wollw/2598827

    вот тут кажется нормально разжевано https://tsibrov.blogspot.com/2019/06/arduino-interrupts-part2.html#Pin Change Interrupts
     
  15. Nekto_nikto

    Nekto_nikto Гик

    Почему бы не завести на форуме раздел ХАЛЯВА ЛОВИСЬ?
     
    parovoZZ нравится это.
  16. parovoZZ

    parovoZZ Гуру

    а ещё помнить, что прерывание реагирует на любой фронт)
     
  17. arduino pls

    arduino pls Нуб

    спасибо))
     
  18. Nekto_nikto

    Nekto_nikto Гик

  19. fogary

    fogary Гик

    Понятно, что уже давно не актуально, но все же.
    Код (C++):
    attachInterrupt(0, flow, RISING);
    attachInterrupt(0, rpm, RISING);
    Разве так два прерывания висят не одном порте?
    Из описания функции (для Uno), номер прерывания 0 - для порта 2; 1 - для порта 3.
     
  20. Nekto_nikto

    Nekto_nikto Гик

    Вообще то одно, то что было назначено последним, т.к. эта функция тупо прописывает точку входа в обработчик прерывания, а она может быть только одна и сначала она прописывает flow, а потом переназначает rpm.