Четыре датчика FC-03 на Uno

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
31
2
Здравствуйте !

Как организовать опрос четырёх датчиков ?
Один датчик цепляется на прерывание, а остальные куда ?
Заранее спасибо.
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
смотря как часто и точно надо опрашивать
в контроллере на каждый вход можно сделать прерывание при помощи attachinterrupt
 

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
31
2
У меня дома система вентиляции с рекуператором, и мне надо видеть какой объём воздуха идет по воздуховодам, хочу сделать крыльчатки и засунуть их в воздуховоды. Опрашивать часто думаю нет смысла, т.к. вентиляторы работаю с одной скоростью. Смысл в том, что забиваются приточный и вытяжной фильтра, вот и нужно контролировать поток воздуха,что бы не было перекоса.
в контроллере на каждый вход можно сделать прерывание при помощи attachinterrupt
где то видел, что у Uno только один такой вход.
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
уно это просто название платы, где стоит мега328
точно так же она стоит и на некоторых других платах разного размера
 

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
31
2
ладно на моей плате два порта которые могут работать с прерываниями, а датчика 4 !?
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
на твоей плате куча входов, которые могут генерировать прерывания
нужно только включить этот режим для них
 

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
31
2
МК / номер прерыванияINT 0INT 1INT 2INT 3INT 4INT 5
ATmega 328/168 (Nano, UNO, Mini)D2D3
ATmega 32U4 (Leonardo, Micro)D3D2D0D1D7
ATmega 2560 (Mega)D2D3D21D20D19D18
тут написано два,
как сделать кучу ?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,188
1,280
Москва
Прерывания в ардуино интересная штука. прерывания 0 и 1 (2-ой и 3-ий пины соотв) можно использовать аттачем, можно проверять на низкое, высокое значени, повышение или снижение. а так же изменение состояния. На остальных пинах прерывания идут только на изменение состояния
есть такая табличка
ARDUINO PIN INTERRUPT VECTOR MAPPING
--------------------------------------
D0 PCINT16 (PCMSK2 / PCIF2 / PCIE2)
D1 PCINT17 (PCMSK2 / PCIF2 / PCIE2)
D2 PCINT18 (PCMSK2 / PCIF2 / PCIE2)
D3 PCINT19 (PCMSK2 / PCIF2 / PCIE2)
D4 PCINT20 (PCMSK2 / PCIF2 / PCIE2)
D5 PCINT21 (PCMSK2 / PCIF2 / PCIE2)
D6 PCINT22 (PCMSK2 / PCIF2 / PCIE2)
D7 PCINT23 (PCMSK2 / PCIF2 / PCIE2)

D8 PCINT0 (PCMSK0 / PCIF0 / PCIE0)
D9 PCINT1 (PCMSK0 / PCIF0 / PCIE0)
D10 PCINT2 (PCMSK0 / PCIF0 / PCIE0)
D11 PCINT3 (PCMSK0 / PCIF0 / PCIE0)
D12 PCINT4 (PCMSK0 / PCIF0 / PCIE0)
D13 PCINT5 (PCMSK0 / PCIF0 / PCIE0)

A0 PCINT8 (PCMSK1 / PCIF1 / PCIE1)
A1 PCINT9 (PCMSK1 / PCIF1 / PCIE1)
A2 PCINT10 (PCMSK1 / PCIF1 / PCIE1)
A3 PCINT11 (PCMSK1 / PCIF1 / PCIE1)
A4 PCINT12 (PCMSK1 / PCIF1 / PCIE1)
A5 PCINT13 (PCMSK1 / PCIF1 / PCIE1)
Все пины "закреплены" за своим вектором в 3 группы.

Вот так я вещал прерывания на указанные в примере пины:
C++:
  // запуск обработки прерываний D6, D7 крайние положения курка
  pinMode (Zerro_Speed_Btn, INPUT_PULLUP);
  pinMode (Msx_Speed_Btn, INPUT_PULLUP);
  PCMSK2 |= bit (PCINT22);  //
  PCMSK2 |= bit (PCINT23);  //
  PCIFR  |= bit (PCIF2);   //
  PCICR  |= bit (PCIE2);   //
  // это будет доп прерывания

  // запуск обработки прерываний D8 реверс!
  pinMode (Revers_Btn, INPUT_PULLUP);
  PCMSK0 |= bit (PCINT0);  //
  PCIFR  |= bit (PCIF0);   //
  PCICR  |= bit (PCIE0);   //
  // тут конец подключения
C++:
Это процедуры обработки соотв. изменений на пинах
//========================== ОБРАБОТКА КНОПОК D6 D7 =========================== //
ISR (PCINT2_vect, ISR_BLOCK)
{
  // кнопки стоят как пулап, при подключении через триггер шмитта убрать!
 if (!(128 & PIND)){Speed_Pos = Max_Speed_Pos;};
 if (!(64 & PIND)){Speed_Pos = 0;};
}
//-------------------------- ОБРАБОТКА КНОПОК D6 D7---------------------------- //

//========================== ОБРАБОТКА КНОПОК D8 ============================ //
ISR (PCINT0_vect, ISR_BLOCK)
{
  if (Speed_Pos = 0)
  { if (1 % PINB)
    {
      trans_data[2] = trans_data[1] & Revers_ID;
    }
    else {
      trans_data[2] = trans_data[1] & (255 - Revers_ID);
    };
    //PINB
  };
}

//-------------------------- ОБРАБОТКА КНОПОК D8 ---------------------------- //
 

Sergey75

✩✩✩✩✩✩✩
26 Мар 2020
31
2
Прерывания в ардуино интересная штука. прерывания 0 и 1 (2-ой и 3-ий пины соотв) можно использовать аттачем, можно проверять на низкое, высокое значени, повышение или снижение. а так же изменение состояния. На остальных пинах прерывания идут только на изменение состояния
есть такая табличка
Спасибо за наводку, то что Вы предложили пока для меня сложновато, я решил при помощи "PinChangeInterrupt.h"
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
ну да, нужно было посмотреть в ардуиновский мануал про прерывания и там все будет расписано
я просто сам на днях это смотрел