LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Arduino III.

V dnešním díle si popíšeme funkce, které nám usnadní a zkrátí náš program. Jsou to například proměnné, pole, cykly nebo podmínky. Naučíme se s Arduinem komunikovat po sériové lince, s jejíž využitím si necháme do PC posílat data z potenciometru, nebo budeme testovat, zda je tlačítko stisknuté, či nikoliv.

11.12.2011 22:00 | Zbyšek Voda | Články autora | přečteno 22486×

V minulém díle jsme nainstalovali Arduino IDE v Linuxu i ve Windows a nastavili vše potřebné. Ukázali jsme si i jednoduchý program, kterým jsme blikali LED diodou.


Řešení úkolu

Různých obdob tohoto úkolu je vlastně nepočítaně. Záleží jen na nás, kolik LED si vybereme a v jakém pořadí je budeme rozsvěcovat. Pro ukázku řešení si zvolím 5 LED, které naprogramuji jako běžící pás. Všechny diody tedy postupně rozsvítím a ve stejném pořadí je vzápětí budu zhasínat.

void setup() {                
  // jako první musíme nastavit piny, 
  // na kterých jsou připojeny LED, jako výstupní
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);     
}
void loop() {
  //začneme programovat pás
  digitalWrite(12, HIGH);     
  delay(500);
  digitalWrite(11, HIGH);     
  delay(500);
  digitalWrite(10, HIGH);     
  delay(500);
  digitalWrite(9, HIGH);     
  delay(500);
  digitalWrite(8, HIGH);     
  delay(500);              

  digitalWrite(12, LOW);    
  delay(500); 
  digitalWrite(11, LOW);    
  delay(500); 
  digitalWrite(10, LOW);    
  delay(500); 
  digitalWrite(9, LOW);    
  delay(500); 
  digitalWrite(8, LOW);    
  delay(500);            
}  

Jak vidíte, je tento kód poměrně dlouhý, za chvíli si tedy ukážeme, jak ho zkrátit.

Proměnné

Můžeme se setkat s různýmy druhy. Udáváme, jaký typ dat v proměnné bude. Jeden ze základních typů je integreer, který se značí int. Proměnná tohoto typu může nabývat hodnot od -(2^15) až po (2^15)-1 . Avšak pokud chceme zapsat delší číslo, musíme použít datový typ long, do kterého můžeme vepsat čísla od -2,147,483,648 do 2,147,483,647. Důležitým typem je také Array (pole). Do něj vkládáme data vždy s nějakým indexem (="adresa"). Podle indexu pak můžeme lehce vyhledat uložené informace. Pokud se zajímáte o další typy můžete je nalézt zde

Int, long...

Většina proměnných se dá vytvořit velmi jednoduchou syntaxí. Vždy musíme programu říct, jaký datový typ od něj požadujeme, poté zadat název proměnné a její hodnotu (tu však není nutné zadat při vytvoření proměnné, ale můžeme ji přidat později). V názvu bychom se měli vyvarovat diakritiky. Ta by mohla způsobit chyby v zápisu do Arduina. Vytvoření proměnných vypadá následovně:

int jmeno = 250; //nyní jsme vytvořili proměnnou typu int s názvem jmeno a hodnotou 250
jmeno = jmeno + 200; // k proměnné jmeno jsme přičetli 200

//stejná situace nastane pro proměnnou long i většinu ostatních
long jmeno1 = 9 000 000 000; //jmeno1 má hodnotu 9000000000
jmeno1 = 0 //nyní jsme přepsali hodnotu jmeno1 na 0

Array

Další typ proměnné. Do češtiny se překládá jako pole nebo řada. Každý prvek má svůj index, pod kterým ho můžeme v poli najít. První prvek v poli má index 0 a každý další o 1 větší. Pokud je počet prvků v poli známý, měli bychom zapsat jejich počet za jméno pole. Podle hranatých závorek se pozná, že máme na mysli právě pole. Před jeho názvem musíme napsat, jakého typu budou prvky pole.

int pole[] = {2, 4, 8, 3, 6}; //vytvořili jsme pole s názvem pole, jsou  v něm hodnoty 2,4,8,3,6
//pokud chceme jiné proměnné přiřadit hodnotu jednoho z prvků, budeme postupovat následovně
int prvek = pole[2]; //do proměnné prvek jsme přiřadili 8, číslování indexů je totiž od nuly a 8 je na 3 místě

Cykly

Posledním krokem před zkrácením programu je naučit se něco o cyklech. Cyklus je operace která se x krát opakuje. Nejpoužívanější je cyklus for. Cyklu musíme říct, s jakou proměnnou má pracovat, počet opakování zajistíme podmínkou, a také mu řekneme, co má dělat při každém opakování.

 
for (int x=0; x< 8; x++) { 
    //na začátku nastavíme proměnnou int na 0, skript se provede 8 krát, x nabude hodnoty 0 až 7
    digitalWrite(12, HIGH);  //logická 1 na výstupu 12   
    delay(250);               
    digitalWrite(12, LOW);   //logická 0 na výstupu 12
    //tento kód osmkrát blikne LED připojenou pa pin 12 
  }

Nyní se můžeme přesunout ke zkrácení našeho prvního kódu v tomto díle.

Zkrácení

Z praktických důvodů pro Vás bude lepší, když si kód zkusíte upravit sami. Výsledný kód by ale mohl vypadat takto:

 

int cekej= 250;
int LED[5] = {12,11,10,9,8};
int y = 0;
int x = 0;
int z = 0; //této části se říká inicializace proměnných
//nastavíme si zde všechny proměnné, které v programu použijeme
//není to nutné, ale může se stát, že bez inicializace nebude program pracovat

void setup() {                
  for (x=0; x< 5; x++) { 
     pinMode(LED[x], OUTPUT);
  }     
}

void loop() {  
  for (y=0; y< 5; y++) { 
  digitalWrite(LED[y], LOW);     
  delay(cekej);              
  }
  
  for (y=0; y< 5; y++) { 
  digitalWrite(LED[y], HIGH);     
  delay(cekej);              
  }
   
}  

Tento kód sice není o moc kratší než původní, ale představte si, že budete mít tento pás s 20 LED diodami. To už bude kód podstatně kratší.

Sériová komunikace

Velmi užitečná funkce. Můžeme ji použít, když chceme zaslat nějaká data z Arduina do PC. Všechny modely mají alespoň jednu sériovou linku. Modely Mega mají tyto linky 3. Jak už bylo krátce zmíněno v minulém díle, Arduino je připojeno přes virtuální sériový port. Ve většině modelů je přímo na desce Serial to USB převodník, který tento port vytváří. Pouze k verzi Mini, Stamp a Lilypad je potřeba externí převodník.

Digital reading

Pro tento typ využijeme funkci digitalRead(). Tato funkce testuje binární hodnotu na zvoleném vstupu. V tomto případě je to vstup 2. Zbytek je vysvětlen v kódu. Schéma zapojení je na obrázku níže. Velikost rezistoru by se měla pohybovat mezi 2000 a 10000 Ohmy. Po nahrátí programu v menu Tools klikněte na Serial Monitor. Objeví se vám okno, které můžete vidět na obrázku níže. Tento kód můžete najít v menu Examples. Zde je pouze přidaná prodleva 500 ms.

 
void setup() {
  
  Serial.begin(9600); //tímto příkazem spustíte sériovou komunikaci, 9600 je rychlost toku dat
  pinMode(2, INPUT); //nastavení vstupního pinu
}

void loop() {
  int sensorValue = digitalRead(2); //digitalRead pracuje s binární informací 0/1
  //když je tlačítko stisknuto, rovná se 1
  Serial.println(sensorValue); //vypíše hodnotu na senzoru na sériovou linku
  delay(500); //počká 0,5 vteřiny
}


Analog reading

Pro tento příklad zapojte potenciomer podle druhého schématu. Velikost odporu potenciometru si můžeme zvolit prakticky jakoukoliv od 0 do cca 10k ohm. Potenciometr je totiž zapojen jako dělič napětí. Nezáleží tedy, jaká je skutečná hodnota odporu, ale na poměru dvou částí v potenciometru, jejichž velikost otáčením měníme. Pro naše účely je nejlepší potenciometr s lineárním průběhem. Zkoušení je však možné provádět i s ostatními typy. V softwaru je použita nová funkce analogRead(). Je to obdoba funkce digitalRead(), jen s rozdílem, že rozlišuje 1024 hodnot (0-1023). Navíc musíme střední pin potenciometru připojit na analogový vstup (např A0). Po spustění Serial Monitor se otevře podobné okno jako u předchozího příkladu. Budou zde však čísla od 0 po 1023 (podle otočení potenciometru).

 
void setup() {
  Serial.begin(9600); //spustí sériovou komunikaci
  //u analogového čtení odpadá nutnost nastavení vstupu
}

void loop() {
  int sensorValue = analogRead(A0); //čte analogovou hodnotu na vstupu A0
  Serial.println(sensorValue); //vypíše tuto hodnotu
  delay(100); //počká 100 ms
}

PWM

Zkratka pro Pulse Width Modulation. Do češtiny se překládá jako pulsně šířková modulace. Je to pokus o digitální nahrazení analogové hodnoty. Nedochází zde ale ke změně velikosti napětí. Arduino může generovat PWM v rozsahu 0 až 255. 0 znamená, že neproudí žádný proud. 255 je nepřerušovaných 5 voltů. Hodnota 1 znamená jeden "schod" o velikosti 5 voltů o délce jednoho "taktu". Zbylých 252 "taktů" je na výstupu 0 voltů. Pokud tedy nastavíme hodnotu na 100, znamená to, že bude 100 "taktů" +5V a 155 "taktů" 0V. Poměr +5V ku 0V se nám projeví například jako různý jas LED, nebo jako různá rychlost otáčení motoru. Jak generovat PWM můžete vidět v následujícím kódu. Zapojte LED v sérii s 330 ohm resistorem mezi piny GND a 12. Vyzkoušejte různé velikosti proměnné jas. POZOR!! Arduino boardy mají pro PWM přímo určené výstupy. Na jiných výstupech nebude tato funkce fungovat.

 
int jas=20; //jaký jas má mít LED dioda
int LED=12; //na kterém pinu je LED připojena
void setup()  { 
  pinMode(LED, OUTPUT);
  analogWrite(LED, jas); //funkce analogWrite() umožňuje generovat PWM signál  
} 
void loop()  {                            
}

Úkoly

Pro procvičení mám pro Vás dva úkoly.

  1. Napište program, který bude postupně rozsvěcovat a zhasínat LED diodu (nápověda: cyklus for). Nechte Arduino po sériové lince posílat informace o jasu LED.
  2. Pomocí potenciometru regulujte jas LED (analogRead() - analogWrite()).

Verze pro tisk

pridej.cz

 

DISKUZE

Hodnotenie 26.12.2011 14:38 Trololo
L Re: Hodnotenie 26.12.2011 23:56 Zbyšek Voda
  L Re: Hodnotenie 27.12.2011 12:14 Trololo
    L Re: Hodnotenie 27.12.2011 22:49 Zbyšek Voda
      L Re: Hodnotenie 6.1.2012 12:22 Aleš Hakl
Upřesnění 6.1.2012 08:24 Ondřej Tůma
|- Re: Upřesnění 6.1.2012 12:19 Aleš Hakl
L Re: Upřesnění 6.1.2012 23:40 Zbyšek Voda
Ledku se podaří rozblikat pouze na dvou zdířkách 30.10.2013 15:43 Dave




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

5.12.2017 11:50 / Thomas
kitchen renovations

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze