====== @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);