Пишем свой первый скетч: Урок № 1

Урок № 1
Это продолжение цикла уроков про Ардуино для начинающих.

Пишем свой первый скетч

Предыдущие уроки можно посмотреть здесь.
Урок № 0 — «Введение в программирование Ардуино»
Урок № 0.5 — «Продолжение вводного урока. Первое подключение Ардуино к компьютеру.»

В этом уроке, видео на который можно посмотреть на канале YOUTUBE
рассказано как подключить светодиод, рассчитать значение токоограничивающего резистора, про закон Ома, и многое другое.
Что такое функция void setup() и void loop(), вообщем посмотрите, не пожалеете.

Для этого урока, для основной его части потребуются:

Ардуино Нано v 3.0
Макетная плата (беспаечная) Breadboard
Провода 5 шт.
Резисторы 220 Ом 3 шт.
Светодиоды 3 шт.

Плату Ардуино и макетную плату вы покупаете всего 1 раз, а использовать будете на протяжении всех уроков.

Для дополнительного занятия потребуется ещё:

Этот урок надо использовать вместе с видео.

Теперь, как и обещал некоторые интересности.

Вот наш код из первого скетча:

#define LED 13

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

void loop() {
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}

Делает следующее:
мигает встроенным светодиодом на пине 13.
включает его на 1 секунду.
выключает на 1 секунду.
повторяет бесконечно.

Теперь как и обещал сократим код в функции loop()
И вместо 4 строчек написать всего 2:

#define LED 13

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

void loop() {
  digitalWrite(LED, !digitalRead(LED));
  delay(1000);
}
Что делают эти строчки:
Мы получаем текущее значение светодиода digitalRead(LED) и !digitalRead(LED) переворачиваем его (инвертируем).
Если светодиод горел, то гасим его
Если светодиод не горел, то зажигаем его.

с Логическими операторами мы познакомимся в следующих уроках:

&& (логическое И)    Истина, если оба операнда истина.

|| (логическое ИЛИ)   Истина, если хотя бы один операнд истина.

 ! (логическое отрицание)   Истина, если операнд Ложь, и наоборот.

Замена delay()

Эта функция служит для остановки микроконтроллера.
Как я и говорил в видео, функцию delay() надо применять очень осторожно.
Означает остановить выполнение всех программ (ну почти всех) и ждать пока не пройдёт время, указанное в скобках. Оно указывается в миллисекундах (1000 миллисекунд = 1 секунде) и пока это время не закончится ARDUINO будет бездействовать.
Есть ещё прерывания, но это мы будем изучать в следующих уроках.

Правильнее будет использовать функцию millis();
Она возвращает количество миллисекунд с момента начала выполнения программы.
Количество миллисекунд в millis() ограничено 50 днями. При наступлении этого времени счётчик сбросится 0.

Вот что у нас теперь получилось:

#define LED 13
#define STOP 1000 // 1000 миллисекунд = 1 секунда

unsigned long prev_ms = 0; // время последнего изменения состояния светодиода

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

void loop() {
  /*
    Проверяем, настало ли время изменить состояние светодиода.
    Если с момента последнего переключения прошло больше STOP миллисекунд —
    меняем состояние.
  */
  if (millis() - prev_ms > STOP) {
    digitalWrite(LED, !digitalRead(LED)); // инверсия состояния
    prev_ms = millis();
  }

  /*
    Здесь может выполняться любой другой код.
    Светодиод будет переключаться независимо от него.
  */
}
Делает следующее:
мигает светодиодом на пине 13 каждую секунду.
использует millis() вместо delay() — неблокирующий подход.
позволяет выполнять другой код в loop без прерываний.

Теперь переходим к самому интересному.
Дополнительной части урока.
Напишу её сегодня-завтра. Хочу, чтобы на выходные вам было чем заняться.


Удачи вам в освоении этого непростого, но интересного дела.
Изучив эти уроки, вы освоите новую, интересную профессию – Программист. Освоив её, вы можете быть спокойны за свою будущее, ведь по статистике, программист самый востребованный и высокооплачиваемый специалист в наше время.
Смотрите новые уроки. Подписывайтесь на канал. И удачи.

Необходимые компоненты

  • Arduino Nano v3.0
  • Макетная плата Breadboard
  • Провода (5 шт.)
  • Резисторы 220 Ом (3 шт.)
  • Светодиоды (3 шт.)

Подключение

  • Светодиод: анод к пину 13 через резистор 220 Ом, катод к GND.

Как это работает

  1. pinMode(LED, OUTPUT) — настраивает пин как выход.
  2. digitalWrite(HIGH/LOW) — включает/выключает LED.
  3. delay(1000) — пауза 1 секунда.
  4. millis() — позволяет не блокировать выполнение.

Пример кода (оптимизированный)

// Мигаем встроенным светодиодом без блокировки
#define LED 13
#define INTERVAL 1000
unsigned long prev = 0;

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

void loop() {
  if (millis() - prev >= INTERVAL) {
    digitalWrite(LED, !digitalRead(LED));
    prev = millis();
  }
  // Здесь можно выполнять другие задачи
}

Разбор кода

millis() — prev: проверяет, прошло ли 1000 мс.
!digitalRead(): инвертирует состояние LED.
prev = millis(): обновляет время последнего переключения.

Заключение

Первый скетч — основа работы с Arduino. Вы научились мигать светодиодом, использовать setup() и loop(), а также заменили delay() на millis() для неблокирующего кода. Продолжайте экспериментировать!

FAQ — Первый скетч на Arduino (Урок №1)

Что изучается в первом уроке Arduino?

В первом уроке показано, как подключить светодиод, рассчитать резистор, понять работу функций setup() и loop(), а также написать свой первый скетч с мигающим LED на Arduino.

Что делает первый скетч Arduino?

Первый скетч включает и выключает светодиод с интервалом в одну секунду. Это демонстрация базовой работы цифровых выходов и циклического выполнения программы.

Какие компоненты нужны для урока?

Используются Arduino Nano v3.0, макетная плата, провода, три резистора 220 Ом и три светодиода. Эти компоненты подходят для всех последующих уроков.

Как подключить светодиод к Arduino?

Анод светодиода подключается к пину 13 через резистор 220 Ом, катод — к контакту GND. Такое подключение позволяет безопасно управлять LED с помощью Arduino.

Чем отличается delay() от millis()?

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

Почему важно избегать delay() в проектах Arduino?

delay() временно блокирует выполнение программы, из-за чего Arduino не может реагировать на события. millis() решает эту проблему, позволяя создавать неблокирующие задержки.