====== Функции работы с пинами ======
func:: analogRead(pin)
Считывает значение аналогового сигнала на пине ''pin'' и возвращает результат в виде числа в диапазоне [0.0; 1.0].
Пин должен поддерживать чтение [[сенсоры:аналоговые|аналоговых сигналов]]. См. функции пинов в документации на свою плату.
Если перед вызовом не вызывалась функция ''[[#pinMode|pinMode]]'', пин будет автоматически переведён в режим ''%%'%%analog%%'%%''.
func:: analogWrite(pin, value[, opts])
Выдаёт аналоговый сигнал на пине ''pin''. Используется аппаратный [[конспект-arduino:шим|ШИМ]] или ЦАП, если они доступны на пине.
См. функции пинов в документации на свою плату.
В случае ШИМ ''value'' задаёт скважность, в случае ЦАП — величину напряжения. В любом случае ожидается значение в диапазоне [0.0; 1.0].
В качестве необязательного параметра ''opts'' принимается объект с полями:
* ''freq'' — частота ШИМ в герцах;
* ''soft'' — если ''true'' и аппаратный ШИМ не доступен на пине, будет использован программный ШИМ;
* ''forceSoft'' — если ''true'', будет использован программный ШИМ даже при наличии аппаратного.
analogWrite(P9, 0.5);
analogWrite(P8, 0.4, {freq: 20});
analogWrite(P7, 0.1, {freq: 20, soft: true});
Если перед вызовом функции не вызывалась ''[[#pinMode|pinMode]]'', пин будет автоматически переведён в режим ''%%'%%output%%'%%''.
func:: clearWatch([id])
Останавливает наблюдение за пином. Параметр ''id'' — идентификатор, который вернула ''setWatch''.
var id = setWatch(function() { print('Hello'); }, P3);
// ...
clearWatch(id);
Если ''id'' опущен, будут остановлены все наблюдения за пинами.
func:: digitalPulse(pin, value, time)
Генерирует импульс на пине ''pin'' длительностью ''time'' миллисекунд. ''value'' задаёт значение пульса: ''1'' — высокий сигнал, ''0'' — низкий.
Для точности функция использует аппаратный таймер и не блокирует исполнение программы, т.е. возвращается до того, как закончится импульс. Передайте 0 в качестве ''time'', чтобы дождаться окончания предыдущего импульса.
В качестве ''time'' можно передать массив. В этом случае будет выдана серия импульсов с противоположными значениями длительностью, определяемой значением элементов массива, начиная с ''value''.
digitalPulse(A3, 1, 1.5); // высокий импульс на 1.5 мс
digitalPulse(A3, 1, 0); // остановка до завершения импульса
// 100 мкс — низкий сигнал
// 200 мкс — высокий
// 300 мкс — снова низкий
digitalPulse(A3, 0, [0.1, 0.2, 0.3]);
Используйте функцию для коротких и очень точных импульсов. Для работы с периодами свыше нескольких миллисекунд используйте ''[[#setTimeout|setTimeout]]''.
Если перед вызовом не вызывалась функция ''[[#pinMode|pinMode]]'', пин будет автоматически переведён в режим ''%%'%%output%%'%%''.
func:: digitalRead(pin)
Считывает цифровой сигнал с пина ''pin''. Возвращает ''1'', если на пине — логическая единица и ''0'', если на пине — логический ноль.
В качестве ''pin'' можно передать массив пинов. В этом случае, функция вернёт число где значения сигнала размещены в битах. Последний элемент массива будет соответствовать младшему биту результата.
var x = digitalRead(A0); // считываем с одного пина
// считываем с группы
x = digitalRead([A2, A1, A0]);
// если на A2 и A1 — единица, а на A0 — ноль,
// результатом будет 0b110
Если перед вызовом не вызывалась функция ''[[#pinMode|pinMode]]'', пин будет автоматически переведён в режим ''%%'%%input%%'%%''.
func:: digitalWrite(pin, value)
Устанавливает цифровой сигнал на пине ''pin'': логическую единицу, если ''value'' — ''1'' или ''true'', логический ноль, если ''value'' — ''0'' или ''false''.
В качестве ''pin'' можно передать массив пинов. В этом случае считается, что число ''value'' кодирует значения для пинов на соответствующих позициях битов. Последнему элементу массива ''pin'' соответствует младший бит ''value''. Выставление значений происходит последовательно, начиная с последнего пина, т.е. справа налево. Вы можете использовать один и тот же пин в массиве несколько раз, чтобы реализовать очень короткий импульс.
digitalWrite(P3, 1); // выставляем логическую единицу на P3
// делаем короткий импульс на P5 и сразу после него
// короткий импульс на P4
digitalWrite([P4, P5], 0b0101);
Если перед вызовом не вызывалась функция ''[[#pinMode|pinMode]]'', пин будет автоматически переведён в режим ''%%'%%output%%'%%''.
func:: getPinMode(pin)
Возвращает текущий режим работы пина ''pin'' в виде строковой константы. Смотрите [[#pinMode|pinMode]] для возможных значений.
func:: pinMode(pin[, mode])
Устанавливает режим работы пина ''pin'' в соответствие с ''mode'':
* ''%%'%%analog%%'%%'' — аналоговый вход;
* ''%%'%%input%%'%%'' — цифровой вход;
* ''%%'%%input_pullup%%'%%'' — цифровой вход с внутренним подтягивающим резистором (~40 кОм);
* ''%%'%%input_pulldown%%'%%'' — цифровой вход с внутренним стягивающим резистором (~40 кОм);
* ''%%'%%output%%'%%'' — цифровой выход;
* ''%%'%%opendrain%%'%%'' — цифровой выход с открытым стоком, для которого логическая единица замыкает пин на землю, а логический ноль формирует разрыв цепи;
* ''%%'%%af_output%%'%%'' — цифровой выход встроенной периферии;
* ''%%'%%af_opendrain%%'%%'' — цифровой выход с открытым стоком внутренней периферии;
* не задан — автоматический режим.
Функции для работы с пинами — например ''digitalRead'' или ''digitalWrite'' — самостоятельно устанавливают нужный режим работы пина, если вы предварительно не вызвали ''pinMode'' явно. Чтобы вернуть автоматический режим, вызовите ''pinMode'' без параметра ''mode''.
func:: setWatch(callback, pin [, opts])
Заставляет платформу вызвать функцию ''callback'' при изменении цифрового сигнала на входе ''pin''. В качестве ''opts'' принимается объект с полями:
* ''repeat'' — если ''true'', функция будет вызвана каждый раз при изменении; если ''false'' — однократно; по умолчанию ''false''.
* ''edge'' — ''%%'%%rising%%'%%'' для фиксации только восходящего фронта, ''%%'%%falling%%'%%'' — только нисходящего, ''%%'%%both%%'%%'' — при изменении в любую сторону; по умолчанию ''%%'%%both%%'%%''.
* ''debounce'' — время в миллисекундах для программного подавления [[:дребезг|дребезга сигнала]].
В ''callback'' при вызове система передаёт параметр-объект с полями:
* ''state'' — текущее значение пина: ''0'' или ''1'';
* ''time'' — системное время в секундах, когда произошло наблюдаемое изменение сигнала;
* ''lastTime'' — системное время в секундах, когда последний раз происходило //любое// изменение сигнала; для значений ''edge'' ''%%'%%rising%%'%%'' и ''%%'%%falling%%'%%'' это значение не совпадает с временем предыдущего вызова.
// Наблюдаем за кнопкой
setWatch(function(e) {
console.log(%%'%%BTN1 was just pressed%%'%%);
}, BTN1, {
repeat: true,
edge: 'falling',
debounce: 10
});
// Измеряем длину импульса с логическим нулём
setWatch(function(e) {
print(%%'%%Pulse length:%%'%%, e.time - e.lastTime, %%'%%seconds%%'%%);
}, P4, {edge: 'rising'});
Функция возвращает число-идентификатор, который можно передать в ''[[#clearWatch|clearWatch]]'', чтобы отменить наблюдение за пином.