Почему простое мигание светодиодом не работает при использовании ШИМ mbed.h и Arduino Nano BLE?
Я установил очень простую тестовую программу для мигания встроенного светодиода с использованием ШИМ. Следуя примеру mbed и установив период равным 4 секунды (0,25 Гц) и рабочий цикл равным 0,5, ожидаемое поведение будет следующим: Светодиод загорится на 2 секунды и погаснет на 2 секунды. Однако на самом деле светодиод мигает очень быстро (почти незаметно для глаз).
#include "mbed.h"
mbed::PwmOut ledPin = mbed::PwmOut(P0_13); //builtin led pin
void setup() {
ledPin.period(4.0f);
ledPin.write(0.0f);
}
void loop() {
// put your main code here, to run repeatedly:
ledPin.write(0.5f);
}
Я пробовал добавлять delay()
и wait_ns()
с разным временем в основной цикл, пробовал оставить основной цикл пустым и установить рабочий цикл в
code>setup(), а также изменение периода на более крупные числа на тот случай, если он был в миллисекундах, но безрезультатно. Не совсем понимаю, чего мне не хватает в этом чрезвычайно простом примере.
@Ivan Novikov, 👍1
Обсуждение1 ответ
Пример, на который вы ссылаетесь, имеет бесконечный, но пустой цикл — while(1);
— после настройки ШИМ.
Ваш цикл неоднократно выполняет ledpin.out(0.5f);
Я не нашел функции-члена .out(), чтобы знать, что она делает, но моей первой мыслью было бы закомментировать содержимое вашей функции цикла() и позволить ей работать как пустой бесконечный цикл. Затем я бы посмотрел на функцию-член .out и выяснил, каково ее действие. Вывод на вывод обычно является логическим. Если это так с .out(), то 0,5f будет преобразовано в целое число 0, которое идентично логическому значению «false», и этот цикл будет неоднократно выключать светодиод, причем с частотой около мегагерца.
Код, который он опубликовал, выполняет ledPin.write(0.5f);
внутри loop
, а не out
., @Nick Gammon
- Как управлять встроенными светодиодами Arduino Nano 33 BLE Sense?
- Помогите с простым постепенно более ярко светящим светодиодом
- Как яркость света остается постоянной, когда мы увеличиваем частоту стробоскопа
- Питание светодиодной ленты - Сколько ампер?
- Как убедиться, что импульсы ШИМ Arduino сдвинуты по фазе?
- Есть ли функция Adafruit для инвертирования цветов моего экрана для языка Arduino?
- Как прочитать значение PIN PWM-выхода?
- Почему некоторые контакты Arduino Nano (D3, D4, A3, A4, A6, A7) не могут быть установлены на высокий уровень?
Согласно [примеру mbed](https://os.mbed.com/docs/mbed-os/v6.16/apis/pwmout.html), чтобы создать экземпляр объекта PwmOut, он должен быть
PwmOutledPin(P0_13 )
. Для setup() установите рабочий цикл на 50% с помощьюledPin.write(0.5f);
и удалите код внутри цикла(), поскольку он сам по себе уже является цикломwhile(1)
., @hcheung