Vstup ze sériové konzole

Jsou případy, kdybychom z naší konzole ocenili vstup. Získat vstup správně může být trochu složitější kvůli tomu, jak Arduino funguje. Projdeme si společně cestou ke zjištění toho, jak vstup získat co nejlépe.

void setup() {
  // spuštění sériové konzole s rychlostí 9600 baudů za sekundu
  Serial.begin(9600);

  // vytvoří proměnnou typu string jménem input
  String input;
  // čte sériovou konzoli do momentu, kdy se objeví nový řádek a vstup uloží do proměnné input
  input = Serial.readStringUntil('\n');

  // vypíše do sériové konzole proměnnou input
  Serial.println(input);
}

void loop() {

}

input = Serial.readStringUntil('\n'); nám přečte vstup ze sériové konzole a uloží nám ho do proměnné input. \n značí, že má přestat číst po tom co mu pošleme celý řádek. Kdybychom zde dali například l a poté poslali text Hello Wolrd!, do proměnné se uloží pouze text He.

Jak si můžete všimnout, tento kód se nechová tak, jak by jsme očekávali. Pokud do konzole zadáme text, nevypíše se nám do konzole. Je to z toho důvodu, že Serial.readStringUntil nefunguje tak, že počká na vstup od uživatele. Podívá se pouze, jestli v ten konkrétní moment, kdy je řádek vykonáván, není z konzole nějaký příchozí vstup. Můžeme si to ukázat tak, že tento kód přesuneme do void loop(), díky čemuž se nám bude neustále opakovat.

void setup() {
  // spuštění sériové konzole s rychlostí 9600 baudů za sekundu
  Serial.begin(9600);
}

void loop() {
  // vytvoří proměnnou typu string jménem input
  String input;
  // čte sériovou konzoli do momentu, kdy se objeví nový řádek a vstup uloží do proměnné input
  input = Serial.readStringUntil('\n');

  // vypíše do sériové konzole proměnnou input
  Serial.println(input);
}

Nyní když spustíme kód, můžeme si všimnout, že můžeme zadat vstup a on se zobrazí, akorát odjede nahoru. Toto je způsobeno tím, že v moment kdy je proměnná prázdná, což je kvůli tomů že ji na začátku void loop() pokaždé vytvoříme, zobrazí se prázdná proměnná a zabere nám tím nový řádek. Můžeme to vyřešit tím, že si sami počkáme na to, až uživatel zadá vstup.

void setup() {
  // spuštění sériové konzole s rychlostí 9600 baudů za sekundu
  Serial.begin(9600);
  
  // vytvoří proměnnou typu string jménem input
  String input;

  // opakuj, dokud je délka proměnné vstup menší než 1...
  while (input.length() < 1) {
    // čte sériovou konzoli do momentu, kdy se objeví nový řádek a vstup uloží do proměnné input
    input = Serial.readStringUntil('\n');
  }

  // vypíše do sériové konzole proměnnou input
  Serial.println(input);
}

void loop() {

}

Tento kód již počká na uživatele a potom co zadá text se pokračuje v běhu programu, kde je vypsání jeho vstupu do konzole.

Pokud chceme od uživatele získat číslo, musíme od něj první získat String a poté ho převést na int. Provedeme to následovně:

void setup() {
  // spuštění sériové konzole s rychlostí 9600 baudů za sekundu
  Serial.begin(9600);

  // vytvoří proměnnou typu string jménem input
  String input;

  // opakuj, dokud je délka proměnné vstup menší než 1...
  while (input.length() < 1) {
    // čte sériovou konzoli do momentu, kdy se objeví nový řádek a vstup uloží do proměnné input
    input = Serial.readStringUntil('\n');
  }

  // převede string input na číslo typu int, vytvoří proměnnou cislo typu int a uloží do něj to číslo
  int cislo = input.toInt();
  // vypíše do konzole výsledek cislo + 2
  Serial.println(cislo + 2);
}

void loop() {
    
}

Zadání:

Vytvořte kalkulačku, která si od uživatele vezme dvě čísla a poté s nimi provede operaci, kterou si uživatel vybere (sčítání, odčítání, násobení, dělení).

Nezapomeňte odevzdat váš kód na Google učebnu:
https://classroom.google.com/c/ODA4MjE5ODMxODM0/a/ODQzNjg0OTEyNDg2/details