Небольшая путаница в команде digitalWrite

Будет ли среда разработки Arduino интерпретировать digitalWrite(13,x), где x>0, как digitalWrite(13,HIGH)? И будет ли он интерпретировать digitalWrite(13,x), где x<=0, как digitalWrite(13,LOW)?

, 👍0


1 ответ


Лучший ответ:

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)

Значение имеет тип без знака, поэтому каждый тип со знаком будет приведен к типу без знака. Отрицательное число приведет к положительному числу внутри функции.

,