void setup() {
// Выполняется ОДИН РАЗ при старте.
// Здесь настраиваем пины, запускаем Serial, подключаем библиотеки.
}
void loop() {
// Выполняется БЕСКОНЕЧНО в цикле, пока плата включена.
// Здесь основная логика программы.
} pinMode(13, OUTPUT); // Настроить пин 13 как ВЫХОД (для светодиода, реле)
pinMode(2, INPUT); // Настроить пин 2 как ВХОД (для кнопки, датчика)
pinMode(2, INPUT_PULLUP); // ВХОД с внутренней подтяжкой к +5В (кнопка на GND)
digitalWrite(13, HIGH); // Подать +5В на пин (включить светодиод)
digitalWrite(13, LOW); // Подать 0В на пин (выключить светодиод) // ------------------------------------------------------------
// РАБОТА C ЦИФРОВЫМИ ПИНАМИ (ЛИБО 0 ЛИБО 1)
// ------------------------------------------------------------
digitalWrite(3, 1); //подать +5В на контакт D3
digitalWrite(3, 0); //подать GND на контакт D3
int state = digitalRead(2); // Прочитать состояние пина D2 и записать это состояние в переменную state. В данном случае в переменную state будет записано либо 0, если на контакт D2 подается GND, либо 1, если +5В
// ------------------------------------------------------------
// РАБОТА С АНАЛОГОВЫМИ ПИНАМИ (ПЛАВНОЕ ИЗМЕНЕНИЕ ЗНАЧЕНИЙ)
// ------------------------------------------------------------
int value = analogRead(A0); // Прочитать аналоговое значение. Команда analogRead(A0) измеряет напряжение на контакте A0 от 0 до 5В и преобразует его в число от 0 до 1023. В результате в переменную value будет записано число от 0 до 1023 в зависимости от напряжения, подаваемого на контакт A0 в момент выполнения данной команды.
analogWrite(9, 128); // ШИМ на пине D9: 0 (выкл) .. 255 (макс). ШИМ Работает только на пинах: 3,5,6,9,10,11. В результате выполнения этой команды светодиод, подключенный к контакту D9 будет гореть с 50% яркостью, т.к. 128 это половина от 255. delay(1000); // Пауза 1000 мс (1 секунда) — блокирует программу
delayMicroseconds(100); // Пауза 100 микросекунд
unsigned long t = millis(); // записать в переменную t время с момента старта в мс
unsigned long m = micros(); // записать в переменную m время с момента старта в микросекундах int counter = 0; // Целое: -32768..32767 (2 байта)
long bigNum = 100000; // Длинное целое (4 байта)
unsigned long time = 0; // Беззнаковое длинное (для millis)
float voltage = 2.5; // Число с плавающей точкой
bool ledState = false; // Логический тип: true / false
char symbol = 'A'; // Символ
byte b = 255; //целое 0..255
const int LED_PIN = 13; // Константа (нельзя изменить).
#define LED_PIN 13 // То же самое через директиву препроцессора // ------------------------------------------------------------
// ПРОСТОЕ ИСПОЛЬЗОВАНИЕ IF
// ------------------------------------------------------------
if (value > 500) {
// здесь код, который будет выполнен, если переменная value больше 500
} else {
// здесь код, который будет выполнен, если условие value > 500 не верно
}
// ------------------------------------------------------------
// РАСШИРЕННОЕ ИСПОЛЬЗОВАНИЕ IF (количество else if() не ограничено)
// ------------------------------------------------------------
if (value > 500) {
// здесь код, который будет выполнен, если переменная value больше 500
} else if (value < 200) {
// здесь код, который будет выполнен, если переменная value меньше 200
} else {
// здесь код, который будет выполнен, если первые два условия не верны
}
// Логические операторы:
// && — И
// || — ИЛИ
// ! — НЕ
// == — равно
// != — не равно
// > < >= <= — сравнения switch (mode) {
case 0:
// код, написанный здесь будет выполнен, если переменная mode равна 0
break;
case 1:
// код, написанный здесь будет выполнен, если переменная mode равна 1
break;
case 2:
// код, написанный здесь будет выполнен, если переменная mode равна 2
break;
default:
// код, написанный здесь будет выполнен, если переменная mode не равна ни одному из перечисленных значений выше
break;
} for (int i = 0; i < 5; i++) {
// повторить 5 раз (i = 0,1,2,3,4)
}
while (условие) {
// код здесь будет выполняться по кругу, пока условие верно
}
do {
// выполнить хотя бы один раз
} while (условие); int arr[5]; // создаем массив по имени arr, в котором 5 переменных типа int
int arr[5] = {}; //создаем массив по имени arr, в котором 5 переменных типа int и заполняем все переменные нулями
int arr[] = {1, 2, 3, 4, 5}; //создаем массив по имени arr, в котором неколько переменных, переменная arr[0]=0, arr[1]=2, arr[2]=3 и т.д. Всего 5 ячеек.
Serial.print(arr[3]); //отправляем содержимое четвертой ячейки массива arr в сериал порт (в данном случае число 4)
// вывод на экран содержимого первых 5 ячеек массива arr
for (int i = 0; i < 5; i++) {
Serial.print(arr[i]);
}
// заполняем массив arr квадратами чисел от 0 до 4
for (int i = 0; i < 5; i++) {
arr[i] = i * 2;
// i = 0,1,2,3,4
// i*2 = 0,2,4,6,8
} Serial.begin(9600); // Инициализация (обычно в setup)
Serial.print("value = "); // Вывод без перевода строки (будет выведена строка "value ="
Serial.println(value); // Вывод с переводом строки (будет выведено значение переменной value) int v = map(value, 0, 1023, 0, 255); // Пересчёт диапазона: 0..1023 → 0..255
int c = constrain(v, 0, 255); // Ограничить значение в диапазоне
int a = abs(-5); // Модуль числа = 5
int mn = min(3, 7); // Минимум = 3
int mx = max(3, 7); // Максимум = 7
float p = pow(2, 3); // Степень: 2^3 = 8.0
float r = sqrt(16); // Корень = 4.0 HIGH / LOW // 1 / 0 — уровни сигнала
true / false // логические значения (1 или 0)
LED_BUILTIN // встроенный светодиод (обычно пин 13)
// ============================================================
// ШПАРГАЛКА ПО ARDUINO: ЧАСТО ИСПОЛЬЗУЕМЫЕ КОМАНДЫ
// ============================================================
// ------------------------------------------------------------
// 1. СТРУКТУРА СКЕТЧА
// ------------------------------------------------------------
void setup() {
// Выполняется ОДИН РАЗ при старте.
// Здесь настраиваем пины, запускаем Serial, подключаем библиотеки.
}
void loop() {
// Выполняется БЕСКОНЕЧНО в цикле, пока плата включена.
// Здесь основная логика программы.
}
// ------------------------------------------------------------
// 2. ЦИФРОВЫЕ ПИНЫ: НАСТРОЙКА И УПРАВЛЕНИЕ
// ------------------------------------------------------------
pinMode(13, OUTPUT); // Настроить пин 13 как ВЫХОД (для светодиода, реле)
pinMode(2, INPUT); // Настроить пин 2 как ВХОД (для кнопки, датчика)
pinMode(2, INPUT_PULLUP); // ВХОД с внутренней подтяжкой к +5В (кнопка на GND)
digitalWrite(13, HIGH); // Подать +5В на пин (включить светодиод)
digitalWrite(13, LOW); // Подать 0В на пин (выключить светодиод)
int state = digitalRead(2); // Прочитать состояние пина: HIGH (1) или LOW (0)
// ------------------------------------------------------------
// 3. АНАЛОГОВЫЙ ВВОД (ADC) И ШИМ-ВЫВОД
// ------------------------------------------------------------
int value = analogRead(A0); // Прочитать аналоговое значение: 0..1023
analogWrite(9, 128); // ШИМ на пине ~9: 0 (выкл) .. 255 (макс)
// Работает только на пинах с "~": 3,5,6,9,10,11
// ------------------------------------------------------------
// 4. ЗАДЕРЖКИ И ВРЕМЯ
// ------------------------------------------------------------
delay(1000); // Пауза 1000 мс (1 секунда) — блокирует программу
delayMicroseconds(100); // Пауза 100 микросекунд
unsigned long t = millis(); // записать в переменную t время с момента старта в мс
unsigned long m = micros(); // записать в переменную m время с момента старта в микросекундах
// ------------------------------------------------------------
// 5. ПЕРЕМЕННЫЕ И ТИПЫ ДАННЫХ
// ------------------------------------------------------------
int counter = 0; // Целое: -32768..32767 (2 байта)
long bigNum = 100000; // Длинное целое (4 байта)
unsigned long time = 0; // Беззнаковое длинное (для millis)
float voltage = 2.5; // Число с плавающей точкой
bool ledState = false; // Логический тип: true / false
char symbol = 'A'; // Символ
byte b = 255; // 0..255
const int LED_PIN = 13; // Константа (нельзя изменить)
#define LED_PIN 13 // То же самое через директиву препроцессора
// ------------------------------------------------------------
// 6. УСЛОВИЯ И ЛОГИКА
// ------------------------------------------------------------
if (value > 500) {
// выполнить, если условие истинно
} else if (value > 200) {
// иначе, если второе условие истинно
} else {
// иначе
}
// Логические операторы:
// && — И || — ИЛИ ! — НЕ
// == — равно != — не равно
// > < >= <= — сравнения
// ------------------------------------------------------------
// 7. ЦИКЛЫ
// ------------------------------------------------------------
for (int i = 0; i < 5; i++) {
// повторить 5 раз (i = 0,1,2,3,4)
}
while (digitalRead(2) == LOW) {
// выполнять, пока кнопка нажата
}
do {
// выполнить хотя бы один раз
} while (условие);
// ------------------------------------------------------------
// 8. МАССИВЫ
// ------------------------------------------------------------
void setup() {
Serial.begin(115200);
// int arr[5]; // 5 ячеек int
// int arr[5] = {}; // 5 ячеек int с инициализацией нулями
int arr[] = {1, 2, 3, 4, 5}; // 5 ячеек int с инициализацией (авто-количество)
// вывод
for (int i = 0; i < 5; i++) {
Serial.print(arr[i]);
}
// печать 12345
Serial.println();
// изменение
for (int i = 0; i < 5; i++) {
arr[i] = i * 2;
// i = 0,1,2,3,4
// i*2 = 0,2,4,6,8
}
// перебор через for и вывод
for (int i = 0; i < 5; i++) {
Serial.print(arr[i]);
}
// печать 02468
Serial.println();
// перебор через for (foreach) и вывод
for (int v : arr) {
Serial.print(v);
}
// печать 02468
Serial.println();
}
void loop() {
}
// ------------------------------------------------------------
// 9. ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ (Serial)
// ------------------------------------------------------------
Serial.begin(9600); // Инициализация (обычно в setup)
Serial.print("Значение: "); // Вывод без перевода строки
Serial.println(value); // Вывод с переводом строки
Serial.println(voltage, 2); // Вывод float с 2 знаками после точки
if (Serial.available() > 0) { // Проверка: есть ли входящие данные
char c = Serial.read(); // Прочитать 1 байт
}
// ------------------------------------------------------------
// 10. МАТЕМАТИКА И ПРЕОБРАЗОВАНИЯ
// ------------------------------------------------------------
int v = map(value, 0, 1023, 0, 255); // Пересчёт диапазона: 0..1023 → 0..255
int c = constrain(v, 0, 255); // Ограничить значение в диапазоне
int a = abs(-5); // Модуль числа = 5
int mn = min(3, 7); // Минимум = 3
int mx = max(3, 7); // Максимум = 7
float p = pow(2, 3); // Степень: 2^3 = 8.0
float r = sqrt(16); // Корень = 4.0
// ------------------------------------------------------------
// 12. ЧТЕНИЕ НАПРЯЖЕНИЯ С ДЕЛИТЕЛЯ / ПОТЕНЦИОМЕТРА
// ------------------------------------------------------------
int raw = analogRead(A0); // 0..1023
float voltage = raw * (5.0 / 1023.0); // Перевод в вольты
// ------------------------------------------------------------
// 13. ЧАСТЫЕ КОНСТАНТЫ
// ------------------------------------------------------------
HIGH / LOW // 1 / 0 — уровни сигнала
INPUT / OUTPUT // режимы пинов
INPUT_PULLUP // вход с подтяжкой
true / false // логические значения
LED_BUILTIN // встроенный светодиод (обычно пин 13)
A0..A5 // аналоговые пины
// ------------------------------------------------------------
// 14. ПЕРЕСЧЕТ ИЗ ОДНОГО ДИАПАЗОНА В ДРУГОЙ
// ------------------------------------------------------------
map(value, fromLow, fromHigh, toLow, toHigh);
// value — значение, которое нужно пересчитать.
// fromLow, fromHigh — нижняя и верхняя границы исходного диапазона.
// toLow, toHigh — нижняя и верхняя границы целевого диапазона.