16-канальный аналоговый мультиплексор собран на микросхеме 74HC4067 и позволяет значительно расширить количество портов ввода/вывода Arduino и Raspberry Pi.
Цифровые сигналы управления подключаются ко входам S0-S3. Выходы датчиков подключаются к выводам C0-C15. Питание подается на выводы VCC (+) и GND (-). Выход коммутатора (SIG) подключается ко входу контроллера.
Примеры использования мультиплексора
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
int S0 = 2; int S1 = 3; int S2 = 4; int S3 = 5; int SIG = 0; void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); Serial.begin(9600); } void loop() { for (int i = 0b0000; i <= 0b1111; i++) { digitalWrite(S0, bitRead(i, 0)); digitalWrite(S1, bitRead(i, 1)); digitalWrite(S2, bitRead(i, 2)); digitalWrite(S3, bitRead(i, 3)); Serial.print(i); Serial.print(" - "); Serial.print(analogRead(SIG)); Serial.print("| "); } Serial.println(); delay(1000); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
// 74HC4067 (16 to 1) // В данном примере реализована возможность выбора необходимого порта мультиплексора и считывание с него сигнала через аналоговый порт A0 платы Arduino UNO // контакты модуля 74HC4067 S0…S3 подключены к портам Arduino UNO D7…D4 // контакт модуля 74HC4067 SIG подключен к аналоговому порту Arduino UNO A0 // конфигурации портов D7…D4 для выбора активного порта мультиплексора byte controlPins[] = {B00000000, B10000000, B01000000, B11000000, B00100000, B10100000, B01100000, B11100000, B00010000, B10010000, B01010000, B11010000, B00110000, B10110000, B01110000, B11110000 }; // для хранения данных, полученных с мультиплексора byte muxValues[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}; void setup() { Serial.begin(9600); DDRD = B11111111; // конфигурирование портов PORTD (цифровые порты 7~0) } void setPin(int outputPin) // функция для выбора активного порта мультиплексора 74HC4067 { PORTD = controlPins[outputPin]; } void displayData() // вывод данных, полученных с портов мультиплексора в монитор серийного порта { Serial.println(); Serial.println("Values from multiplexer:"); Serial.println("========================"); for (int i = 0; i < 16; i++) { Serial.print("input I"); Serial.print(i); Serial.print(" = "); Serial.println(muxValues[i]); } Serial.println("========================"); } void loop() { for (int i = 0; i < 16; i++) { setPin(i); // выбираем активный порт 74HC4067 muxValues[i]=analogRead(0); // читаем значения, полученные с выбранного порта мультиплексора } // выводим полученные данные в монитор порта displayData(); delay(2000); } |