Встроенные светодиоды HIGH и LOW кажутся перевернутыми
На плате ESP32 я пытаюсь использовать этот простой код для управления встроенным светодиодом.
Но если я установлю его на ВЫСОКИЙ
, светодиод погаснет, если я установлю его на НИЗКИЙ
, светодиод загорится (полностью яркий).
Что может быть причиной этого ?
На плате есть один красный и один синий светодиоды, синим из которых можно управлять.
#define onboard_led 2
void setup() {
pinMode(onboard_led, OUTPUT);
}
void loop() {
digitalWrite(onboard_led, HIGH);
// digitalWrite(onboard_led, LOW);
}
ОТРЕДАКТИРОВАНО: это была такая плата (я думаю, "Geekcreit"):
@adrianTNT, 👍1
Обсуждение1 ответ
Лучший ответ:
Как показано на этом изображении со страницы Okdo, посвященной управлению светодиодами, существует два способа управления светодиодом от выходного вывода GPIO:
В случае активного ВЫСОКОГО напряжения высокая мощность GPIO включит светодиод, поскольку это приведет к выходу тока из контакта и через светодиод в землю.
В случае активного НИЗКОГО уровня НИЗКИЙ выходной сигнал GPIO будет пропускать ток от источника питания + V на вывод.
В вашем случае светодиод подключен в активной НИЗКОЙ конфигурации, и поэтому, чтобы включить его, вы должны установить пин на НИЗКИЙ уровень.
Я добавлю, что эти платы ESP32 производятся многими разными производителями, и не все они идентичны.
- Безопасно питать светодиодную ленту через ESP32 GPIO
- Использовать простой светодиод без лишних цифровых контактов
- Кастомная функция переключения светодиодов: один из трех светодиодов работает неправильно
- Что произойдет с ардуино, если не использовать резистор со светодиодом?
- Почему некоторые контакты Arduino Nano (D3, D4, A3, A4, A6, A7) не могут быть установлены на высокий уровень?
- Az Delivery ESP32 DevKitC V2 номера PIN
- Не могу отключить внутренний интерфейс I2C подтягиваний на ESP32
- Какой аналог PORTx для Teensy (4.0)?
Чтобы знать наверняка, вам нужно будет показать дизайн платы. Но нередко светодиоды расположены в цепи таким образом, что для их включения вы пропускаете ток через микросхему. Например, светодиод подключен примерно к 3,3 В --- РЕЗИСТОР --- СВЕТОДИОД --- GPIO_PIN. Когда GPIO становится НИЗКИМ (по направлению к земле), ваш ток течет и светодиод загорается. Также возможно, что вывод MCU подключен к транзистору, который инвертирует логику в дополнение к разгрузке текущей обработки на транзистор., @timemage
С вашей платой все в порядке. Ваша путаница вызвана тем, как подключен встроенный светодиод, как объяснил @timemage. Многие платы ESP имеют такое расположение встроенного светодиода, и вы также можете найти другое (внешнее) оборудование с активным низким уровнем управления. Если вы измерите вывод ввода-вывода, который подключен к внутреннему светодиоду, вы увидите, что когда он “ВЫСОКИЙ”, он находится на уровне 3,3 В (или близко к нему), как и должно быть., @StarCat
Я знаю, для новичка это звучит странно, но в этом нет ничего необычного. Некоторые микросхемы лучше пропускают ток (при подключении к земле), чем ток источника (при подключении к Vcc). Аналогичная инвертированная логика часто используется с кнопками, где входной вывод имеет подтягивающий резистор. В результате считывается НИЗКИЙ уровень при нажатии кнопки и ВЫСОКИЙ, когда кнопка не нажата. Если это немного запутывает вашу голову, вы можете инвертировать значение в коде, что может сделать его более интуитивно понятным для чтения. Например,
digitalWrite(onboard_led, !HIGH);
, где значение HIGH указывает на то, что вы хотите его включить, а!
автоматически инвертирует его., @GerbenХорошо, я понимаю, что это обычное дело. У меня нет подробных схем платы, но я добавил фотографию и название платы., @adrianTNT
@adrianTNT, к сожалению, есть много досок / подобных / этому. В той мере, в какой изображение может быть полезным, оно должно быть либо изображением вашей платы, либо тем, которое, как вы уверены, идентично. В противном случае это просто еще одна переменная., @timemage
@timemage Я обнаружил, что нередко светодиоды горят в обоих направлениях (ВЫСОКИЙ / НИЗКИЙ), так что для меня это достаточно хороший ответ :), @adrianTNT