PC - ARDUINO ovládání vstupů a výstupů
Re: PC - ARDUINO ovládání vstupů a výstupů
Doporučuji si to rozdělit na dílčí problémy.
Nejprve se pověnuj Arduinu, kdy si ze SerialMonitoru budeš posílat stringy "HH|MM|Jump|Dimmer" a ukládat do EEPROM.
Až tě tohle bude fungovat, přesuneš se na druhou stranu na PC a budeš řešit odesílání stringu na Serial tak, jak jsi posílal ručně testy.
Nejprve se pověnuj Arduinu, kdy si ze SerialMonitoru budeš posílat stringy "HH|MM|Jump|Dimmer" a ukládat do EEPROM.
Až tě tohle bude fungovat, přesuneš se na druhou stranu na PC a budeš řešit odesílání stringu na Serial tak, jak jsi posílal ručně testy.
Re: PC - ARDUINO ovládání vstupů a výstupů
[quote=KamilV post_id=10688 time=1581881432 user_id=504]
strtok je "čtivější" a nevynalézá kolo
strtok je "čtivější" a nevynalézá kolo
Kód: Vybrat vše
char str[] ="Jabko|Hruska|Banan";
char* item;
item = strtok(str,"|");
...
[/quote]
Prosím tě, co označuje, nebo dělá ta hvězdička? (char* …).
Re: PC - ARDUINO ovládání vstupů a výstupů
To zní rozumně, zpracuji nejdříve to načítání....
Re: PC - ARDUINO ovládání vstupů a výstupů
Hvězdička je pointer, neboli ukazatel.
Příklad: když chceš rozparsovat "Jabko|Hruska|Banan", nepotřebuješ další proměnnou v paměti, do které bys ukládal data "Jabko".
Stačí ukazatel, který v sobě nese adresu paměti na "Jabko", v druhé iteraci bude mířit na "Hurska" a pak na "Banan".
Více třeba zde: https://cs.wikipedia.org/wiki/Ukazatel_ ... A1n%C3%AD)
Příklad: když chceš rozparsovat "Jabko|Hruska|Banan", nepotřebuješ další proměnnou v paměti, do které bys ukládal data "Jabko".
Stačí ukazatel, který v sobě nese adresu paměti na "Jabko", v druhé iteraci bude mířit na "Hurska" a pak na "Banan".
Více třeba zde: https://cs.wikipedia.org/wiki/Ukazatel_ ... A1n%C3%AD)
Re: PC - ARDUINO ovládání vstupů a výstupů
Díky za vysvětlení a odkaz.
A ještě (pro zkušené asi hloupý) dotaz.
char str[] ="Jabko|Hruska|Banan";
Není to deklarované jako String, to by bylo "Jabko", "Hruška", "Banan". Tady každá buňka obsahuje jedno ovoce. A v tom char poli mám tedy v každé buňce jeden znak, že? Kdybych to deklaroval String, tak bude pole obsahovat jen jednu hodnotu, tj. Jabko|Hruska|Banan, zatímco při deklaraci char se můžu odkazovat na jednotlivá písmena v poli, aniž bych je pak musel složitě separovat. Rozumím tomu správně? Pak bych to mohl využít při tom mém zápisu do EEPROM.
A ještě (pro zkušené asi hloupý) dotaz.
char str[] ="Jabko|Hruska|Banan";
Není to deklarované jako String, to by bylo "Jabko", "Hruška", "Banan". Tady každá buňka obsahuje jedno ovoce. A v tom char poli mám tedy v každé buňce jeden znak, že? Kdybych to deklaroval String, tak bude pole obsahovat jen jednu hodnotu, tj. Jabko|Hruska|Banan, zatímco při deklaraci char se můžu odkazovat na jednotlivá písmena v poli, aniž bych je pak musel složitě separovat. Rozumím tomu správně? Pak bych to mohl využít při tom mém zápisu do EEPROM.
Re: PC - ARDUINO ovládání vstupů a výstupů
Char je datový typ pro jeden znak. Pokud chceš více znaků, definuješ to jako pole.
Tedy
je "totéž" jako
String je řetězec, tedy objekt. Také se k němu dá přistupovat jako k poli. V paměti zabere více místa.
Více zde: https://www.google.com/search?q=char+vs ... e&ie=UTF-8
Tedy
Kód: Vybrat vše
char text[] = "AHOJ";
Kód: Vybrat vše
text[0] = "A";
text[1] = "H";
text[2] = "O";
text[3] = "J";
text[4] = "\n";
Více zde: https://www.google.com/search?q=char+vs ... e&ie=UTF-8
Re: PC - ARDUINO ovládání vstupů a výstupů
Díky za vysvětlení. Prosím vás jek dostanu z řetězce jen číselnou hodnotu. Myslel jsem, že .toInt() mi z toho vyhodí písmena a vyplivne jen číslo:
Vytiskne K1. Jak z toho dostanu číselnou hodnotu 1? S fcí atoi jsem taky nepochodil...
Kód: Vybrat vše
String dataKulozeni[3];
dataKulozeni[1] = K1;
int test1 = dataKulozeni[1].toInt();
Serial.println(dataKulozeni[1]);
Re: PC - ARDUINO ovládání vstupů a výstupů
K1 je proměnná? Patrně ano, jinak by to slítlo už při překladu.
Jinak asi nezbude, než procházet znak po znaku a vyzobávat si jen to, co je číslem, a pak na závěr udělat atoi() nebo .toInt()
Druhá možnost je procházet znak po znaku a zahazovat vše, co číslem není.
Jinak asi nezbude, než procházet znak po znaku a vyzobávat si jen to, co je číslem, a pak na závěr udělat atoi() nebo .toInt()
Druhá možnost je procházet znak po znaku a zahazovat vše, co číslem není.
Re: PC - ARDUINO ovládání vstupů a výstupů
Ne, neni proměnná, přepisoval jsem to ručně, zapomněl jsem na uvozovky. Tady jsem to přiřadil, ale jinak to bude načteno ze sériové linky. Taky bych mohl použít substring ne? Potřebuji vzdy číslo na druhé pozici....
Re: PC - ARDUINO ovládání vstupů a výstupů
Těžko říct, netušíme, jaké jiné hodnoty to bude nabývat. Bude to číslo jednociferné? Budou se i dále vyskytovat nenumerické znaky?
Pokud budou hodnoty 'K0' až 'K9', tak lze dataKulozeni[1][1]
Pokud budou hodnoty 'K0' až K'999...' tak lze dataKulozeni[1].substring(1);
Pokud budou hodnoty "K1L25", tak znak po znaku...
Pokud budou hodnoty 'K0' až 'K9', tak lze dataKulozeni[1][1]
Pokud budou hodnoty 'K0' až K'999...' tak lze dataKulozeni[1].substring(1);
Pokud budou hodnoty "K1L25", tak znak po znaku...
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 16 hostů