T

Trinnovate

Pioneering Robotics & AI Solutions for Defence & Industrial Automation

Loading innovation...

trinnovate-logo-black
<- Back to Tools

LED Blink Pattern Generator

Design breathing, strobe, or heartbeat LED animations and export them as a ready-to-flash C loop for Arduino, STM32, or ESP boards.

Pattern Builder

Timeline (one loop)

0/255 | 67ms
31/255 | 67ms
61/255 | 67ms
90/255 | 67ms
119/255 | 67ms
145/255 | 67ms
169/255 | 67ms
191/255 | 67ms
210/255 | 67ms
226/255 | 67ms
238/255 | 67ms
248/255 | 67ms
253/255 | 67ms
255/255 | 67ms
253/255 | 67ms
248/255 | 67ms
238/255 | 67ms
226/255 | 67ms
210/255 | 67ms
191/255 | 67ms
169/255 | 67ms
145/255 | 67ms
119/255 | 67ms
90/255 | 67ms
61/255 | 67ms
31/255 | 67ms
0/255 | 67ms

Loop duration: 1809 ms

Step Table

StepDutyHold (ms)
#1067
#23167
#36167
#49067
#511967
#614567
#716967
#819167
#921067
#1022667
#1123867
#1224867
#1325367
#1425567
#1525367
#1624867
#1723867
#1822667
#1921067
#2019167
#2116967
#2214567
#2311967
#249067
#256167
#263167
#27067

Generated C Loop

#include <Arduino.h>

#define LED_PIN 9

struct Step { uint16_t duty; uint16_t ms; };
const Step pattern[] = {
  { 0, 67 },
  { 31, 67 },
  { 61, 67 },
  { 90, 67 },
  { 119, 67 },
  { 145, 67 },
  { 169, 67 },
  { 191, 67 },
  { 210, 67 },
  { 226, 67 },
  { 238, 67 },
  { 248, 67 },
  { 253, 67 },
  { 255, 67 },
  { 253, 67 },
  { 248, 67 },
  { 238, 67 },
  { 226, 67 },
  { 210, 67 },
  { 191, 67 },
  { 169, 67 },
  { 145, 67 },
  { 119, 67 },
  { 90, 67 },
  { 61, 67 },
  { 31, 67 },
  { 0, 67 }
};
const size_t patternCount = sizeof(pattern) / sizeof(pattern[0]);

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  for (size_t i = 0; i < patternCount; i++) {
    analogWrite(LED_PIN, pattern[i].duty);
    delay(pattern[i].ms);
  }
}

Use `analogWrite` on AVR, `ledcWrite` on ESP32, or your timer compare macro on STM32.

For 12-bit timers, set PWM max to 4095 so the duty numbers map directly.