Поморгаем светодиодом. 6 вариантов

Предлагаю 5 вариантов поморгать светодиодом.

НАМ ПОНАДОБИТСЯ
  • Плата Arduino Uno
  • Один светодиод
  • Один резистор сопротивлением 220-270 Ом.
  • Провода
  • Макетная плата
СХЕМА ПОДКЛЮЧЕНИЯ

Led_breadboard

 

СКЕТЧ
1
2
3
4
5
6
7
8
9
void setup() {
pinMode(13, OUTPUT);       // Инициализируем цифровой pin 13 как выход
}
void loop() {              // бесконечный цикл
digitalWrite(13, HIGH);    // Включаем светодиод (HIGH выставляет высокий уровень)
delay(1000);               // Задержка 1 секунда
digitalWrite(13, LOW);     // Выключаем светодиод (LOW выставляет низкий уровень)
delay(1000);               // Задержка 1 секунда
}
Чтобы не переписывать в коде программы номер пина, при смене цифрового выхода, удобно присвоить в начале программы данному пину какое-нибудь имя.
например:
int led = 13;
и тогда в коде нужно заменить «13» на «led».
1
2
3
4
5
6
7
8
9
10
int led = 13;            // Присваиваем имя цифровому выводу 13
void setup() {
pinMode(led, OUTPUT);    // Инициализируем цифровой pin 13 как выход
}
void loop() {            // бесконечный цикл
digitalWrite(led, HIGH); // Включаем светодиод (HIGH выставляет высокий уровень)
delay(1000);             // Задержка 1 секунда
digitalWrite(led, LOW);  // Выключаем светодиод (LOW выставляет низкий уровень)
delay(1000);             // Задержка 1 секунда
}

 

Также можно моргать светодиодом используя команду инвертирования:

1
2
3
4
5
6
7
8
9
10
11
int led = 13;                       // Подключаем светодиод к пину 13, присваиваем имя "led"
int state = LOW;                    // Устанавливаем начальное состояние светодиода LOW
void setup()
{
pinMode(led, OUTPUT);               // Инициализируем цифровой порт "led" как выход
}
void loop()
{
digitalWrite(led, state = !state);  // меняем значение порта "led" на противоположное
delay(1000);                        // Пауза 1 секунда
}

Код с использованием millis() и без задержек delay(), позволяет освободить процессор для выполнения других задач:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const int ledPin =  13;          // Присваиваем имя цифровому выводу 13  
int ledState = LOW;              // Устанавливаем начальное состояние светодиода LOW
 
unsigned long previousMillis = 0;// Используем переменную типа unsigned long, для хранения предыдущих обновлений светодиода
const long interval = 1000;      // Не изменяемая константа, задает интервал мигания светодиода в милисекундах
 
void setup()
 {
    pinMode(ledPin, OUTPUT);     //Инициализируем цифровой pin 13 как выход
 }
 
void loop()
{
  unsigned long currentMillis = millis(); //переменная текущего времени
 
  if(currentMillis - previousMillis >= interval) { // разница между текущим и последним зажиганием светодиода больше заданного интервала
        previousMillis = currentMillis;   // сохраняем последнее время, зажигания светодиода
 
       if (ledState == LOW) //если светодиод не горит, то включаем и наоборот
      ledState = HIGH;
    else
      ledState = LOW;
 
      digitalWrite(ledPin, ledState); //записываем в порт светодиода состояние ledState (HIGH или LOW)
  }
}

Еще вариант с использованием millis():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int led = 13;             // Подключаем светодиод к пину 13, присваиваем имя "led"
int state = LOW;          // Устанавливаем начальное состояние светодиода LOW
 
void setup()
{
  pinMode(led, OUTPUT);   // Инициализируем цифровой порт "led" как выход
}  
 
 
int ms, ms1 = 0;        //назначаем переменные и приравниваем их к 0.(можно использовать uint32_t)
boolean stat    = true; //Переменные типа boolean могут принимать одно из двух значений: true или false.
 
void loop() {
   ms = millis();
 
   if( ( ms - ms1 ) > 1000 || ms < ms1 ) // Событие срабатывает каждые 1000 мс   
   {
    ms1 = ms;  
    digitalWrite(led, stat); 
    stat = !stat;  // Инвертируем порт "led"  
   }
}

И последний вариант с использованием функции random(), которая генерирует псевдо-случайные числа:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int led = 13;             // Подключаем светодиод к пину 13, присваиваем имя "led"
int state = LOW;          // Устанавливаем начальное состояние светодиода LOW
long randTime;            // Переменная для хранения сгенерированного значения времени
 
void setup()
{
  pinMode(led, OUTPUT);   // Инициализируем порт "led" как выход
}  
 
void loop()
{
  randTime = random(100, 1000);  // генерируем случайное значение времени в диапазоне от 100 до 1000
  delay(randTime);               // Пауза со случайным временем  
  digitalWrite(led, state = !state); // меняем значение порта "led" на противоположное
}

В данных примерах используется цифровая ножка 13. На ардуино к этой ножке подключен светодиод, расположенный непосредственно на самой плате. Поэтому, для демонстрации данного примера,  можно не подключать внешний светодиод с резистором.