Arduino HIGH LOW

У меня есть Arduino, и мне интересно, что именно HIGH и LOW означают, насколько реальные значения идут... Они подписали ints? Unsigned ints? Неподписанные символы??? Каковы их ценности? Я предполагаю, что HIGH и LOW, вероятно, являются неподписанными ints со всеми битами, установленными в 1 и 0 соответственно, но я не уверен. Я хотел бы иметь возможность выполнять побитовые операции с использованием HIGH и LOW или передавать значения, отличные от HIGH или LOW, к digitalWrite. Кроме того, как бы я применил целое число к HIGH или LOW, чтобы я мог это сделать?

Ответы

Ответ 1

Если вы хотите передать другие значения в digitalWrite(), вы можете взглянуть на прототип функции

void digitalWrite(uint8_t, uint8_t);

Итак, любое целочисленное значение (ну, от 0 до 255) будет работать. Не знаю, каким может быть поведение digitalWrite(), если вы передали ему значение, отличное от HIGH и LOW.

Так как HIGH и LOW являются просто определенными константами, вы не можете отличить их от них (и эта операция не имеет смысла). Похоже, вы могли бы использовать целое число, где ожидалось HIGH и LOW.

На самом деле это плохая идея, хотя по многим причинам определения HIGH и LOW могут меняться (маловероятно, но возможно), и это не имеет смысла с точки зрения типа. Вместо этого вы должны использовать логику в своей программе, чтобы определить, должен ли HIGH или LOW быть передан вызову функции, а затем фактически передать константу.

Ответ 2

Посмотрите hardware/arduino/cores/arduino/Arduino.h (по крайней мере, в программном обеспечении Arduino 1.0.1), строки 18 и 19:

 #define HIGH 0x1
 #define LOW  0x0

Смысл, они определяют шестнадцатеричные целочисленные значения, вы можете выполнять любые побитовые операции, которые вы хотите с ними, - то, насколько смысл, который будет делать, на данный момент не совсем ясен для меня. Также имейте в виду, что эти значения могут подвергнуться изменениям в более позднее время - что сделало бы побитовые операции над ними еще более неразумными.

Ответ 3

Чтобы добавить мой ответ 2c в nyarlathotep. Строки 18-25 из Arduino.h (1.0):

#define HIGH 0x1
#define LOW  0x0

#define INPUT 0x0
#define OUTPUT 0x1

#define true 0x1
#define false 0x0

Следовательно, HIGH<==>OUTPUT<==>true<==>0x1 и LOW<==>INPUT<==>false<==>0x0. Затем HIGH<==>!LOW и LOW<==>!HIGH...

Ответ 4

Первый аргумент для digitalWrite() - это номер штыря.

Второй аргумент для digitalWrite() будет либо:

1) напишите HIGH (3.3 или 5v) или LOW (0v) в BINARY OUTPUT или
2) включить (HIGH) или отключить (LOW) внутренний pullup на BINARY INPUT.

Побитовые операции для любого аргумента не имеют смысла. Возможно, вам нужно использовать analogWite()?

См. документацию: digitalWrite() Constants