Arduino 4: sériový port a podmínky

Díl 4 z 7 v seriálu Arduino

Sériový port je hodně důležité rozhraní, se kterým by jste se určitě měli naučit pracovat. Můžete pomocí něho zjistit co se děje uvnitř obvodu, když máte pocit, že je s programem něco špatně a přesně nevíte co. Také pomocí něho můžete komunikovat s počítačem nebo jinými obvody či arduiny.

Sériový port je na arduinu standardně vyveden na převodník “USB<>Serial” a přes USB připojen k počítači. Díky tzv. bootloaderu je sériový port využíván také k nahrávání programů do arduina. Tato konstrukce nám umožňuje vyzkoušet používat sériový port aniž bychom museli na běžném arduinu cokoliv měnit nebo zapojovat.

Nahrajte do arduina náledující zdrojový kód a zapněte v programu “Serial Monitor”, který najdete v menu “Tools”. Pozor rychlost musíte nastavit na stejnou hodnotu jakou jsme použili v programu tedy 9600, ale to by mělo být přednastaveno.

void setup() {
 //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Ahoj tady Arduino");
}

void loop(){
  Serial.println("Odpocet jedne sekundy"); // vypis hlaseni v cyklu po jedne vterine
  delay(1000); // pauza jedna vterina
}

Okno výstupu sériového portu

Na obrazovce máte právě toto okno na kterém každou vteřinu přibývá jedno hlášení. Abych tuto kapitolu nevěnoval jenom téhle drobnosti tak přidáme ještě nějaké kostičky ať si máte s čím hrát. Pro ty kteří už něco programovali bude tahle část dost jednoduchá a zdlouhává.

Naučíme se použít proměnnou typu int. Typ int je základním typem pro ukládání celých čísel. Vejdou se do něj čísla od -32768 do 32767 protože je ukládán v 16 bitech paměti (tohle se může lišit podle typu procesoru, třeba arduino due používá k ukládání dvojnásobek místa a tak je potom rozsah -2147483648 až 2147483647).

void setup() {
 //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Ahoj tady Arduino");
}
int pocitadlo;
void loop(){
  pocitadlo++; // zvetseni promenne pocitadlo o jednicku na zmenseni muzeme pouzit --
  Serial.print("Ubehlo "); //funkce print je podobná println jenom neukonci radek
  Serial.print(pocitadlo); // vypiseme obsah promene pocitadlo
  Serial.println(" sekund");
  delay(1000); // pauza jedna vterina
}

Když použijete tento program tak výstup vypadá následovně:

Ahoj tady Arduino
Ubehlo 1 sekund
Ubehlo 2 sekund
Ubehlo 3 sekund
Ubehlo 4 sekund
Ubehlo 5 sekund
Ubehlo 6 sekund
Ubehlo 7 sekund
Ubehlo 8 sekund
Ubehlo 9 sekund
Ubehlo 10 sekund
Ubehlo 11 sekund

Program by počítal až do 32767 a potom by takzvaně přetekla proměnná a začal by od znovu od -32767.

Taky se vám ta čeština výpisu moc nelíbí? Tak vylepšíme program ještě o použití podmínek.
Podmínka se píše následovně:

if(pocitadlo>5){ // podmínka "je pocitadlo větší než 5", pokud platí proveď příkazy v následujících složených závorkách
   Serial.println("Ubehlo vice nez 5 sekund");
}else{ // pokud podmínka neplatila proveď v těchto složených závorkách
   Serial.println("Ubehlo mene nez 5 sekund");
}

Tu část, která začíná else nemusíte používat a můžete psaní ukončit uzavřením závorek. Else část je volitelná. Podnímky jdou taky skládat za sebe a to si ukážeme na příkladu.

Podmínku použijeme k tomu abychom narovnali pošramocenou češtinu programu.

void setup() {
 //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Ahoj tady Arduino");
}
int pocitadlo;
void loop(){
  pocitadlo++; // zvetseni promenne pocitadlo o jednicku na zmenseni muzeme pouzit --
  Serial.print("Ubehlo "); //funkce print je podobná println jenom neukonci radek
  Serial.print(pocitadlo); // vypiseme obsah promene pocitadlo

  if(pocitadlo==1){ // pocitadlo je rovno presne 1
    Serial.println(" sekunda");
  }else if(pocitadlo<5){ // pocitadlo je mensi 5
    Serial.println(" sekundy");
  }else{ // pocitadlo je vetsi 5
    Serial.println(" sekund");
  }

  delay(1000); // pauza jedna vterina

}

Opravu slova sekundy jsme provedli podmínkou pokud se rovná jedné vypiš sekunda, pokud ne tak se rozhodni, je menší než 5 napiš sekundy, pokud je vetší napiš sekund.
Ještě pro úplnost jak se porovnávají čísla:

  • == rovná se (pozor na jedno = to není porovnání, ale přiřazení, tedy nastavení proměnné na hodnotu)
  •  > je větší
  • < je menší
  • <= je menší nebo stené
  • >= je větší nebo stejné
  • != nerovná se

Slovo “Ubehlo” už si určitě napravíte sami. Aby byl výklad o podmínkách trochu kompletní tak si ukážeme ještě konstrukci přepínače. Co kdybychom chtěli vypisovat vteřiny ne čísly, ale slovy? Pomocí nám známých podmínek by to bylo snadné, ale poměrně zdlouhavé a tak trochu kostrbaté.

if(pocitadlo==1){
  Serial.print(" jedna ");
}
if(pocitadlo==2){
  Serial.print(" dve ");
}
if(pocitadlo==3){
  Serial.print(" tri ");
}
// a tak dále

K tomu existuje přepínač neboli anglicky switch.

switch (pocitadlo) {
    case 1:
      Serial.print(" jedna ");
      break;
    case 2:
      Serial.print(" dva");
      break;
    case 3:
      Serial.print(" tri");
      break;
    default:
      Serial.print(" neco jineho");
  }

Je mi jasné,že jeho krásu objevíte až časem, protože ta vynikne až při delším kódu než jsou tyhle hrátky.

Myslím, že máte stavební kameny, se kterými už můžete začít stavět svoje programy. Brzo dopíšu článek o cyklech a pak snad půjdem na něco komplikovanějšího.

Další díly seriálu<< Arduino 3: První programArduino 5: cykly >>
Sdílení

Leave a Reply

Your email address will not be published. Required fields are marked *