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

> Arduino IV.

V tomto díle si ukážeme řešení úkolu z minulého dílu, poté se vrátíme k pásu LED diod, na němž si ukážeme funkci 4-bitového dekodéru BCD kódu na 1 z 16 a funkci Map. Také si ukážeme logickou funkci If.

12.1.2012 00:00 | Zbyšek Voda | Články autora | přečteno 17725×

V minulém díle jsme si řekli něco o proměnných a cyklech. Ukázali sme si, jak funguje sériová komunikace a naučili jsme se číst analogová a digitální data. Nakonec jsme vyzkoušeli, jak funguje PWM.


Řešení úkolů

Úkol 1.


int cekej = 10; //kolik milisekund bude program čekat mezi jednotlivými kroky

void setup() {
  pinMode(12, OUTPUT);  //pin 12 nastaven jako výstupní
  Serial.begin(9600); //začátek sériové komunikace
}
void loop() {
  //tento cyklus rozsvěcuje LED
  for(int jas=0; jas < 255; jas++){    
    analogWrite(12, jas);
    Serial.println(jas);
    delay(cekej);
  }
  //tento ji zhasíná
  for(int jas=255; jas > 0; jas--){
    analogWrite(12, jas);
    Serial.println(jas);
    delay(cekej);
  }  
  //oba dva cykly posílají data o jasu led diody přes sériovou linku
}

Úkol 2.

void setup() {
  pinMode(12, OUTPUT);  //pin 12 nastaven jako výstupní
  Serial.begin(9600); //začátek sériové komunikace
}
void loop() {
  int jas = analogRead(A0) / 4; //čte hodnotu na potenciometru
  /*důvod,proč je hodnota vydělena 4 je jednoduchý
    funkce analogRead pracuje s 1024 hodnotami (0 - 1023), 
    kdežto analogWrite pouze s 256 hodnotami (0 - 255)
    1024 je čtyřnásobek čísla 256, proto pro úpravu na správnou hodnotu dělíme čtyřmi*/
  analogWrite(12, jas);
}

Pás z 10 LED

Vytvoříme si hada, jako v minulém díle, ale z 10 LED. Na něm si ukážeme užitečné funkce. Takto může vypadat kód, který postupně rozsvětsuje a zhasíná diody. Je to upravený kód z minulého dílu.


int cekej= 250;
int LED[10] = {12,11,10,9,8,7,6,5,4,3};


void setup() {                
  for (int x=0; x< 10; x++) { 
     pinMode(LED[x], OUTPUT);
  }     
}
void loop() {  
  for (int y=0; y< 10; y++) { 
  digitalWrite(LED[y], LOW);     
  delay(cekej);              
  }
  
  for (int z=0; z< 10; z++) { 
  digitalWrite(LED[z], HIGH);     
  delay(cekej);              
  }  
}  

Funkce Map

Tato funkce se používá, když chceme převést data nabývající rozsahu například 0-1023 na data 0-255 tak, aby procentuální podíl zůstal zachován. Následujícím příkladem můžeme nahradit dělení čtyřmi v úkolu 2. Pokud váháte, zda použít raději dělení, nebo funkci map, je to jen na vás. Při použití map je výsledek "elegantnějsí a čistčí". Na funkčnosti projektu se ale nic nemění. Při použití dělení by problém nastal, kdyby vstupní a výstupní rozsah byli nesoudělná čísla. Syntaxe je následovná:


  int jas1 = analogRead(A0);
  int jas2 = map(jas1, 0, 1023, 0, 255);
  //z rozsahu 0-1023 jsme přemapovali proměnnou jas1 na 0-255
  analogWrite(12, jas);

Podmínka IF

Do češtiny překládáme jako KDYŽ. Je to běžná funkce ve většině "vyšších" programovacích jazyků. Než se pustíme do podmínek, ukážeme si porovnávací operátory, které se v podmínkách vyskytují.

== - rovná se
!= - nerovná se
<  - menší než
>  - větší než
<= - menší nebo rovno
>= - větší nebo rovno

&& - logické a (AND) - výsledek je logická 1, když jsou oba výroky pravdivé
|| - logické nebo (OR) - výsledek je logická 1, když je alespoň jeden výrok pravdivý 
!  - logická negace (NOT) - když je výrok pravdivý, po znegování je nepravdivý a naopak

Zápis podmínky vypadá takto.


 if(podmínka 1){ 
     //co se stane, když je splněna podmínka 
   } 
 else if(podmínka 2) { 
     //co se stane když je splněna 2 podmínka
     //tato část je nepovinná, může zde být libovolně mnohokrát 
   }    
 else { 
     //co se stane, když není splněna ani jedna podmínka
     //tato část je také nepovinná
   }    
   
příklad: 
   if(abc < 0){ 
     //když je proměnná abc menší než nula proběhne kód zde
   }  
   else if(abc == 0){ 
     //když je proměnná abc rovna kód zde
   } 
   else if((abc > 10) && (abc < 20)){ 
     //když je proměnná abc mezi 10 a 20 proběhne kód zde
   }  
   else{ 
     //když je proměnná abc větší než nula proběhne kód zde
   }  


4-bitový dekodér BCD kódu 1 z 16

Co to vlastně je? 4 bitový znamená, že dekodér pracuje se 4 bitovou vstupní informací. Jednoduše řečeno, má čtyři vstupní piny. Kombinací jedniček a nul na těchto vstupech se dá docílit nastavení logické 1 na jednom z 16 výstupů. BCD kód znamená binary coded decimal, neboli binárně zakódovaná číslice v desítkové soustavě. Převodní tabulky z BCD na desítkovou soustavu můžete najít ve spoustě zdrojů na internetu. Zapojení je pak jednoduché. Na internetu si najděte datasheet (popis) vašeho dekodéru a připojte napájení podle popisu v něm. Propojte vstupy dekodéru s Arduinem a na každý každý z výstupů dekodéru připojte LED diodu. Vše následující popíšu v kódu.

  int piny[4]={12,11,10,9}; //na těcto pinech je dekodér připojen
  //nastavíme, jaká kombinace je potřebná k rozsvícení každé LED
  int led[16][4]={{0,0,0,0},    //pod indexem 0 je uložena 
                  {1,0,0,0},    //kombinace 0,0,0,0 - bude svítit 1. LED 
                  {0,1,0,0},
                  {1,1,0,0},  
                  {0,0,1,0},
                  {1,0,1,0},
                  {0,1,1,0},
                  {1,1,1,0},
                  {0,0,0,1},
                  {1,0,0,1},
                  {0,1,0,1},
                  {1,1,0,1},
                  {0,0,1,1},
                  {1,0,1,1},
                  {0,1,1,1},
                  {1,1,1,1}};  
    int cislo = 10; //jakou led chceme zobrazit

void setup() {
  for(int x=0; x<4 ; x++){
     pinMode(piny[x],OUTPUT); 
  }
}

void loop() {
  for(int x=0; x<4 ; x++){
    digitalWrite(piny[x],led[cislo][x]);
  } 
}

Úkoly

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

  1. Pomocí potenciometru vyberte 1 z 16 LED (nápověda - 1. možnost: funkce Map 2. možnost: IF + For)
  2. Přidejte k prvnímu úkolu jeden potenciometr, kterým regulujte jas LED.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



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

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ář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

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

> Poslední diskuze

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

27.7.2017 12:24 / Jaromir Obr
Cteni/zapis

Více ...

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