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() {
}
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í).