Пример Blink. Мигаем светодиодом

Ну да, 65 сек хватит. Экономия называется.)

неее, красиво это так :rofl:

1 лайк

Ду уж… Это для тех кто не может выучить десяток-два иностранных слов, и которые пишут русские слова латиницей). Таких у нас тоже немало.(

ну зато задачка решается :slight_smile:

не по фэншую, Тихонов бы за такие вольности выгнал бы нафиг

во блин, про сайт бухгалтеров электроников не слышал, это бухгалтер со стажем 17 лет и 6 мес.???

Вот пример из 21-ого века. ;)) Со стандартной библиотекой Ticker.

#include "Ticker.h"

const byte LED = LED_BUILTIN;
const uint32_t BlinkPeriod = 2000; //ms
const uint32_t BlinkHIGH = 500; //ms


Ticker setHIGH([](){digitalWrite(LED, HIGH);}, BlinkPeriod);
Ticker setLOW([](){digitalWrite(LED, LOW);}, BlinkPeriod);

void setup() {
  pinMode(LED, OUTPUT);
  setHIGH.start();
  delay(BlinkHIGH);
  setLOW.start();
  }

void loop() {
  setHIGH.update();
  setLOW.update();
  }

Еще интереснее выйдет с библиотекой от нашего коллеги DetSimen
Его Блинк и библиотека доступны на ГитХабе:

Это гораздо больше, чем просто штатный “тикер”.

Эти приемы позволят запустить несколько ЛЕД с различными частотами и скважностью и менять их в процессе работы программы.
Собственно работа с тикером знакома каждому программисту интерфейсов. Для контроллеров с многозадачной ОС (FreeRTOS) есть привычные тикеры. Для AVR нужно учитывать специфику, просто добавляется апдейтер в loop() для каждого тикера.

Эта библиотека достойна размещения отдельным постом в разделе Wiki - если, конечно, автор не против. Лично я ее во многих своих поделиях использую.
А на Гитхабе найти ее не просто, поиск выдает: " We couldn’t find any repositories matching ‘DetSimen’ "

Ну, если использовать “спецсредства”, то можно и так :slightly_smiling_face:

#include <shTaskManager.h> // https://github.com/VAleSh-Soft/shTaskManager

shTaskManager tasks(1); // создаем список на одну задачу

// обработчик задачи
void blink()
{
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  tasks.addTask(500, blink); // добавляем задачу для мигания светодиод
}

void loop()
{
  tasks.tick(); // опрос списка задач, необходимо запускать как можно чаще
}

Это тоже позволяет запустить несколько ЛЕД с различными частотами и скважностью и менять их в процессе работы программы.

ЗЫ: Ничего не хочу сказать против дедовой библиотеки, но в моей нет ограничения на 10 таймеров. Потому как и самих таймеров нету :slightly_smiling_face:

ЗЫЫ: на старом форуме делал пост по подобной методе, но без внешних библиотек

2 лайка

Блинк?
Да еще и с подключением внешних библиотек?
Нет, ребяты, это извращение.

А по существу: BwD - очень полезная вещь. Я помещаю его практически в каждый проект - он позволяет убедиться, что скетч работает, не завис и т.п. Ну и заодно еще немного диагностики: при помощи частоты мигания можно индицировать, в каком режиме (если их несколько) в настоящее время находится скетч.

Если только для блинка, то да. Если блинк - только одна из задача, почему бы и нет?

Не читал но одобряю))

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

Полностью поддерживаю, код самописный, библиотека моя. Используется, нстественно , не только и не столько для блинков. В основе - тот же BwD

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

5 лайков

Долой бюрократию!
Долой утверждения!
Да здравствует плюрализм блинков!

Во первых - всех с Новым Годом! Добра всем. Не зла - именно Добра!

Что значит “самописный” - вообще без использования библиотек? Даже без использования стандартных типа Serial или адафруитовских для периферии?
Ну а если в коде используются вышеупомянутые, то чем плохо использование других, качественно написанных библиотек, особенно если они будут одобрены нашим сообществом.
Согласитесь, что тот же блинк для десятка светодиодов с толковой библиотекой будет короче, проще и читабельнее. Или, например, опрос 5 - 10-и кнопок можно написать самому, но можно и “титановый велосипед” прикрутить, выйдет быстрее и не хуже.

Мне кажется, что именно этот раздел должен помочь не утонуть в мусоре флуда интересным решениям, коих было немало на форуме. А вот отыскать их - если сразу не сохранил для себя - та еще задачка.

1 лайк

Дед, этот раздел не для «поиска истины в бокале вина», а (как один из вариантов) для разных подходов к решению одной и той же или схожей задачи.
Так что ничего утверждать не нужно )))

1 лайк

Ну почему же? Настоящий священный блинк - он в первом сообщении. Ну а дальше обсуждение, можно ли его улучшить. Найдем лучший вариант - исправим - это же Wiki.

Почему бы и нет?) Даже без AVR libc.

#define LED               LED_BUILTIN   //8..13 only
#define LED_PERIOD        1000

#define out(x)            DDRB |= 1<<(x - 8)
#define toggle(x)         PINB  = 1<<(x - 8)
#define every(x)          for (static uint16_t t; ++t >= (x); t = 0)
#define delay_ms()        for (uint16_t c = F_CPU / 5 / 1000; c; --c) asm volatile ("nop")

int main() {
  out(LED);
  while (true) {
    delay_ms();
    every(LED_PERIOD / 2)
      toggle(LED);
  }
}