Три и больше датчиков холла к ардуино уно

Тема в разделе "Закажу проект", создана пользователем arduino pls, 4 окт 2020.

  1. arduino pls

    arduino pls Нуб

    Добрый день, у меня есть идея подключить много датчиков Холла (название внизу) для личного использования, мне нужен только код, готов заплатить около 500 руб
     
    Последнее редактирование: 4 окт 2020
  2. sser

    sser Гик

    Время срабатывания датчика какое минимально?
     
  3. arduino pls

    arduino pls Нуб

    0,3-0,6
     
  4. sser

    sser Гик

    А что должен делать код?
     
  5. a1000

    a1000 Гик

    человек ведь написал
     
    arduino pls нравится это.
  6. arduino pls

    arduino pls Нуб

    Считывать данные и выводить на ком порт литры
     
  7. sser

    sser Гик

    сколько датчиков и сколько литров?
     
  8. arduino pls

    arduino pls Нуб

    Минимум 3, литры должен считывать постоянно, так как датчик будет стоять в структуре крана
     
  9. sser

    sser Гик

    Ардуино мега подойдёт . (Уно или нано , только два прерывания)
    На каждый кран по датчику ?
    А как в литры переводить будем?
     
  10. parovoZZ

    parovoZZ Гуру

    на каждой ноге прерывание.
     
  11. asam

    asam Гик

    Ну да, конечно! Ну вот как можно браться за платные заказы не зная такой базовой вещи - Внешних прерываний на Уно/нано не два, а почти на каждом порту (кроме А6 и А7)
     
  12. sser

    sser Гик

  13. akl

    akl Гуру

    имеется в виду PCINT https://tsibrov.blogspot.com/2019/06/arduino-interrupts-part2.html#Pin Change Interrupts
    почему-то для этого в ардуине не завезли функций, поэтому придется орудовать с регистрами, но оно настолько просто, что даже хорошо что функций нет. Главный минус - по этим прерываниям нельзя проснуться от глубокого сна.
     
    Andrey12, issaom, sser и ещё 1-му нравится это.
  14. sser

    sser Гик

  15. Kakmyc

    Kakmyc Нерд

    Мельчает нынче "разработчик"
     
  16. sser

    sser Гик

    Скетч для четырёх датчиков.
    Готово :
    Код (C++):

    #define set1Pin 8  // датчик1
    #define set2Pin 9 //датчик2
    #define set3Pin 10  // датчик3
    #define set4Pin 11 //датчик4

    volatile unsigned long s_sch1=0;
    volatile unsigned long s_sch2=0;
    volatile unsigned long s_sch3=0;
    volatile unsigned long s_sch4=0;

    uint8_t oldPINB = 0xFF;

    void pciSetup(byte pin) {
      *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin));  // Разрешаем PCINT для указанного пина
      PCIFR  |= bit (digitalPinToPCICRbit(pin)); // Очищаем признак запроса прерывания для соответствующей группы пинов
      PCICR  |= bit (digitalPinToPCICRbit(pin)); // Разрешаем PCINT для соответствующей группы пинов
    }

    ISR (PCINT0_vect) { // Обработчик запросов прерывания от пинов D8..D13
      uint8_t changedbits = PINB ^ oldPINB;
      oldPINB = PINB;

      if (changedbits & (1 << PB0)) { // Изменился D8
    s_sch1++;

      }

      if (changedbits & (1 << PB1)) { // Изменился D9
    s_sch2++;
      }

      if (changedbits & (1 << PB2)) { // Изменился D10
    s_sch3++;
      }

      if (changedbits & (1 << PB3)) { // Изменился D11
    s_sch4++;
      }
    }

    void setup() {
      Serial.begin(9600);
      pinMode(set1Pin,  INPUT_PULLUP); // Подтянем пины-источники PCINT к питанию
      pinMode(set2Pin, INPUT_PULLUP);
      pinMode(set3Pin,  INPUT_PULLUP);
      pinMode(set4Pin, INPUT_PULLUP);
      pciSetup(set1Pin); // И разрешим на них прерывания
      pciSetup(set2Pin);
      pciSetup(set3Pin);
      pciSetup(set4Pin);
    }


    void loop() {

    Serial.print(s_sch1);
    Serial.println(" ");
    Serial.print(s_sch2);
    Serial.println(" ");
    Serial.print(s_sch3);
    Serial.println(" ");
    Serial.print(s_sch4);
    Serial.println(" ");
    Serial.println(" ");
    delay (200);
    }
     
    arduino pls нравится это.
  17. sser

    sser Гик

    Денег жалко на обучение, пробую учиться сам...:)
     
  18. parovoZZ

    parovoZZ Гуру

    Почему нельзя?
     
    akl нравится это.
  19. arduino pls

    arduino pls Нуб

    Спасибо огромное, через несколько часов проверю, всё ли нормально с кодом, и если да то
    скину деньги
     
  20. Kakmyc

    Kakmyc Нерд

    Херню написал.
    Зачем тебе два разных вектора ,и INT и PCINT , которые по сути делают одну работу ?
    Все 4 пина заводим на один регистр выходов и смотрим одной командой.
    Дальше switch по маске
     
    b707 нравится это.