Можно ли опросить сенсоры и включать реле через один multiplexer ?
- Войдите на сайт для отправки комментариев
Вс, 14/05/2017 - 14:23
Пытаюсь сделать автоматическую поливалку )))
На 8 каналов. То есть у меня есть модуль реле на 8 реле, и 8 датчиков влажности почвы. И 1 мультиплексер на 16 каналов (74HC4067) . Я то думал. Буду опрашивать (8-15) каналы в цикле. Найду канал на котором сработал датчик, переключу режим пина в OUTPUT поставлю HIGH и переключу мултиплексер на один из каналов (0-7). Включу нужное рэле. Подожду. Выключу. Переведу пин в INPUT. И продолжу опрос. Но после при опросе натыкаюсь на датчик, начинается какая-то ерунда. Дальше начинает все срабатывать.
int pin_Out_S0 = 2; int pin_Out_S1 = 3; int pin_Out_S2 = 4; int pin_Out_S3 = 5; int reley[] = {0b0000, 0b0001, 0b0010, 0b0011, 0b0100, 0b0101, 0b0110, 0b0111}; int sensor[] = {0b1000, 0b1001, 0b1010, 0b1011, 0b1100, 0b1101, 0b1110, 0b1111}; int SIG = 12; int REL = 11; void setup() { Serial.begin(9600); Serial.println("Hello Computer"); pinMode(pin_Out_S0, OUTPUT); pinMode(pin_Out_S1, OUTPUT); pinMode(pin_Out_S2, OUTPUT); pinMode(pin_Out_S3, OUTPUT); pinMode(SIG, INPUT); pinMode(REL, OUTPUT); } void loop() { for (int i = 0; i <= 7; i++) { int sensor = SensorSel(i); Serial.println(sensor); if (sensor == 0) { RelaySel(i); Serial.println("if"); } delay(500); } } void RelaySel(int N) { digitalWrite(REL, HIGH); digitalWrite(pin_Out_S0, bitRead(reley[N], 0)); digitalWrite(pin_Out_S1, bitRead(reley[N], 1)); digitalWrite(pin_Out_S2, bitRead(reley[N], 2)); digitalWrite(pin_Out_S3, bitRead(reley[N], 3)); delay(500); digitalWrite(SIG, LOW); } int SensorSel(int N) { pinMode(SIG, INPUT); digitalWrite(pin_Out_S0, bitRead(sensor[N], 0)); digitalWrite(pin_Out_S1, bitRead(sensor[N], 1)); digitalWrite(pin_Out_S2, bitRead(sensor[N], 2)); digitalWrite(pin_Out_S3, bitRead(sensor[N], 3)); int out = digitalRead(SIG); return out; }
74HC4067 не регистр. Это только переключатель.Да можно с помощью него вкл реле, но только 1 и больше другие реле не получится включить и не получится опросить другие датчики.
ПС: на вопрос темы - нет , нельзя.
Пытаюсь сделать автоматическую поливалку )))
На 8 каналов. То есть у меня есть модуль реле на 8 реле, и 8 датчиков влажности почвы. И 1 мультиплексер на 16 каналов (74HC4067) . Я то думал. Буду опрашивать (8-15) каналы в цикле. Найду канал на котором сработал датчик, переключу режим пина в OUTPUT поставлю HIGH и переключу мултиплексер на один из каналов (0-7). Включу нужное рэле. Подожду. Выключу. Переведу пин в INPUT. И продолжу опрос. Но после при опросе натыкаюсь на датчик, начинается какая-то ерунда. Дальше начинает все срабатывать.
Так то оно так, только почему в коде включается REL:
а выключается SIG:
??
Так то оно так, только почему в коде включается REL:
а выключается SIG:
Опачки )))
А на счет переключения, мне один за раз и нужно.
На самом деле я походу сюда не совсем тот код скопировал. Вот код , вроде без ошибок, а не работает. В моем случае, сейчас, датчик подключён на 12пин мультиплексора, это вроде как должно бы означать что при переборе он не должен щелкнуть 4м реле. Но после того как он доходит до 4го, она и следующими не щелкает, причем аж до 0го, то есть до аж включая начало следующего цикла.