PC - ARDUINO ovládání vstupů a výstupů

Odpovědět
KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od KamilV » 17 úno 2020, 08:42

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.

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 17 úno 2020, 09:46

[quote=KamilV post_id=10688 time=1581881432 user_id=504]
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* …).

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 17 úno 2020, 09:47

To zní rozumně, zpracuji nejdříve to načítání....

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od KamilV » 17 úno 2020, 10:00

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)

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 17 úno 2020, 10:59

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.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od KamilV » 17 úno 2020, 11:28

Char je datový typ pro jeden znak. Pokud chceš více znaků, definuješ to jako pole.
Tedy

Kód: Vybrat vše

char text[] = "AHOJ";
je "totéž" jako

Kód: Vybrat vše

text[0] = "A";
text[1] = "H";
text[2] = "O";
text[3] = "J";
text[4] = "\n";
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

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 17 úno 2020, 18:56

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:

Kód: Vybrat vše

String dataKulozeni[3];
dataKulozeni[1] = K1;
int test1 = dataKulozeni[1].toInt();
Serial.println(dataKulozeni[1]);


Vytiskne K1. Jak z toho dostanu číselnou hodnotu 1? S fcí atoi jsem taky nepochodil...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od KamilV » 17 úno 2020, 19:18

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í.

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 17 úno 2020, 22:01

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....

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od KamilV » 17 úno 2020, 22:42

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...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Google [Bot] a 14 hostů