====== @amperka/gpio-expander ====== Библиотека для работы с [[amp>product/troyka-gpio-expander|I2C-расширителем портов]] даёт доступ к привычным Arduino-подобным функциям управления пинами: цифровые чтение и запись, а также АЦП и ШИМ. // настраиваем I2C1 для работы модуля I2C1.setup({sda: SDA, scl: SCL, bitrate: 100000}); // подключаем модуль к I2C1 var ext = require('@amperka/gpio-expander').connect({i2c: I2C1, address: 42}); // устанавливаем пин 2 на модуле в режим выхода ext.pinMode(2, 'output'); var pinState = 1; // раз в секунду меняем выходной сигнал с 1 на ноль и наоборот setInterval(function() { ext.digitalWrite(2, pinState); pinState = !pinState; }, 1000); ===== Функции модуля ===== func:: connect(opts) Создаёт новый объект Expander. Объект ''opts'' должен содержать поля: * ''i2c'' — I2C, к которому подключён модуль, например ''I2C1'' * ''address'' — адрес модуля, по умолчанию 42. class:: Expander Класс для работы с расширителем. Для создания экземпляра используйте функцию ''connect''. func:: Expander.reset() Программно сбрасывает модуль, перезагружает его. func:: Expander.digitalWrite(pin, value) Устанавливает на пине ''pin'' логическую единицу (''value = 1'') или ноль (''value = 0''). var pinState = 1; ext.digitalWrite(2, pinState); func:: Expander.digitalRead(pin) Считывает цифровое значения пина ''pin''. pinState = ext.digitalRead(3); func:: Expander.pinMode(pin, mode) Устанавливает режим работы пина ''pin''. Возможны 4 значения: * ''%%'%%input%%'%%'' — режим входа (высокий импеданс) * ''%%'%%output%%'%%'' — режим выхода * ''%%'%%input_pullup%%'%%'' — режим входа с подтяжкой к линии питания * ''%%'%%input_pulldown%%'%%'' — режим входа с подтяжкой к линии 0 вольт. ext.pinMode(4, 'input_pulldown'); func:: Expander.analogWrite(pin, value) Устанавливает [[:конспект-arduino:шим|ШИМ]] на пине ''pin'' с коэффициентом заполнения ''value'' в диапазоне 0.0–1.0. Частота ШИМ-сигнала задаётся функцией ''pwmFreq''. ext.analogWrite(4, 0.7); func:: Expander.servoWrite(pin, angle) Устанавливает угол качалки серво на пине ''pin'' на угол ''angle''. Для работы с серво предварительно установите частоту ШИМ-сигнала равной 50 Гц. ext.pwmFreq(50); ext.servoWrite(4, 140); ext.servoWrite(4, 130); ext.servoWrite(4, 110); func:: Expander.pwmFreq(freq) Задаёт частоту ШИМ-сигнала в герцах. Допустимые значения ''freq'' от 15–3000 Гц. func:: Expander.analogRead(pin) Считывает аналоговое напряжение на пине ''pin''. Диапазон возвращаемых значений: 0.0–1.0. func:: Expander.changeAddr(addr) Меняет адрес модуля на ''addr''. Адрес хранится до первого сброса питания или вызова функции ''reset''. Чтобы сохранить новый адрес в постоянной памяти, используйте функцию ''saveAddr''. func:: Expander.saveAddr() Сохраняет в памяти модуля новый адрес I2C. ===== Пример работы с двумя модулями одновременно ===== Поменяйте адрес на одном модуле. I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000}); var ext = require('@amperka/gpio-expander').connect({i2c: I2C1, address: 42}); ext.changeAddr(43); ext.saveAddr(); Подключите второй модуль. I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000}); var expanders = require('@amperka/gpio-expander'); var extA = expanders.connect({i2c: I2C1, address: 42}); // адрес модуля extA — 42 var extB = expanders.connect({i2c: I2C1, address: 43}); // адрес модуля extB — 43 extA.pinMode(5, 'output'); extB.pinMode(6, 'input'); var pinState = 1; setInterval(function() { extA.digitalWrite(5, pinState); pinState = !pinState; var value = extA.analogRead(6); print(value); }, 1000);