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:
}
void setup()
. Kód ve void setup()
se spustí pouze
jednou.
Serial.begin(9600);
nám spustí sériovou konzoli, kterou by bez tohoto řádku nešlo
používat. Číslo 9600 znamená, že rychlost přenosu dat bude 9600 baudů za sekundu.
String input;
nám vytvoří proměnnou typu String se jménem input, jenž
bude obsahovat text.
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.
Serial.println(input);
nám vypíše obsah proměnné input do konzole.
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);
}
void setup()
a void loop()
. Kód ve void setup()
se spustí pouze
jednou, zatím co void loop()
se bude spouštět opakovaně.
void setup()
:Serial.begin(9600);
nám spustí sériovou konzoli, kterou by bez tohoto řádku nešlo
používat. Číslo 9600 znamená, že rychlost přenosu dat bude 9600 baudů za sekundu.
void loop()
:String input;
nám vytvoří proměnnou typu String se jménem input, jenž
bude obsahovat text.
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.
Serial.println(input);
nám vypíše obsah proměnné input do konzole.
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);
}
void setup()
a void loop()
. Kód ve void setup()
se spustí pouze
jednou, zatím co void loop()
se bude spouštět opakovaně.
void setup()
:Serial.begin(9600);
nám spustí sériovou konzoli, kterou by bez tohoto řádku nešlo
používat. Číslo 9600 znamená, že rychlost přenosu dat bude 9600 baudů za sekundu.
void loop()
:String input;
nám vytvoří proměnnou typu String se jménem input, jenž
bude obsahovat text.
while (input.length() < 1)
nám bude běžet do doby, než bude vstup od uživatele větší
něž 1. Jedničku jsem zvolil proto, že i samotný ENTER který dáme na konci se počítá jako jeden znak.
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.
Serial.println(input);
nám vypíše obsah proměnné input do konzole.
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);
}
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