Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 22

Автор Монк Π‘Π°ΠΉΠΌΠΎΠ½

НиТС приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объявлСния статичСского массива, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ дСлаСтся Π² скСтчах:

// sketch_06_04_static

int array[100];

void setup()

{

Β Β array[0] = 1;

Β Β array[50] = 2;

Β Β Serial.begin(9600);

Β Β Serial.println(array[50]);

}

void loop()

{

}

ОбъСм памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ массивом, извСстСн ΡƒΠΆΠ΅ Π½Π° этапС компиляции скСтча, поэтому компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ объСм памяти. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅, Ρ‚Π°ΠΊΠΆΠ΅ создаСт массив Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½ΠΎ выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π½Π΅Π³ΠΎ Π²ΠΎ врСмя выполнСния ΠΈΠ· ΠΏΡƒΠ»Π° доступной памяти. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ вСрсии Arduino IDE Π½ΠΈΠΆΠ΅ 1.0.4 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ malloc.

// sketch_06_03_dynamic

int *array;

void setup()

{

Β Β array = (int *)malloc(sizeof(int) * 100);

Β Β array[0] = 1;

Β Β array[50] = 2;

Β Β Serial.begin(9600);

Β Β Serial.println(array[50]);

}

void loop()

{

}

Π’ Π½Π°Ρ‡Π°Π»Π΅ скСтча опрСдСляСтся пСрСмСнная int *array. Π‘ΠΈΠΌΠ²ΠΎΠ» * сообщаСт, Ρ‡Ρ‚ΠΎ это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС массив Ρ†Π΅Π»Ρ‹Ρ… чисСл), Π° Π½Π΅ простоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ОбъСм памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ массивом, нСизвСстСн, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setup:

Β Β array = (int *)malloc(sizeof(int) * 100);

Команда malloc (memory allocate β€” Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ) выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² области ΠžΠ—Π£, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΡƒΡ‡Π΅ΠΉ (heap). Π’ качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΅ΠΉ пСрСдаСтся объСм памяти Π² Π±Π°ΠΉΡ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ массив Ρ…Ρ€Π°Π½ΠΈΡ‚ 100 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° int, трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ расчСты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² Π±Π°ΠΉΡ‚Π°Ρ…. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ просто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc число 200 Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ извСстно, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π±Π°ΠΉΡ‚Π° памяти, Π½ΠΎ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sizeof Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ числа Π² любом случаС.

ПослС выдСлСния памяти массивом ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π½Π΅Π³ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° статичСски. ДинамичСскоС распрСдСлСниС памяти позволяСт ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ принятиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ массива Π΄ΠΎ фактичСского запуска скСтча, ΠΈ это СдинствСнноС прСимущСство Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

Однако, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ΅ΠΌ динамичСского распрСдСлСния памяти, Π»Π΅Π³ΠΊΠΎ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся, Π½ΠΎ Π½Π΅ освобоТдаСтся, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ скСтч ΠΌΠΎΠΆΠ΅Ρ‚ быстро ΠΈΡΡ‡Π΅Ρ€ΠΏΠ°Ρ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽΡΡ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π˜ΡΡ‡Π΅Ρ€ΠΏΠ°Π½ΠΈΠ΅ памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ зависаниС Arduino. Но Ссли вся ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся статичСски, Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ происходит.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΌΠ½Π΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ΅ΠΌΡƒ Π½Π΅ ΠΎΠ΄Π½Ρƒ ΡΠΎΡ‚Π½ΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Arduino, слоТно Π½Π°ΠΉΡ‚ΠΈ Π²Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ, ΠΎΠΏΡ€Π°Π²Π΄Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΈΠ΅ΠΌ динамичСского выдСлСния памяти Π² Arduino.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ (тСкста) Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² скСтчах для Arduino, Ρ‡Π΅ΠΌ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Π’ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… строки Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для взаимодСйствий с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΈΠ»ΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π΄Π΅ тСкст являСтся СстСствСнным срСдством ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Arduino Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² тСкстовом прСдставлСнии Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… Serial.println для Π½ΡƒΠΆΠ΄ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

Π’ Arduino ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π° использования строк: старый ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” массивы элСмСнтов Ρ‚ΠΈΠΏΠ° char ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ String Object.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ элСмСнтов Ρ‚ΠΈΠΏΠ° char

Когда Π² скСтчС опрСдСляСтся строковая константа, такая ΠΊΠ°ΠΊ

char message[] = "Hello World";

создаСтся статичСский массив элСмСнтов Ρ‚ΠΈΠΏΠ° char, содСрТащий 12 символов. ИмСнно 12, Π° Π½Π΅ 11, ΠΏΠΎ числу Π±ΡƒΠΊΠ² Π² строкС Β«Hello WorldΒ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† добавляСтся Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ (\0), ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ† строки. Π’Π°ΠΊΠΎΠ΅ соглашСниС для строк символов, принятоС Π² языкС C, позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массивы символов большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ Π²Π½Π°Ρ‡Π°Π»Π΅ (рис. 6.4). КаТдая Π±ΡƒΠΊΠ²Π°, Ρ†ΠΈΡ„Ρ€Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ символ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ASCII.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами - _47.jpg

Рис. 6.4. Массив элСмСнтов Ρ‚ΠΈΠΏΠ° char Π² стилС языка C с Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΌ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΎΠΉ синтаксис записи строковых констант:

char *message = "Hello World";

Π­Ρ‚ΠΎΡ‚ синтаксис дСйствуСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½ΠΎ опрСдСляСт message ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° символ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² массивС).

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ строк нСсколькими ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ print

Часто строки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти сообщСниС Π½Π° ТидкокристалличСский дисплСй ΠΈΠ»ΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Serial.println. МногиС ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² основном трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ объСдинСния строк ΠΈ прСобразования чисСл Π² строки. НапримСр, рассмотрим ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ β€” ΠΊΠ°ΠΊ Π½Π° ТидкокристалличСском дисплСС ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ сообщСниС Β«Temp: 32 CΒ». Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для этого Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ число 32 со строкой "Temp: " ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ† строку " C". И Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, программисты с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ использования языка Java ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° C ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

String text = "Temp: " + tempC + " C";

Π£Π²Ρ‹, Π² C этот ΠΏΡ€ΠΈΠ΅ΠΌ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС сообщСниС ΠΌΠΎΠΆΠ½ΠΎ вывСсти нСсколькими инструкциями print, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅:

lcd.print("Temp: "); lcd.print(tempC); lcd.print(" C");

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ закулисного копирования Π΄Π°Π½Π½Ρ‹Ρ… Π² процСссС ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ (объСдинСния) строк, ΠΊΠ°ΠΊ происходит Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… соврСмСнных языках.

Аналогичный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… инструкций Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° ΠΈ инструкциями Serial.print. Π’ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаях послСднСй Π² строкС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° println, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π°Ρ Π² ΠΊΠΎΠ½Π΅Ρ† символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ sprintf

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° строковых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для языка C (Π½Π΅ ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Arduino String Object, которая обсуТдаСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅) Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sprintf, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массивов символов. Она вставляСт значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² строку шаблона, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

char line1[17];

int tempC = 30;

sprint(line1, "Temp: %d C", tempC);

Массив символов line1 β€” это строковый Π±ΡƒΡ„Π΅Ρ€, содСрТащий Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ тСкст. Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ 17 символов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ Π² ΠΊΠΎΠ½Ρ†Π΅. Имя line1 я Π²Ρ‹Π±Ρ€Π°Π» ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ строки для ТидкокристалличСского дисплСя с двумя строками ΠΏΠΎ 16 символов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ sprintf пСрСдаСтся массив символов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ записан Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” строка Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, содСрТащая смСсь простого тСкста, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Temp:, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ форматирования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ %d. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС %d ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «дСсятичноС Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌΒ». ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ подставлСны Π² строку Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² порядкС ΠΈΡ… слСдования Π½Π° мСсто ΠΊΠΎΠΌΠ°Π½Π΄ форматирования.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ строку Π½Π° ТидкокристалличСском дисплСС вывСсти врСмя, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ часов, ΠΌΠΈΠ½ΡƒΡ‚ ΠΈ сСкунд, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅:

char line2[17];

int h = 12;

int m = 30;

int s = 5;

sprintf(line2, "Time: %2d:%02d:%02d", h, m, s);

Если ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ вывСсти строку line2 Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° ΠΈΠ»ΠΈ Π½Π° экран ТидкокристалличСского дисплСя, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ тСкст

Time: 12:30:05

Команда sprintf Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подставила числа Π² Π½ΡƒΠΆΠ½Ρ‹Π΅ мСста, Π½ΠΎ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ ноль ΠΏΠ΅Ρ€Π΅Π΄ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 5. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ символами : находятся ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ форматирования Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Часам соотвСтствуСт ΠΊΠΎΠΌΠ°Π½Π΄Π° %2d, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π²ΡƒΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ дСсятичноС число. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ форматирования для ΠΌΠΈΠ½ΡƒΡ‚ ΠΈ сСкунд Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ (%02d). Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ выводят Π΄Π²ΡƒΠ·Π½Π°Ρ‡Π½Ρ‹Π΅ дСсятичныС числа, Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ ноль, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.