Začatečník
Začatečník
Dobrý den,
Jsem naprostý začátečník a chtěl bych poprosit o nějaké rady.
První problém mám s příkazem > motor.attach(10); když kliknu na ověřit tak mi to nahlásí že příkaz je špatně. Co je na tom špatně?
A druhá věc jak lze udělat jednotlivé bloky programu. například teď budeš tady hýbat servem. a když zmáčknu tlačítko budeš třeba svítít. Dělal jsem dříve s picaxe a tam byl příkaz >goto< je u arduina něco podobného?
Díky Petr
Jsem naprostý začátečník a chtěl bych poprosit o nějaké rady.
První problém mám s příkazem > motor.attach(10); když kliknu na ověřit tak mi to nahlásí že příkaz je špatně. Co je na tom špatně?
A druhá věc jak lze udělat jednotlivé bloky programu. například teď budeš tady hýbat servem. a když zmáčknu tlačítko budeš třeba svítít. Dělal jsem dříve s picaxe a tam byl příkaz >goto< je u arduina něco podobného?
Díky Petr
Re: Začatečník
Ahoj. Programování Arduina má svoje pravidla, které je třeba poznat a řídit se jimi. Všechno potřebné najdeš (v angličtině) např. na https://www.arduino.cc/en/Guide/HomePage . V češtině můžeš začít např. na adrese http://arduino.cz/i-zaklady-1-naproste-minimum/ .
K tomu dotazu na "motor.attach(10);" se musím zeptat, jestli to je jediný řádek programu, nebo jen součást nějakého příkladu? Každopádně na rozumnou odpověď je ten dotaz moc stručný a nejasný. Upřesni ho. Dobré je také sledovat, co přesně se vypisuje za chybové hlášení. Obvykle to není jen že "příkaz je špatně", ale je tam napsáno i něco, čeho se dá chytit při řešení problému.
Pokud už jsi úspěšně programoval pro PICAXE, tak Arduino stojí na podobných principech (algoritmus, programové struktury, vstupy, výstupy) jen holt ten jazyk je trochu jiný. Je třeba si na to zvyknout a přizpůsobit se tomu. Doporučuji to zkoušet na co nejjednodušších příkladech. Dej vědět, jestli se Ti daří spustit na Arduinu alespoň něco.
K tomu dotazu na "motor.attach(10);" se musím zeptat, jestli to je jediný řádek programu, nebo jen součást nějakého příkladu? Každopádně na rozumnou odpověď je ten dotaz moc stručný a nejasný. Upřesni ho. Dobré je také sledovat, co přesně se vypisuje za chybové hlášení. Obvykle to není jen že "příkaz je špatně", ale je tam napsáno i něco, čeho se dá chytit při řešení problému.
Pokud už jsi úspěšně programoval pro PICAXE, tak Arduino stojí na podobných principech (algoritmus, programové struktury, vstupy, výstupy) jen holt ten jazyk je trochu jiný. Je třeba si na to zvyknout a přizpůsobit se tomu. Doporučuji to zkoušet na co nejjednodušších příkladech. Dej vědět, jestli se Ti daří spustit na Arduinu alespoň něco.
Re: Začatečník
Ahoj,
příkaz >goto< je u arduina řešen pomocí Switch Case
přehled příkazů a funkcí včetně příkladů je zde: https://www.arduino.cc/en/Reference/HomePage
příkaz >goto< je u arduina řešen pomocí Switch Case
přehled příkazů a funkcí včetně příkladů je zde: https://www.arduino.cc/en/Reference/HomePage
Re: Začatečník
Jinak obecně "goto" je poněkud obskurní záležitost. Rozhodně doporučuji se mu vyhnout. Možná bych doporučil podívat se i obecně na základy jazyka C.
"all your robots are belong to us"
robodoupe.cz
robodoupe.cz
Re: Začatečník
Prosím o radu setkal jsem se s touto konstrukcí v podmínce cyklu
((doba % 1000) !=0)
doba je veličina počítaného strojového času proscento je modulo ale nějak si to neumím přeložit prosím mohl by mi někdo říci o co vlastně v podmínce jde? Díky
((doba % 1000) !=0)
doba je veličina počítaného strojového času proscento je modulo ale nějak si to neumím přeložit prosím mohl by mi někdo říci o co vlastně v podmínce jde? Díky
Re: Začatečník
dobu modulo podelime tisicem - dostaneme tedy cislo mezi 0 a 999.
Pokud je to cislo ruzne od nuly (!= 0 ) tak se cosi provede.
Cili se to provede v 999 pripadech z 1.000 a v 1 pripade nikoli.
Pokud je doba skutecne nejaka doba, tak to ma sanci se nestat jednou za 1.000 (sekund/minut/roku/tiku procesoru, ci co ta doba vlastne meri) pokud se ta podminka bude v tu chvili zrovna vyhodnocovat.
S trochou fantasie to muze predstavovat treba "nahodnou obcasnou nefunkci" cehosi pro testovani, jak se s tim neco vyporada. Nebo sanci pro nejaky algoritmus se vymanit ze smycky, pokud se zacykli a osciluje na miste tim, ze ho obcas nechame trochu ujet z kritickeho mista.
Nebo to taky muze byt cokoli jineho (reset casovace po jiste dobe ...) to uz zalezi na kodu okolo
Pokud je to cislo ruzne od nuly (!= 0 ) tak se cosi provede.
Cili se to provede v 999 pripadech z 1.000 a v 1 pripade nikoli.
Pokud je doba skutecne nejaka doba, tak to ma sanci se nestat jednou za 1.000 (sekund/minut/roku/tiku procesoru, ci co ta doba vlastne meri) pokud se ta podminka bude v tu chvili zrovna vyhodnocovat.
S trochou fantasie to muze predstavovat treba "nahodnou obcasnou nefunkci" cehosi pro testovani, jak se s tim neco vyporada. Nebo sanci pro nejaky algoritmus se vymanit ze smycky, pokud se zacykli a osciluje na miste tim, ze ho obcas nechame trochu ujet z kritickeho mista.
Nebo to taky muze byt cokoli jineho (reset casovace po jiste dobe ...) to uz zalezi na kodu okolo
Re: Začatečník
Moc děkuji ale stále nerozumím tomu modulo. Doba je číslo tedy výsledek odečtení současného stavu počítadla hodin mínus zapamatovaného stavu. Tedy jedno číslo ale modulo je zbytek po dělení ale čím se má podělit ta doba aby vzniklo modulo?
Kód: Vybrat vše
pocatek = millis();
digitalWrite(A1, HIGH);
do {
napeti = analogRead(0);
if (napeti > 1002) digitalWrite(A1, LOW);
do {
doba = millis() - pocatek;
if (napeti < 998) digitalWrite(A1, HIGH);
} while ((doba % 1000) != 0);
long pom;
Re: Začatečník
Modulo je v tomto kontextu zbytek po celočíselném dělení.daton píše: ((doba % 1000) !=0)
Výsledek této operace tedy bude nula pro doba = 0, 1000, 2000, 3000...
Používá se to s výhodou jako jednoduchý dělič nějakého trvale rostoucího čítače, např. každých 1000 ms provedu něco.
Na stejný čítač můžu takto "pověsit" libovolné množství takových děličů a tím od jednoho periodické děje (např. 10ms přerušení) odvodit další akce.
Zde je ale podmínka obráceně, tedy výraz NEplatí pro všechny celočíselné násobky...
V vedeném příkladu
Kód: Vybrat vše
do {
doba = millis() - pocatek;
if (napeti < 998) digitalWrite(A1, HIGH);
} while ((doba % 1000) != 0);
Pocatek je inicializovan na aktualni hodnotu casu, takze doba bude narustat od nuly a cela akce skonci, az bude doba = 1000 a modulo vyjde nula.
Soldering fumes make you stronger!
Re: Začatečník
Aha moc dík ted už je to jasné.
-
- Příspěvky: 385
- Registrován: 02 dub 2014, 15:30
Re: Začatečník
to smart programmers -
Ahoj, koukam na ten kod a mam nekolik zacatecnickych otazek.
- promena NAPETI se ve smycce neaktualizuje, takze se preklopi A1 podle stavu a pak uz se jen ceka, na presnou 1sekundu ??
- v tom delsim kodu je 2x Do a 1x While ??
zajimalo by me okomentovani toho kodu. Na takovych prikladech se da leccos naucit a pochopit
muj nazor k ((doba % 1000) !=0) je ten, ze lze jednoduchou syntaxi testovat 1sekundu. jen je treba si dat pozor na to, aby treba v nekterem preruseni neprobehla-neutekla na pozadi DOBA pres nami testovanou mez. to by mohlo zpusobovat obcasne divne chovani programu.
-V66
Ahoj, koukam na ten kod a mam nekolik zacatecnickych otazek.
- promena NAPETI se ve smycce neaktualizuje, takze se preklopi A1 podle stavu a pak uz se jen ceka, na presnou 1sekundu ??
- v tom delsim kodu je 2x Do a 1x While ??
zajimalo by me okomentovani toho kodu. Na takovych prikladech se da leccos naucit a pochopit
muj nazor k ((doba % 1000) !=0) je ten, ze lze jednoduchou syntaxi testovat 1sekundu. jen je treba si dat pozor na to, aby treba v nekterem preruseni neprobehla-neutekla na pozadi DOBA pres nami testovanou mez. to by mohlo zpusobovat obcasne divne chovani programu.
-V66