Небольшая путаница в команде digitalWrite
Будет ли среда разработки Arduino интерпретировать digitalWrite(13,x), где x>0, как digitalWrite(13,HIGH)? И будет ли он интерпретировать digitalWrite(13,x), где x<=0, как digitalWrite(13,LOW)?
@Kv07, 👍0
1 ответ
Лучший ответ:
Любое другое значение, отличное от 0
или LOW
, приведет к установке пина в HIGH
. Ниже я объясню, почему:
Функция digitalWrite()
находится в файле hardware/arduino/avr/cores/arduino/wiring_digital.c
. Важные строки здесь:
if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}
Как вы можете видеть, он проверяет, равно ли заданное значение (из параметра) LOW
, и если это так, то он устанавливает соответствующий пин на 0
. В любом другом случае он устанавливает пин на 1
. Определение LOW
можно найти в arduino/hardware/arduino/avr/cores/arduino/Arduino.h
:
#define HIGH 0x1
#define LOW 0x0
Таким образом, код проверяет, равно ли значение 0
, и устанавливает пин также на 0
. Любое другое значение даст в результате 1
(что означает HIGH
). Также взгляните на определение digitalWrite()
:
void digitalWrite(uint8_t pin, uint8_t val)
Значение имеет тип без знака, поэтому каждый тип со знаком будет приведен к типу без знака. Отрицательное число приведет к положительному числу внутри функции.
- Как инициализировать цифровой выходной контакт как LOW
- Использование контактов NodeMCU D8 (GPIO15), D4 (GPIO2) и D3 (GPIO0).
- Отправка цифрового сигнала с одного Arduino на другой для запуска события
- Случайная ошибка "Compilation error: Error: 13 INTERNAL: exit status 1". Как устранить или что вызывает эту ошибку
- Как настроить выходы без использования digitalWrite?
- Какой аналог PORTx для Teensy (4.0)?
- установка выходного аналогового/цифрового контакта на землю
- Опасно ли соединять два выходных контакта вместе?