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() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  String input;
  input = Serial.readStringUntil('\n');

  Serial.println(input);
}

void loop() {
  // put your main code here, to run repeatedly:

}

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() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  String input;
  input = Serial.readStringUntil('\n');

  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() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  String input;
  while (input.length() < 1) {
    input = Serial.readStringUntil('\n');
  }
  Serial.println(input);
}

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() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  String input;
  while (input.length() < 1) {
    input = Serial.readStringUntil('\n');
  }
  int cislo = input.toInt();
  Serial.println(cislo + 2);
}

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 Classroom: https://classroom.google.com/c/NTkwMDUxNjcyMjUy/a/NjcxMTY5MzQ0NjQ1/details