Základy programovania: Rozdiel medzi revíziami

Zo stránky 3D liga wiki
Prejsť na navigáciu Prejsť na vyhľadávanie
Sebastian (diskusia | príspevky)
Bez shrnutí editace
Sebastian (diskusia | príspevky)
Bez shrnutí editace
 
(Jedna medziľahlá úprava od rovnakého používateľa nie je zobrazená.)
Riadok 1: Riadok 1:
== Základy programovania ==
Počas tutoriálu budeme používať niekoľko základných typov premenných a konceptov. Tu je rýchly prehľad:
=== Premenné ===
Premenná je "škatuľka" v pamäti mikrokontroléra, do ktorej si uložíme nejakú hodnotu. Každá premenná má '''typ''' – ten určuje aké hodnoty môže uchovávať.
{| class="wikitable"
|-
! Typ !! Čo uchováva !! Rozsah !! Príklad
|-
| <code>int</code> || Celé číslo || -32 768 až 32 767 || <code>int frekvencia = 1000;</code>
|-
| <code>long</code> || Veľké celé číslo || -2 147 483 648 až 2 147 483 647 || <code>long trvanie = 50000;</code>
|-
| <code>float</code> || Desatinné číslo || ±3.4 × 10³⁸ || <code>float vzdialenost = 23.5;</code>
|-
| <code>bool</code> || Pravda / nepravda || <code>true</code> alebo <code>false</code> || <code>bool aktivny = false;</code>
|-
| <code>String</code> || Text || ľubovoľný text || <code>String text = "Ahoj";</code>
|}
=== Operátory ===
=== Operátory ===


Riadok 43: Riadok 20:
|}
|}


=== Štruktúra programu ===
==== Logické operátory ====


Každý Arduino program má dve povinné funkcie:
Používame ich na kombináciu viacerých podmienok:


{| class="wikitable"
{| class="wikitable"
|-
|-
! Funkcia !! Kedy sa spustí !! Na čo slúži
! Operátor !! Význam !! Príklad
|-
|-
| <code>setup()</code> || Raz pri zapnutí || Nastavenie pinov, spustenie sériovej komunikácie
| <code>&&</code> || A zároveň (obe podmienky musia platiť) || <code>if (x > 10 && x < 30)</code>
|-
|-
| <code>loop()</code> || Dookola stále znova || Hlavná logika programu
| <code><nowiki>||</nowiki></code> || Alebo (aspoň jedna podmienka musí platiť) || <code>if (x < 0 <nowiki>||</nowiki> x > 100)</code>
|}
|}
=== Funkcie ===


Funkcia je pomenovaný blok kódu, ktorý môžeme zavolať kedykoľvek potrebujeme. Namiesto toho aby sme ten istý kód písali viackrát, napíšeme ho raz do funkcie a potom ju len voláme.
<syntaxhighlight lang="C">
float vzdialenost = getDistance();
bool aktívny = true;


<syntaxhighlight lang="C">
// Obe podmienky musia platiť
// Definícia funkcie
if (aktívny && vzdialenost < 10) {
void playNote(int note) {
   // blízko A zapnuté
   // kód funkcie
}
}


// Volanie funkcie
// Stačí jedna podmienka
playNote(1000);
if (vzdialenost < 0 || vzdialenost > 200) {
  // neplatná hodnota
}
</syntaxhighlight>
</syntaxhighlight>
==== Skrátený zápis ====
Namiesto <code>x = x + 5</code> môžeme písať kratšie:


{| class="wikitable"
{| class="wikitable"
|-
|-
! Časť !! Vysvetlenie !! Príklad
! Operátor !! Rovnaké ako !! Príklad
|-
|-
| '''Návratový typ''' || Čo funkcia vracia. <code>void</code> = nič nevracia || <code>void</code>, <code>int</code>, <code>float</code>, <code>long</code>
| <code>x += 5</code> || <code>x = x + 5</code> || <code>result += (1 << i);</code>
|-
|-
| '''Názov''' || Ľubovoľné meno funkcie || <code>playNote</code>, <code>setColor</code>, <code>stoj</code>
| <code>x -= 5</code> || <code>x = x - 5</code> || <code>score -= penalty;</code>
|-
|-
| '''Parametre''' || Hodnoty ktoré funkcia dostane zvonku || <code>int note</code>, <code>int r, int g, int b</code>
| <code>x *= 2</code> || <code>x = x * 2</code> || <code>speed *= 2;</code>
|-
|-
| '''Telo''' || Kód ktorý sa vykoná pri zavolaní || všetko medzi <code>{</code> a <code>}</code>
| <code>x /= 2</code> || <code>x = x / 2</code> || <code>halfPeriod /= 2;</code>
|}
|}


Funkcie môžu aj '''vracať hodnotu''' pomocou <code>return</code>:
==== Ternárny operátor ====


<syntaxhighlight lang="C">
Skrátený zápis podmienky – hodí sa keď chceme podľa podmienky priradiť hodnotu:
// Funkcia ktorá vráti vzdialenosť v cm
float getDistance() {
  long trvanie = measurePulse();
  return (trvanie * 0.0343) / 2.0;  // vráti vypočítanú hodnotu
}


// Použitie
{| class="wikitable"
float dist = getDistance();  // dist bude obsahovať výsledok
|-
</syntaxhighlight>
! Zápis !! Vysvetlenie
 
|-
Funkcie môžu mať aj '''viac parametrov''':
| <code>podmienka ? hodnota_ak_true : hodnota_ak_false</code> || Ak je podmienka splnená vráti prvú hodnotu, inak druhú
|}


<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
// Funkcia s troma parametrami
// Dlhý zápis
void setColor(int r, int g, int b) {
String vysledok;
   digitalWrite(PIN_R, r);
if (val > THRESHOLD) {
  digitalWrite(PIN_G, g);
   vysledok = "1";
   digitalWrite(PIN_B, b);
} else {
   vysledok = "0";
}
}


// Volanie hodnoty sa priradia v rovnakom poradí
// Skrátený zápis rovnaký výsledok
setColor(HIGH, LOW, HIGH); // r=HIGH, g=LOW, b=HIGH → fialová
String vysledok = val > THRESHOLD ? "1" : "0";
</syntaxhighlight>
</syntaxhighlight>


=== Podmienky ===
==== Bitové operátory ====
 
Pracujú priamo s jednotlivými bitmi čísla. Každé celé číslo je v pamäti uložené ako séria núl a jednotiek – napríklad číslo 6 je v binárnom zápise <code>0110</code>.


{| class="wikitable"
{| class="wikitable"
|-
|-
! Štruktúra !! Použitie !! Príklad
! Operátor !! Význam !! Príklad
|-
|-
| <code>if</code> || Vykoná kód ak je podmienka splnená || <code>if (x > 10) { ... }</code>
| <code>1 << n</code> || Posuň bit o n miest doľava (= 2ⁿ) || <code>1 << 3</code> = 8
|-
|-
| <code>if / else</code> || Vykoná jeden z dvoch blokov || <code>if (x > 10) { ... } else { ... }</code>
| <code>&</code> || Bitový AND – bit je 1 iba ak sú oba bity 1 || <code>5 & 3</code> = 1
|-
|-
| <code>if / else if / else</code> || Vykoná jeden z viacerých blokov || <code>if (x > 30) { ... } else if (x > 10) { ... } else { ... }</code>
| <code><nowiki>|</nowiki></code> || Bitový OR – bit je 1 ak aspoň jeden bit je 1 || <code>5 <nowiki>|</nowiki> 3</code> = 7
|}
|}


<syntaxhighlight lang="C">
float vzdialenost = getDistance();


if (vzdialenost > 30) {
==== Logická tabuľka AND ====
  // ďaleko
 
} else if (vzdialenost > 10) {
{| class="wikitable"
  // stredne
|-
} else {
! A !! B !! A & B
  // blízko
|-
}
| 0 || 0 || 0
</syntaxhighlight>
|-
| 0 || 1 || 0
|-
| 1 || 0 || 0
|-
| 1 || 1 || 1
|}


=== Cykly ===
==== Logická tabuľka OR ====


{| class="wikitable"
{| class="wikitable"
|-
|-
! Štruktúra !! Použitie !! Príklad
! A !! B !! A <nowiki>|</nowiki> B
|-
| 0 || 0 || 0
|-
|-
| <code>for</code> || Opakuj N-krát || <code>for (int i = 0; i < 10; i++)</code>
| 0 || 1 || 1
|-
|-
| <code>while</code> || Opakuj kým je podmienka splnená || <code>while (millis() - start < 1000)</code>
| 1 || 0 || 1
|-
| 1 || 1 || 1
|}
|}


<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
// for prejdi pole frekvencií
// Bitový posun mocniny dvojky
for (int i = 0; i < pocetFrekvencii; i++) {
// 1 << 0 = 1  (0b0001)
  playNote(frekvencie[i]);
// 1 << 1 = 2  (0b0010)
}
// 1 << 2 = 4  (0b0100)
// 1 << 3 = 8  (0b1000)
 
// Príklad AND – skontroluj či je číslo párne (posledný bit = 0)
int x = 6;  // 0b0110
int y = 1; // 0b0001
int result = x & y;  // 0b0110 & 0b0001 = 0b0000 = 0 → párne číslo
 
// Príklad OR – nastav konkrétny bit
int a = 4;  // 0b0100
int b = 2;  // 0b0010
int c = a | b;  // 0b0100 | 0b0010 = 0b0110 = 6


// while hraj tón po dobu 1 sekundy
// Príklad posunu vypočítaj mocninu dvojky
long start = millis();
int n = 3;
while (millis() - start < 1000) {
int mocnina = 1 << n; // 1 << 3 = 8 = 2³
  playNote(1000);
}
</syntaxhighlight>
</syntaxhighlight>

Aktuálna revízia z 18:12, 3. máj 2026

Operátory

Operátor Význam Príklad
+ - * / Základná aritmetika int x = 10 + 5;
== Rovná sa (porovnanie) if (x == 15)
!= Nerovná sa if (x != 0)
> < Väčší / menší ako if (x > 10)
++ Zvýš o 1 i++ → rovnaké ako i = i + 1
-- Zníž o 1 i-- → rovnaké ako i = i - 1
! Negácia (otočí bool) !true = false

Logické operátory

Používame ich na kombináciu viacerých podmienok:

Operátor Význam Príklad
&& A zároveň (obe podmienky musia platiť) if (x > 10 && x < 30)
|| Alebo (aspoň jedna podmienka musí platiť) if (x < 0 || x > 100)
float vzdialenost = getDistance();
bool aktívny = true;

// Obe podmienky musia platiť
if (aktívny && vzdialenost < 10) {
  // blízko A zapnuté
}

// Stačí jedna podmienka
if (vzdialenost < 0 || vzdialenost > 200) {
  // neplatná hodnota
}

Skrátený zápis

Namiesto x = x + 5 môžeme písať kratšie:

Operátor Rovnaké ako Príklad
x += 5 x = x + 5 result += (1 << i);
x -= 5 x = x - 5 score -= penalty;
x *= 2 x = x * 2 speed *= 2;
x /= 2 x = x / 2 halfPeriod /= 2;

Ternárny operátor

Skrátený zápis podmienky – hodí sa keď chceme podľa podmienky priradiť hodnotu:

Zápis Vysvetlenie
podmienka ? hodnota_ak_true : hodnota_ak_false Ak je podmienka splnená vráti prvú hodnotu, inak druhú
// Dlhý zápis
String vysledok;
if (val > THRESHOLD) {
  vysledok = "1";
} else {
  vysledok = "0";
}

// Skrátený zápis – rovnaký výsledok
String vysledok = val > THRESHOLD ? "1" : "0";

Bitové operátory

Pracujú priamo s jednotlivými bitmi čísla. Každé celé číslo je v pamäti uložené ako séria núl a jednotiek – napríklad číslo 6 je v binárnom zápise 0110.

Operátor Význam Príklad
1 << n Posuň bit o n miest doľava (= 2ⁿ) 1 << 3 = 8
& Bitový AND – bit je 1 iba ak sú oba bity 1 5 & 3 = 1
| Bitový OR – bit je 1 ak aspoň jeden bit je 1 5 | 3 = 7


Logická tabuľka AND

A B A & B
0 0 0
0 1 0
1 0 0
1 1 1

Logická tabuľka OR

A B A | B
0 0 0
0 1 1
1 0 1
1 1 1
// Bitový posun – mocniny dvojky
// 1 << 0 = 1  (0b0001)
// 1 << 1 = 2  (0b0010)
// 1 << 2 = 4  (0b0100)
// 1 << 3 = 8  (0b1000)

// Príklad AND – skontroluj či je číslo párne (posledný bit = 0)
int x = 6;  // 0b0110
int y = 1;  // 0b0001
int result = x & y;  // 0b0110 & 0b0001 = 0b0000 = 0 → párne číslo

// Príklad OR – nastav konkrétny bit
int a = 4;  // 0b0100
int b = 2;  // 0b0010
int c = a | b;  // 0b0100 | 0b0010 = 0b0110 = 6

// Príklad posunu – vypočítaj mocninu dvojky
int n = 3;
int mocnina = 1 << n;  // 1 << 3 = 8 = 2³