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