ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΊΠ΅ΡΡ Π΄Π»Ρ Arduino Π² ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (Arduino IDE), Π²Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ main() β ΡΠΎΠΉ ΡΠ°ΠΌΠΎΠΉ ΡΠΎΡΠΊΠΈ Π²Ρ
ΠΎΠ΄Π°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° C/C++. ΠΡΠΎ Π½Π΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΡΡΡ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΊΡΡΡΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠΏΡΡΡΠ°Π»ΠΈ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Π° main() Π² Arduino CC (ΡΠ΄ΡΠΎ Arduino, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π½Π° C++), ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΠ΅ΡΡΠ΅ΠΉ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ:
- π ΠΠ΄Π΅ ΡΠΊΡΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ
main()Π² ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΠΠ Arduino ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΠ²ΡΠ·Π°Π½Π° Ρ Π²Π°ΡΠΈΠΌΠΈ ΡΠΊΠ΅ΡΡΠ°ΠΌΠΈ. - π οΈ Π‘ΡΡΡΠΊΡΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π°
setup()ΠΈloop(). - β‘ Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΈΠ·-Π·Π° Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Arduino CC.
- π‘ ΠΠ°ΠΊ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ
main()Π΄Π»Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ Π·Π°Π΄Π°Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ FreeRTOS ΠΈΠ»ΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΌΠΈ bootloaders).
ΠΡΠ»ΠΈ Π²Ρ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Π²Π°Π»ΠΈΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ Π²Π°Ρ ΡΠΊΠ΅ΡΡ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ, ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ β ΠΎΡΠ²Π΅Ρ ΡΠ°ΡΡΠΎ ΠΊΡΠΎΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ Arduino IDE ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ΄ Π·Π° ΠΊΡΠ»ΠΈΡΠ°ΠΌΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΊΠΎΠΏΠ°ΡΡ Π³Π»ΡΠ±ΠΆΠ΅.
1. ΠΠ΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ main() Π² Arduino IDE?
ΠΡΠΊΡΠΎΠΉΡΠ΅ Π»ΡΠ±ΠΎΠΉ ΡΠΊΠ΅ΡΡ Π² Arduino IDE β Π²Ρ Π½Π΅ Π½Π°ΠΉΠ΄ΡΡΠ΅ ΡΠ°ΠΌ main(). ΠΠΎ ΡΡΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΅Ρ Π½Π΅Ρ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΎΠ½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΡΠΎΡΠ½ΠΈΠΊ ΡΡΠΎΠΉ "ΠΌΠ°Π³ΠΈΠΈ" β ΡΠ°ΠΉΠ» main.cpp, ΠΊΠΎΡΠΎΡΡΠΉ Π»Π΅ΠΆΠΈΡ Π² ΡΠ΄ΡΠ΅ Arduino (Arduino Core) ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ Π½Π΅ΡΠ²Π½ΠΎ.
ΠΠ»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ AVR (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Arduino Uno ΠΈΠ»ΠΈ Nano) ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΠΏΡΡΠΈ:
hardware/arduino/avr/cores/arduino/main.cpp
Π Π΄Π»Ρ ARM-ΠΏΠ»Π°Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Arduino Due ΠΈΠ»ΠΈ Teensy) β Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
ΠΏΠ°ΠΏΠΊΠ°Ρ
ΡΠ΄ΡΠ°. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ PlatformIO, ΠΏΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ, Π½ΠΎ ΡΡΡΡ ΠΎΡΡΠ°ΡΡΡΡ ΡΠΎΠΉ ΠΆΠ΅: main() ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π·Π° Π²Π°Ρ.
ΠΠΎΡ ΡΠΏΡΠΎΡΡΠ½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ main() Π² Arduino CC:
int main(void) {
init(); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ (ΡΠ°ΠΉΠΌΠ΅ΡΡ, ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ, UART ΠΈ Ρ.Π΄.)
initVariant(); // ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ
Π΄Π»Ρ ΠΏΠ»Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
setup(); // ΠΡΠ·ΠΎΠ² Π²Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ setup()
while (1) {
loop(); // ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π²Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ loop()
if (serialEventRun) serialEventRun(); // ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ Serial (Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ)
}
return 0; // ΠΡΠ° ΡΡΡΠΎΠΊΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ
}
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΡΠ΅ main.cpp Π²ΡΡΡΠ½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ³ΠΎ bootloader), ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ. ΠΠ΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°ΠΌ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ.
2. Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π° setup()?
Π€ΡΠ½ΠΊΡΠΈΡ init(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π² main(), ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°. Π Π½Π΅Ρ Π²Ρ
ΠΎΠ΄ΠΈΡ:
- π ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΡΠΎΠ²ΠΎΠ³ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° (Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ°ΡΡΠΎΡΡ CPU).
- π ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΠΎΠ² Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ±ΡΠΎΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ GPIO).
- β±οΈ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ² Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΠΎΠ΄Π΅
millis()ΠΈdelay(). - π‘ ΠΠΊΡΠΈΠ²Π°ΡΠΈΡ UART (Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Serial).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ATmega328P (ΡΠΈΠΏ Π½Π° Arduino Uno) init() Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
| ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | Π Π΅Π³ΠΈΡΡΡΡ/Π€ΡΠ½ΠΊΡΠΈΠΈ |
|---|---|---|
| ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ°ΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ | Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ CPU Π½Π° 16 ΠΠΡ (Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ²Π°ΡΡ) | CLKPR, OSCCAL |
| ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΅ΠΊΠ° | Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π² RAM | SPH, SPL |
| Π‘Π±ΡΠΎΡ GPIO | ΠΡΠ΅ ΠΏΠΎΡΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ INPUT Π±Π΅Π· ΠΏΠΎΠ΄ΡΡΠΆΠΊΠΈ | DDRx, PORTx |
| ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Watchdog Timer | ΠΡΠΊΠ»ΡΡΠ°Π΅Ρ ΡΡΠΎΡΠΎΠΆΠ΅Π²ΠΎΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ (Π΅ΡΠ»ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½) | MCUSR, WDTCR |
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΡΠ½Π΅ΡΠ³ΠΈΠΈ Π² Π±Π°ΡΠ°ΡΠ΅ΠΉΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ), ΠΌΠΎΠΆΠ½ΠΎ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ
main.cppΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· PlatformIO. - ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ weak-Π°ΡΡΠΈΠ±ΡΡΡ Π² C++ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
- ΠΡΠΊΠ»ΡΡΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠ»Π°Π³ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° (Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π»Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ²).
- ΠΠΈΡΡ ΡΠΊΠ΅ΡΡΠΈ Π² Arduino IDE
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ PlatformIO
- Π Π°Π±ΠΎΡΠ°Ρ Ρ AVR Studio + GCC
- Π‘ΠΎΠ±ΠΈΡΠ°Ρ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ ΡΠ΅ΡΠ΅Π· Makefile
- ΠΡΡΠ³ΠΎΠ΅
3. ΠΠ°ΠΊ loop() Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ main()?
Π€ΡΠ½ΠΊΡΠΈΡ loop() β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» Π² Π²Π°ΡΠ΅ΠΌ ΡΠΊΠ΅ΡΡΠ΅. ΠΠ½Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π° Π² main() ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π΅Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ
Π²Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Π΅ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
- π ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ (Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ).
- π₯ ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π±ΡΡΠ΅ΡΠ° Serial (Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
serialEventRun()). - β‘ ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ½ΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, WiFi ΠΈΠ»ΠΈ BLE).
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π² loop() (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· delay()) ΠΌΠΎΠ³ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²Π°Ρ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ millis() Π΄Π»Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
unsigned long previousMillis = 0;
const long interval = 1000; // ΠΠ½ΡΠ΅ΡΠ²Π°Π» Π² 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// ΠΠ°Ρ ΠΊΠΎΠ΄ Π·Π΄Π΅ΡΡ
}
// ΠΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±Π΅Π· Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ
}
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Π°Ρ ΡΠΊΠ΅ΡΡ Π·Π°Π²ΠΈΡΠ°Π΅Ρ Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΡΡ ΠΏΡΠΈΡΠΈΠ½, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π»ΠΈloop()Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π·Π°Π΄Π°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° SoftwareSerial ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠΎΡΠ° Π±ΡΡΠ΅ΡΠ°, ΠΈ Π΄ΠΎΠ»Π³ΠΈΠ΅delay()ΠΌΠΎΠ³ΡΡ Π½Π°ΡΡΡΠΈΡΡ Π΅Ρ ΡΠ°Π±ΠΎΡΡ.
Π§ΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° loop(), Π²ΡΠ½ΠΎΡΠΈΡΠ΅ ΡΠ΅Π΄ΠΊΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π² ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ RTOS-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Arduino-FreeRTOS-Library.
4. ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ main() Π΄Π»Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ Π·Π°Π΄Π°Ρ
ΠΠ½ΠΎΠ³Π΄Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ main() Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ:
- π€ Π Π°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Ρ FreeRTOS.
- π ΠΠΈΡΠ΅ΡΠ΅ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ bootloader.
- β‘ ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΡΠΎΠ½ΠΎΠΌ).
Π ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ main(). ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Arduino Uno Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ FreeRTOS:
#include
void setup() {
// ΠΠ°Ρ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
}
void loop() {
// ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π½Π΅Ρ Π·Π°Π΄Π°ΡΠ΅ΠΉ FreeRTOS
}
int main(void) {
init();
initVariant();
setup();
// Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π·Π°Π΄Π°ΡΡ Π΄Π»Ρ loop()
xTaskCreate(
loopTask, // Π€ΡΠ½ΠΊΡΠΈΡ-Π·Π°Π΄Π°ΡΠ°
"Loop", // ΠΠΌΡ Π·Π°Π΄Π°ΡΠΈ
128, // Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ°
NULL, // ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
1, // ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ
NULL // Π₯Π΅Π½Π΄Π» Π·Π°Π΄Π°ΡΠΈ
);
// ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ FreeRTOS
vTaskStartScheduler();
return 0;
}
// ΠΠ±ΡΡΡΠΊΠ° Π΄Π»Ρ loop()
void loopTask(void *pvParameters) {
while (1) {
loop();
vTaskDelay(1); // ΠΠ°ΡΠΌ Π²ΡΠ΅ΠΌΡ Π΄ΡΡΠ³ΠΈΠΌ Π·Π°Π΄Π°ΡΠ°ΠΌ
}
}
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅Ρ:
- ΠΠ»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°.
- Π£ΡΠ΅ΡΠ° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ
main(). - Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Timer1 ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²Π°ΡΡ Ρ FreeRTOS).
βοΈ ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ main()
5. Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ
ΠΠ΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ main() Π² Arduino CC ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠ΄Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
| ΠΡΠΈΠ±ΠΊΠ° | ΠΡΠΈΡΠΈΠ½Π° | Π Π΅ΡΠ΅Π½ΠΈΠ΅ |
|---|---|---|
| Π‘ΠΊΠ΅ΡΡ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ | ΠΠΎΠ½ΡΠ»ΠΈΠΊΡ Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠΉ main() ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ | ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ init() ΠΈ initVariant() Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ |
Serial Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ main() | ΠΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ UART ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π²Π΅ΠΊΡΠΎΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ | ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ serialEventRun() Π²ΡΡΡΠ½ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ UCSR0B |
ΠΠ°Π²ΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ delay() | loop() Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, WiFi) | ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ delay() Π½Π° millis() ΠΈΠ»ΠΈ RTOS-Π·Π°Π΄Π°ΡΠΈ |
| ΠΡΠΈΠ±ΠΊΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ | ΠΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ main() (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ) | ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ #ifndef ΠΈΠ»ΠΈ ΡΠ»Π°Π±ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ (__attribute__((weak))) |
ΠΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ
ΠΊΠΎΠ²Π°ΡΠ½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ β Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅ Π² ΡΠΊΠ΅ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ init(), ΠΎΠ½Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ init() ΠΈΠ· ΡΠ΄ΡΠ° Arduino, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°. ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ!
Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ·ΠΎΠ² setup() ΠΈΠ· main()?
ΠΠ΅Π· Π²ΡΠ·ΠΎΠ²Π° setup() Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Serial.begin(9600) Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ). ΠΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡΡ, Π½ΠΎ Π²Π°Ρ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΡΠ°ΡΡΡΠ΅Ρ.
6. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° Ρ ΡΡΡΡΠΎΠΌ ΡΡΡΡΠΊΡΡΡΡ main()
ΠΠ½Π°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Π° main(), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠ΅ΡΡΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠΎΠ²Π΅ΡΠΎΠ²:
- β‘ ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΠ΅ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Π²
setup(): - π ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΊΡΠΈΡΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ:
- ποΈ ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΠΉΡΠ΅ RAM ΠΏΠΎΡΠ»Π΅
setup():
ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°Π»ΠΈΠ±ΡΠΎΠ²ΠΊΠ° Π΄Π°ΡΡΠΈΠΊΠ°), Π²ΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ ΠΈΡ
Π² setup(), Π° Π½Π΅ Π² loop().
ΠΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π¨ΠΠ-ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΎΠΏΡΠΈΠ²ΠΎΠ΄Π°), Π²ΡΠ½Π΅ΡΠΈΡΠ΅ Π΅Ρ Π² ISR (Interrupt Service Routine).
ΠΠ±ΡΡΠ²Π»ΡΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΊΠ°ΠΊ static ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ PROGMEM Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π²ΠΎ Flash.
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ NeoPixel (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Adafruit_NeoPixel):
#include
#define LED_PIN 6
#define LED_COUNT 60
// ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ Π² PROGMEM, ΡΡΠΎΠ±Ρ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ RAM
const uint32_t colors[] PROGMEM = {0xFF0000, 0x00FF00, 0x0000FF};
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.show(); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·
}
void loop() {
static uint8_t colorIndex = 0;
for (int i = 0; i < LED_COUNT; i++) {
// Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· PROGMEM
strip.setPixelColor(i, pgm_read_dword(&colors[colorIndex % 3]));
}
strip.show();
delay(500);
colorIndex++;
}
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,malloc()) Π²loop(), ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΠ΅ Π΅Ρ ΡΠ΅ΡΠ΅Π·free(). Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ΅ΡΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΊΡΠ°Ρ Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ.
Π€ΡΠ½ΠΊΡΠΈΡ main() Π² Arduino β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΡΡΠΊΠ° Π΄Π»Ρ setup() ΠΈ loop(). ΠΠ½Π° ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ ΠΈ ΡΠΎΠ½ΠΎΠ²ΡΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ. ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈ Π½Π°Π΄ΡΠΆΠ½ΡΠΉ ΠΊΠΎΠ΄.
7. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ: ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π±Π΅Π· Arduino IDE
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ main(), ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Arduino IDE:
- π οΈ PlatformIO:
- π§ AVR-GCC + Makefile:
- π€ Arduino-CLI:
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π³ΠΈΠ±ΠΊΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ main.cpp ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, GDB).
ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊΠ° ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°.
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΎΡ Arduino Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΡΠΊΠ΅ΡΡΠ΅ΠΉ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ.
ΠΡΠΈΠΌΠ΅Ρ Makefile Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠΊΠ΅ΡΡΠ° Π±Π΅Π· Arduino IDE:
MCU = atmega328p
F_CPU = 16000000UL
CC = avr-gcc
OBJCOPY = avr-objcopy
AVRDUDE = avrdude
SRC = main.c
OBJ = $(SRC:.c=.o)
TARGET = firmware.hex
all: $(TARGET)
%.o: %.c
$(CC) -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -Wall -c -o $@ $<
$(TARGET): $(OBJ)
$(CC) -mmcu=$(MCU) -Os -Wl,--gc-sections -o firmware.elf $(OBJ)
$(OBJCOPY) -O ihex -R .eeprom firmware.elf $(TARGET)
upload:
$(AVRDUDE) -c arduino -p $(MCU) -P /dev/ttyUSB0 -b 57600 -U flash:w:$(TARGET)
clean:
rm -f $(OBJ) firmware.elf $(TARGET)
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π°ΡΡ:
- β ΠΠ΅Π½ΡΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ (Π½Π΅Ρ Π»ΠΈΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈΠ· Arduino Core).
- β ΠΡΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ (Π½Π΅Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΊΠΎΠ΄Π° Π² IDE).
- β ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Atmel ICE).
FAQ: Π§Π°ΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΎ main() Π² Arduino
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²ΡΠ·Π²Π°ΡΡ setup() ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ· loop()?
Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ Π΄Π°, Π½ΠΎ ΡΡΠΎ ΠΏΠ»ΠΎΡ
Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°. Π€ΡΠ½ΠΊΡΠΈΡ setup() ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈ Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ:
- π ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Serial), ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΠ±ΠΎΠΈ.
- ποΈ Π£ΡΠ΅ΡΠΊΠ°ΠΌ ΠΏΠ°ΠΌΡΡΠΈ, Π΅ΡΠ»ΠΈ Π²
setup()Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ ΡΠ΅ΡΡΡΡΡ Π±Π΅Π· ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ. - β‘ ΠΠ΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ².
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ±ΡΠΎΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π»ΡΡΡΠ΅ Π²ΡΠ½Π΅ΡΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π²ΡΠ·ΡΠ²Π°ΠΉΡΠ΅ Π΅Ρ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΠΎΡΠ΅ΠΌΡ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Arduino IDE, Π½ΠΎ Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² AVR Studio?
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Arduino-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, digitalWrite() ΠΈΠ»ΠΈ millis()), ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ AVR-GCC. Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΠΊΠΎΠ΄:
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈΠ· Arduino Core (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
#include "Arduino.h"). - ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
millis()ΡΠ΅ΡΠ΅Π· Timer1). - ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Arduino-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
ΠΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ PlatformIO, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΡΠ°ΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠ°ΠΊ ΠΎΡΠ»Π°Π΄ΠΈΡΡ ΠΊΠΎΠ΄, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ main()?
ΠΡΠ»Π°Π΄ΠΊΠ° ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠΉ main() ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ΅ΡΡΠ°. ΠΠΎΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ:
- π ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Serial.debug: ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠΎΡΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠ»Π΅
init()). - π ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π²Π΅ΠΊΡΠΎΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ: Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°Π»ΠΈ ΠΊΡΠΈΡΠΈΡΠ½ΡΠ΅ ISR (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
TIMER0_OVF_vect, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρmillis()). - π‘ ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ Π½Π° Π½ΠΎΠΆΠΊΠ°Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, SCK ΠΈΠ»ΠΈ TX).
- π₯οΈ ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ GDB + AVR Dragon: ΠΠ»Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°.
ΠΡΠ»ΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΡΠΎΡΠΈΡΡ bootloader Π·Π°Π½ΠΎΠ²ΠΎ ΡΠ΅ΡΠ΅Π· AVRDUDE:
avrdude -c usbtiny -p atmega328p -U flash:w:optiboot_atmega328.hex
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Arduino Core ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ?
ΠΠ°, Π½ΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π³Π»ΡΠ±ΠΎΠΊΠΈΡ Π·Π½Π°Π½ΠΈΠΉ AVR/ARM-Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΠ°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ:
- ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ USART ΠΈΠ»ΠΈ Timer).
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠΎΠ΄Π΅
digitalWrite()ΡΠ΅ΡΠ΅Π· ΠΏΡΡΠΌΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,PORTB |= (1 << PB5)). - ΠΠ°ΡΡΡΠΎΠΈΡΡ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ main() Π΄Π»Ρ ATmega328P Π±Π΅Π· Arduino Core:
#include
#include
int main(void) {
DDRB |= (1 << PB5); // ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° 13 ΠΏΠΈΠ½Π° (LED) Π½Π° Π²ΡΠ²ΠΎΠ΄
while (1) {
PORTB ^= (1 << PB5); // ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ LED
_delay_ms(500);
}
return 0;
}
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π½ΠΎ Π»ΠΈΡΠ°Π΅Ρ Π²Π°Ρ ΡΠ΄ΠΎΠ±ΡΡΠ² Arduino-ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΠΈ ΠΈ Ρ.Π΄.).
ΠΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ Arduino Core ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΌΠΎΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅?
ΠΠ΅ΡΡΠΈΡ ΡΠ΄ΡΠ° ΡΠΊΠ°Π·Π°Π½Π° Π² ΡΠ°ΠΉΠ»Π΅:
hardware/arduino/avr/platform.txt
ΠΡΠΈΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π²ΡΠΎΠ΄Π΅:
version=1.8.5
runtime.tools.avr-gcc.version=7.3.0-atmel3.6.1-arduino7
Π’Π°ΠΊΠΆΠ΅ Π²Π΅ΡΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² Arduino IDE:
- ΠΡΠΊΡΠΎΠΉΡΠ΅
Π€Π°ΠΉΠ» β ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ. - ΠΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡ
ΠΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. - Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΡΠΊΠ΅ΡΡ ΠΈ Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π² Π»ΠΎΠ³Π΅ ΡΡΡΠΎΠΊΡ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ Arduino Core.
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ PlatformIO, Π²Π΅ΡΡΠΈΡ ΡΠ΄ΡΠ° ΡΠΊΠ°Π·Π°Π½Π° Π² platformio.ini Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ platform.