Понадобятся: Плата Arduino Uno или другая, светодиод, резистор 220ohm или используем светодиод, распаянный на плате
Простой пример с delay
void setup() {
// Инициализируем выход LED_BUILTIN как output.
// на платах UNO, Mega, ZERO светодиод на плате подключен к пину 13
// LED_BUILTIN имеет значение пина к которому подключен светодиод на плате
// независимо от используемой платы
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // Включаем светодиод
delay(1000); // пауза 1сек
digitalWrite(LED_BUILTIN, LOW); //выключаем светодиод
delay(1000); // пауза 1сек
}
Пример без delay
const int ledPin = LED_BUILTIN;
int ledState = LOW;
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
//проверяем если время мигать, как разницу между сохраненным временемe
//последнего мигания previousMillis и текущим временем
// и если больше или равно interval в нашем случае 1000мс = 1 сек, то мигаем
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
//сохраняем время последнего мигания
previousMillis = currentMillis;
// включаем или выключаем в зависимости от текущего состояния:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// уставнавливаем значение в нужный пин/выход:
digitalWrite(ledPin, ledState);
}
}
Пример мигания по битовому шаблону.
const uint8_t ledPin = LED_BUILTIN;
uint32_t previousMillis = 0;
const uint32_t interval = 125;
uint16_t blinkMode = 0; // текущий режим свечения светодиода.
uint16_t blinkLoop = 0;
// Массив шаблонов свечения светодиода.
const uint16_t modesBlink[] = {
0B0000000000000000, // 0 светодиод постоянно выключен
0B1111111111111111, // 1 светодиод постоянно включён
0B1010101010101010, // 2
0B1101101101101101, // 3
0B0010010010010010, // 4
0B0000000011110000, // 5
0B1111000011110000, // 6
0B1100000000000000, // 7
0B1111111100111111, // 8
0B1100110000000000, // 9
0B1111111100110011, // 10
0B1000100010001000, // 11
0B1110111011101110, // 12
0B0000011000000000, // 13
0B1111111111111001, // 14
0B0001111000011110, // 16
0B1110000111100001, // 17
0B0001111111100000, // 18
0B0000000111111110 // 19
};
void setup() {
pinMode(ledPin, OUTPUT);
blinkMode = modesBlink[12]; // выбор текущего шаблона моргания из массива шаблонов
}
void loop() {
uint32_t currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (blinkMode & 1 << (blinkLoop & 0xF)) // чтение бита из текущего шаблона
digitalWrite(ledPin, HIGH);
else
digitalWrite(ledPin, LOW);
blinkLoop++;
}
}
Блинк с регулировкой частоты с помощью потенциометра
Задача разбивается на две - собственно, управление состоянием светодиода и получение нового интервала для блинка с потенциометра, подключенного к аналоговому входу A0
uint8_t const LED_PIN = 13; // пин для подключения светодиода
uint32_t const MAX_TIME = 5000; // максимальный период блинка, милисекунд
uint32_t const MIN_TIME = 100; // минимальный период блинка, милисекунд
uint32_t BLINK_TIMEOUT = 0; // текущий интервал блинка
// управление состоянием светодиода
void setLedState()
{
static uint32_t timer = 0;
if (millis() - timer >= BLINK_TIMEOUT)
{
static uint8_t ledState = LOW;
timer = millis();
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
}
}
// получение нового интервала блинка в зависимости от положения потенциометра,
// подключенного к аналоговому входу A0
void getBlinkTimeout()
{
// получаем значение с аналогового пина
uint16_t x = analogRead(A0);
// устанавливаем новое значение интервала
BLINK_TIMEOUT = map(x, 0, 1023, MIN_TIME, MAX_TIME);
}
void setup()
{
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
getBlinkTimeout();
setLedState();
}
См. также Fade. Плавное разгорание и затухание светодиода. (analogWrite, PWM/ШИМ)