diff --git a/content/posts/2023/arduino/start.md b/content/posts/2023/arduino/start.md new file mode 100644 index 0000000..eb511cc --- /dev/null +++ b/content/posts/2023/arduino/start.md @@ -0,0 +1,500 @@ +--- +title: "πŸ“Ÿ Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Arduino" +date: 2023-02-24T16:46:09+03:00 +draft: true +tags: [arduino, tips] +--- + +⚠️ Π‘Ρ‚Π°Ρ‚ΡŒΡ носит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΈ находится Π² процСссС написания. +Π•ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, части тСкста Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. + +## Π¦ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΏΠΈΠ½Ρ‹ ΠΈ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ + +ВсС ΠΏΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° нСсколько Π²ΠΈΠ΄ΠΎΠ², +Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² **количСствС** Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Π°Ρ…. + +1. **Power Pins** β€” ΠΏΠΎΡ€Ρ‚Ρ‹ питания, Ρ€Π΅ΠΆΠΈΠΌ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ нСльзя Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. +Они Π²Ρ‹Π΄Π°ΡŽΡ‚ стабилизированноС напряТСниС 5V ΠΈΠ»ΠΈ 3,3V, +Vin Π²Ρ‹Π΄Π°Π΅Ρ‚ напряТСниС ΠΎΡ‚ источника питания, +Π° GND β€” это Π·Π°Π·Π΅ΠΌΠ»Π΅Π½ΠΈΠ΅ (ΠΎΠ±Ρ‰ΠΈΠΉ минус) +2. **PWM Pins** β€” ΠΏΠΎΡ€Ρ‚Ρ‹ с ШИМ модуляциСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, +ΠΊΠ°ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π²Ρ‹Ρ…ΠΎΠ΄/Π²Ρ…ΠΎΠ΄. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ Π½Π° ΠΏΠ»Π°Ρ‚Π΅ Π·Π½Π°ΠΊΠΎΠΌ Ρ‚ΠΈΠ»ΡŒΠ΄Π° (˜) +3. **Analog In** β€” ΠΏΠΎΡ€Ρ‚Ρ‹, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ сигнал ΠΎΡ‚ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° Π²Ρ…ΠΎΠ΄. +Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π²Ρ…ΠΎΠ΄/Π²Ρ‹Ρ…ΠΎΠ΄. +Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠΈΠ½Ρ‹ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ШИМ ΠΌΠΎΠ΄ΡƒΠ»ΡΡ†ΠΈΡŽ. + +Π Π΅ΠΆΠΈΠΌ ΠΏΠΈΠ½ΠΎΠ² назначаСтся Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ `void setup` с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `pinMode()`, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: + +```c +void setup() { + pinMode(10, OUTPUT); // объявляСм ΠΏΠΈΠ½ 10 ΠΊΠ°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄ + pinMode(A2, OUTPUT); // объявляСм ΠΏΠΈΠ½ A2 ΠΊΠ°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄ + + pinMode(12, INPUT); // объявляСм ΠΏΠΈΠ½ 12 ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄ + pinMode(A1, INPUT); // объявляСм ΠΏΠΈΠ½ A1 ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄ +} +``` + +**ПояснСния ΠΊ ΠΊΠΎΠ΄Ρƒ:** +1. К Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ `10` ΠΈ `A2` ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод, +ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. +2. Пин `10` ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ШИМ сигнала, +Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ»Π°Π²Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод, +Π° ΠΏΠΈΠ½ `A2` ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ сигнал (`0` ΠΈΠ»ΠΈ `1`) +3. К Π²Ρ…ΠΎΠ΄Ρƒ `12` ΠΈ `A1` ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ +ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ сигнала Π½Π° этих ΠΏΠΈΠ½Π°Ρ… +(логичСский Π½ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ) +4. К Π²Ρ…ΠΎΠ΄Ρƒ `A1` ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ, +Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сигнал, +Π½ΠΎ ΠΈ ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ характСристику сигнала. + +ℹ️ **Для справки:** + +ΠŸΠΈΠ½Ρ‹ Π½Π΅ случайно Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° ΠΏΠΈΠ½Ρ‹ с ШИМ модуляциСй (_PWM Pins_) ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅. +**PWM** ΠΏΠΈΠ½Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ сигнал, ΠΊ Π½ΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ сСрвопривод, +ΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ устройства, +Π³Π΄Π΅ трСбуСтся ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ сигнал с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ характСристиками. +**АналоговыС ΠΏΠΈΠ½Ρ‹** (_Analog In_) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ², +с Π½ΠΈΡ… входящий сигнал прСобразуСтся Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнного АЦП. + +### ИспользованиС Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΏΠΈΠ½ΠΎΠ² ΠΊΠ°ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ + +ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ большого количСства устройств ΠΊ ΠΏΠ»Π°Ρ‚Π΅ +ΠΏΠΈΠ½ΠΎΠ² ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. +Π’ΠΎΠ³Π΄Π° Π² скСтчС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΏΠΈΠ½Ρ‹ ΠΊΠ°ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅. +Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎΠ΅, Π° Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ², +Ρ‚.Π΅. `A0` β€” это 14 ΠΏΠΈΠ½, `A1` β€” это 15 ΠΏΠΈΠ½ ΠΈ Ρ‚.Π΄. (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Uno ΠΈΠ»ΠΈ Nano). + +Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π²Π΅ строчки ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. + +```c +void setup() { + pinMode(A2, OUTPUT); // объявляСм ΠΏΠΈΠ½ A2, ΠΊΠ°ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ + pinMode(16, OUTPUT); // объявляСм ΠΏΠΈΠ½ 16, ΠΊΠ°ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ +} +``` + +### НазначСниС ΠΏΠΈΠ½ΠΎΠ² SDA, SCL + +Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΡ€ΠΈΠ΅ΠΌΠ°/ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ **I2C**. +НапримСр, ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΆΠΊ дисплСя с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ I2C ΠΈΠ»ΠΈ GPS модуля. +Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ +с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹ΠΌ устройством, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». +На Ардуино Mega, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ Uno ΠΈ Nano, имССтся Ρ†Π΅Π»Ρ‹Ρ… Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Ρ‹ ΠΏΠΈΠ½ΠΎΠ² SDA ΠΈ SCL. + +### НазначСниС ΠΏΠΈΠ½ΠΎΠ² TX, RX + +ΠŸΠΈΠ½Ρ‹ TX/RX Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ, +Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ **UART**. +На ΠΏΠ»Π°Ρ‚Π°Ρ… Uni ΠΈ Nano ΠΏΠΈΠ½Ρ‹ TX/RX ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ USB Ρ€Π°Π·ΡŠΠ΅ΠΌΡƒ для связи с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ. +ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΡ€Ρ‚Π°ΠΌ устройство, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Bluetooth ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, +Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² Ардуино скСтч Π½Π΅ получится, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Π° автоматичСски ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ +Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… с устройства, Π° Π½Π΅ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. + +## Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ `void loop()` ΠΈ `void setup()` + +Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ `void loop()` ΠΈ `void setup()` β€” это ΠΏΠ΅Ρ€Π²ΠΎΠ΅ с Ρ‡Π΅ΠΌ сталкиваСтся любой, +ΠΊΡ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ знакомство с языком программирования ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² Ардуино. + +Π”Π°Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ скСтчС ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, +Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ†ΠΈΠΊΠ»ΠΎΠ² Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. + +Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ запускС ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Arduino, +Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ встроСнныС ΠΌΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, +ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π½Π΅ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. + +Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π½Π°Ρ‡Π°Π» ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ, +Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ скСтч. + +Оба Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ `main()` ΠΈΠ· Ρ„Π°ΠΉΠ»Π° `main.cpp`. +ΠŸΡ€ΠΈ этом функция `void setup()` вызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, +Π° ΠΈ `void loop()` вызываСтся Π² Ρ†ΠΈΠΊΠ»Π΅ `for` бСсконСчноС количСство Ρ€Π°Π·. + +Если Π² скСтчС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ +`void setup()` ΠΈΠ»ΠΈ `void loop()`, Ρ‚ΠΎ ΠΏΡ€ΠΈ компиляции Aduino IDE выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ: +`redefinition of β€˜void setup()β€˜` ΠΈΠ»ΠΈ `redefinition of β€˜void loop()’` соотвСтствСнно. + +### Ѐункция `void setup()` + +```c +void setup() { + // ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок +} +``` + +Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Π³Π΄Π΅ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† Ρ†ΠΈΠΊΠ»Π°, +поэтому всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. + +ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° `void setup()` вызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· +ΠΈ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для назначСния Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΈΠ½ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, +ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. + +### `void loop()` + +ПослС выполнСния Ρ†ΠΈΠΊΠ»Π° `setup`, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ†ΠΈΠΊΠ» `loop`, +ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π° ΠΏΠ»Π°Ρ‚Ρƒ ΠΏΠΎΠ΄Π°Π½ΠΎ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅. + +Если Ρ†ΠΈΠΊΠ» содСрТит ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ тысячи Ρ€Π°Π· Π² сСкунду. + +Если Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скСтч для мигания свСтодиодом Π½Π° Arduino, +Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² ΠΊΠΎΠ΄ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, +ΠΈΠ½Π°Ρ‡Π΅ мигания свСтодиода Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ. + +Ѐункция `loop*()` ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ: + +```c +void loop() { + // основной ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ располагаСтся здСсь +} +``` + +Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ +Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· (для ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ устройства) +Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Arduino Nano, +Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ `void setup()`. + +Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ дСйствиС постоянно, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, +ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΡƒΠ»ΡŒΡ‚Ρ€Π°Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ Π΄Π°Π»ΡŒΠ½ΠΎΠΌΠ΅Ρ€Π° **HC-SR04**, +Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ слСдуСт Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ `void loop()`. + +### Ѐункция `pinMode()` + +Ѐункция `pinMode()` устанавливаСт Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΈΠ½Π°, ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π°. + +Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΏΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π΄Π²ΡƒΡ… состояниях. +Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ…ΠΎΠ΄Π° ΠΏΠΈΠ½ считываСт напряТСниС ΠΎΡ‚ 0 Π΄ΠΎ 5 Π’ΠΎΠ»ΡŒΡ‚, +Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π° – Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΈΠ½Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ напряТСниС. + +Π Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΈΠ½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° выбираСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `pinMode(pin, mode)`, +Π³Π΄Π΅ `pin` это Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΈΠ½Π°, Π° `mode` это Ρ€Π΅ΠΆΠΈΠΌ. + +### pinMode OUTPUT + +**OUTPUT** (ΠΏΠΎΡ€Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄) β€” ΠΏΠΈΠ½ становится управляСмым источником питания +с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΎΠΊΠΎΠΌ 40 мА. + +Π’ зависимости ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ `digitalWrite()` ΠΏΠΈΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ нуля. +ΠŸΡ€ΠΈΠΌΠ΅Ρ€: `pinMode(10, OUTPUT)`. + +### Ѐункция `digitalWrite()` ΠΈ `analogWrite()` + +Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΏΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ сигнал с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ `digitalWrite()`, +Ρ‚.Π΅. Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ напряТСниС 5 Π’ΠΎΠ»ΡŒΡ‚. + +Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ сигнал ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π° значСния β€” `0` ΠΈΠ»ΠΈ `1` (0 Π’ΠΎΠ»ΡŒΡ‚ ΠΈΠ»ΠΈ 5 Π’ΠΎΠ»ΡŒΡ‚). + +Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° `analogWrite()` для ШИМ ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΏΠ»Π°Ρ‚Ρ‹, +Ρ‚ΠΎ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сигнал **PWM** Π½Π° ΠΏΠΎΡ€Ρ‚Π°Ρ… β€” +ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ сигнала. + +```c +void setup() { + pinMode(10, OUTPUT); +} + +void loop() { + digitalWrite(10, HIGH); + delay(250); + digitalWrite(10, LOW); + delay(250); +} +``` + +К ΠΏΠΈΠ½Π°ΠΌ нСльзя ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ устройства, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠΊ Π±ΠΎΠ»Π΅Π΅ **40 мА**, +Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ основноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° β€” +это управлСния Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ устройствами ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ логичСских сигналов. +Если ΠΊ ΠΏΠΈΠ½Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ устройство, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰Π΅Π΅ Ρ‚ΠΎΠΊ большС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ значСния, +Ρ‚ΠΎ ΠΏΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³ΠΎΡ€Π΅Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°ΠΌ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π½Π΅ слСдуСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ +ΠΌΠΎΡ‰Π½Π΅Π΅ свСтодиода. + +### pinMode INPUT + +**INPUT** (ΠΏΠΎΡ€Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄) β€” +ΠΏΠΈΠ½ Π² этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ считываСт Π΄Π°Π½Π½Ρ‹Π΅ с Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ², состояния ΠΊΠ½ΠΎΠΏΠΎΠΊ. +ΠŸΠΎΡ€Ρ‚ находится Π² высокоимпСдансном состоянии, +Ρ‚.Π΅. Ρƒ ΠΏΠΈΠ½Π° высокоС сопротивлСниС. +ΠŸΡ€ΠΈΠΌΠ΅Ρ€: `pinMode(10, INPUT)`. + +### Ѐункция `digitalRead()` ΠΈ `analogRead()` + +Arduino ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ напряТСния Π½Π° ΠΏΠΈΠ½Π΅ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `digitalRead()`, +которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `0` (`LOW`) ΠΈΠ»ΠΈ `1` (`HIGH`). + +БущСствуСт Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅) +ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΌ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ постоянно измСняСтся. + +Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `analogRead()`, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ напряТСниС с Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°, +функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число ΠΎΡ‚ `0` Π΄ΠΎ `1023`. + +```c +void setup() { + pinMode(10, INPUT); + Serial.begin(9600); +} + +void loop() { + int data = digitalRead(10); + Serial.println(data); + delay(250); +} +``` + +НСльзя ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° напряТСниС Π²Ρ‹ΡˆΠ΅ напряТСния питания ΠΏΠ»Π°Ρ‚Ρ‹. + +ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ +`digitalRead()` ΠΈ `digitalWrite()`. +Π’ этом случаС Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ (`digitalRead`) +ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ (`digitalWrite`) Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ, Π° Π½Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ сигнал. + +### pinMode INPUT_PULLUP + +**INPUT_PULLUP** (ΠΏΠΎΡ€Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄) +Π½ΠΎ ΠΊ ΠΏΠΈΠ½Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ рСзистор Π² 20 кОм. + +Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΊ Ардуино ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ +внСшниС ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ рСзисторы. +ΠŸΡ€ΠΈΠΌΠ΅Ρ€: `pinMode(10, INPUT_PULLUP)`. + +## Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° `#define` + +Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° `#define` позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° значСниям (константам), +ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ скСтч Π±ΠΎΠ»Π΅Π΅ понятным. + +Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ имя константы ΠΈΠ»ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π°, +Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² скСтчС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅. + +Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… с описаниСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ `#define`. + +ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ `#define`, +Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ мСста Π² памяти ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, +Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ подставляСт значСния вмСсто ΠΈΠΌΠ΅Π½ ΠΏΡ€ΠΈ компиляции скСтча. + +Π Π°Π±ΠΎΡ‚Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ `ΠΠΠ™Π’Π˜` ΠΈ `Π—ΠΠœΠ•ΠΠ˜Π’Π¬` Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅. + +ΠŸΡ€ΠΈ компиляции скСтча компилятор Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° `<Ρ‡Ρ‚ΠΎ мСняСм>` +ΠΈ замСняСт Π΅Π΅ Π½Π° кусок ΠΊΠΎΠ΄Π° `<Π½Π° Ρ‡Ρ‚ΠΎ мСняСм>`. + +**Бинтаксис Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹:** + +```c +#define <Ρ‡Ρ‚ΠΎ мСняСм> <Π½Π° Ρ‡Ρ‚ΠΎ мСняСм> +``` + +ΠŸΡ€ΠΈ использовании Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ использования ΠΈΠΌΠ΅Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, +константы ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΡ€ΠΈ компиляции. + +ℹ️ **ΠžΠ±Ρ€Π°Ρ‚ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:** + +Π’ ΠΊΠΎΠ½Ρ†Π΅ строчки Π½Π΅ ставится Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ΠΈ Π·Π½Π°ΠΊ равСнства, +ΠΊΠ°ΠΊ это дСлаСтся ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. + +```c +#define RED 11 // присваиваСм имя RED для ΠΏΠΈΠ½Π° 11 +#define GRN 12 // присваиваСм имя GRN для ΠΏΠΈΠ½Π° 12 +#define BLU 13 // присваиваСм имя BLU для ΠΏΠΈΠ½Π° 13 + +void setup() { + pinMode(RED, OUTPUT); // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ PIN 11 для Π²Ρ‹Π²ΠΎΠ΄Π° + pinMode(GRN, OUTPUT); // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ PIN 12 для Π²Ρ‹Π²ΠΎΠ΄Π° + pinMode(BLU, OUTPUT); // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ PIN 13 для Π²Ρ‹Π²ΠΎΠ΄Π° +} +``` + +ΠŸΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° вмСсто Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ², +Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π΅ Π²ΡΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Ρ†Π²Π΅Ρ‚ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΏΠΈΠ½Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½. + +А ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° `RED`, `GRN`, `BLU` +Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния ΠΏΡ€ΠΈ компиляции. + +### Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ `#ifdef`, `#ifndef` ΠΈ `#endif` Π² скСтчС + +Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ `#ifdef` провСрят, Π±Ρ‹Π»ΠΎ Π»ΠΈ встрСчСно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅, +Ссли Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ ставится Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΈ Π΄ΠΎ `#endif`. + +Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ провСряСтся Π±Ρ‹Π» Π»ΠΈ Ρ€Π°Π½Π΅Π΅ Π² `#define` ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, +Ссли Π΄Π°, Ρ‚ΠΎ ΠΊΠΎΠ΄ (Π²Ρ‹Π²ΠΎΠ΄ сообщСния Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡ€Ρ‚Π°) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, +Ссли ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ρ‚ΠΎ сообщСниС Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. + +```c +#ifdef DEBUG + Serial.println("Debug message: ..."); +#endif +``` + +Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ `#ifndef` провСрят, Π±Ρ‹Π»ΠΎ Π»ΠΈ встрСчСно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅ +ΠΈ Ссли Π½Π΅ Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ вставится Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΈ Π΄ΠΎ `#endif`. + +Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ новая константа, +Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π½Π΅Π΅ Π΅Ρ‘ Π½Π΅ объявляли Π² скСтчС. + +Если Π΄Π΅Ρ„Π°ΠΉΠ½ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΆΠ΅ использовался, +Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ строчки Π²Π½ΡƒΡ‚Ρ€ΠΈ конструкции `#ifndef … #endif`. + +```c +#ifndef RED + #define RED 11 +#endif +``` + +### Π—Π°ΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `#define` + +ΠšΡ€ΠΎΠΌΠ΅ использования Π΄Π΅Ρ„Π°ΠΉΠ½ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для объявлСния констант, +ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ `#define`. + +Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТный, Π½ΠΎ интСрСсный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования `#define`, +ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… инструкций Π² скСтчС. + +НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `pinMode()` +Π½Π° ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. + +```c +#define out(pin) pinMode(pin, OUTPUT) + +void setup() { + out(11); + out(12); + out(13); +} +``` + +Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ функция `pinMode()` Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΎΠ΄Π½ΠΈΠΌ словом `out`. + +Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π³Π΄Π΅ Π² скСтчС встрСтится слово `out`, +компилятор подставит строку `pinMode(pin, OUTPUT)` с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ `pin`. + +Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ `digitalWrite()` ΠΈ `delay()`. + +Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ RGB свСтодиод ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… свСтодиода с Π°Ρ€Π΄ΡƒΠΈΠ½ΠΊΠΎΠΉ +ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° скСтча с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Π΄Π΅Ρ„Π°ΠΉΠ½. + +```c +#define out(pin) pinMode(pin, OUTPUT) +#define on(pin, del) digitalWrite(pin, HIGH); delay(del) +#define off(pin, del) digitalWrite(pin, LOW); delay(del) + +void setup() { + out(11); + out(12); + out(13); +} + +void loop() { + on(11, 500); + off(11, 500); + on(12, 500); + off(12, 500); + on(13, 500); + off(13, 500); +} +``` + +## `define` ΠΈΠ»ΠΈ `const`, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ? + +Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ `#define` для создания констант, +Π² этом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово `const`. + +Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `const` Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ сразу +ΠΏΡ€ΠΈ объявлСнии константы. + +НСобходимо ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании `#define` ΠΈΠΌΠ΅Π½Π° слСдуСт Π΄Π΅Π»Π°Ρ‚ΡŒ +максимально ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ совпадСний с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈΠ· ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. + +```c +const int RED = 11; // присваиваСм имя RED для ΠΏΠΈΠ½Π° 11 +const int GRN = 12; // присваиваСм имя GRN для ΠΏΠΈΠ½Π° 12 +const int BLU = 13; // присваиваСм имя BLU для ΠΏΠΈΠ½Π° 13 + +void setup() { + pinMode(RED, OUTPUT); // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ PIN 11 для Π²Ρ‹Π²ΠΎΠ΄Π° + pinMode(GRN, OUTPUT); // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ PIN 12 для Π²Ρ‹Π²ΠΎΠ΄Π° + pinMode(BLU, OUTPUT); // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ PIN 13 для Π²Ρ‹Π²ΠΎΠ΄Π° +} +``` + +ℹ️ **Для справки:** + +ИспользованиС `#define` ΠΈΠ»ΠΈ `const` Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… прСимущСств, +с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния экономии объСма памяти ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. + +## Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, `delay()` ΠΈ `millis()` + +### `delayMicroseconds()` + +Ѐункция `delayMicroseconds()` останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ +Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство микросСкунд (**Π² 1 сСкундС 1 000 000 микросСкунд**). + +ΠŸΡ€ΠΈ нСобходимости Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° нСсколько тысяч микросСкунд +рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `delay()`. + +### `delay()` + +Ѐункция `delay()` останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство миллисСкунд +(**Π² 1 сСкундС 1 000 миллисСкунд**). + +Π’ΠΎ врСмя Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `delay()`, +Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ считаны ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊ ΠΏΠ»Π°Ρ‚Π΅ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, +Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запись Π² `EEPROM` Π΄Π°Π½Π½Ρ‹Ρ…. + +Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `millis()`. + +### `millis()` + +Ѐункция `millis()` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… миллисСкунд +с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π°Ρ‡Π°Π»Π° выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. + +Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сбрасываСтся Π½Π° ноль ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ значСния `unsigned long` +(**ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· 50 Π΄Π½Π΅ΠΉ**). + +Ѐункция `millis()` позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π² Π°Ρ€Π΄ΡƒΠΈΠ½ΠΊΠ΅, +Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ останавливаСтся +ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² скСтчС. + +```c +unsigned long timer = 0; +bool led_state = HIGH; + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + Serial.begin(9600); +} + +void loop() { + if (millis() - timer > 200) { + led_state =! led_state; + digitalWrite(LED_BUILTIN, led_state); + + timer = millis(); + } + + // Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ количСство миллисСкунд ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ + Serial.print("Time: "); + Serial.println(timer); +} +``` + +## `tone()` + +```text +// FIXIT: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/tone-arduino/ +``` + +## `map()` + +```text +// FIXIT: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/map-arduino/ +``` + +## `random()` + +```text +// FIXIT: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/random-arduino/ +``` + +## Serial Monitor + +```text +// FIXIT: https://xn--18-6kcdusowgbt1a4b.xn--p1ai/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80-%d0%bf%d0%be%d1%80%d1%82%d0%b0-%d0%b0%d1%80%d0%b4%d1%83%d0%b8%d0%bd%d0%be/ +``` + +## Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹: +1. [Π£Ρ€ΠΎΠΊΠΈ ΠΏΠΎ Arduino](https://xn--18-6kcdusowgbt1a4b.xn--p1ai/%d0%bf%d0%b8%d0%bd%d1%8b-%d0%b0%d1%80%d0%b4%d1%83%d0%b8%d0%bd%d0%be/) | Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ°18.Ρ€Ρ„