====== Функции работы с пинами ====== 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]]'', чтобы отменить наблюдение за пином.