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

Odpovědět
tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48

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

Příspěvek od tosik » 19 úno 2020, 20:26

Jo, to je docela dobré, tohle by mi problém vyřešilo, to se pokusím použít.

A co se vlastně stane, když nějaké pole nevyplním. Může se stát, že se přehlédnu. Co odesílá Lazarus na sériovou linku do Arduina z nevyplněného textboxu a comboboxu?
Zkoušel jsem vyhodnotit chybu (nevyplněné pole na odesílacím formuláři) pomocí NULL, "" (proměnná je String), ale bez záběru, prostě jede jako by bylo vše OK.
Přikládám výpis ze SL, v přijatém řetězci není za posledním řetězci nic, když nezadám dvě hodnoty, budou za sebou dvě svislé lomítka bez mezery. Ve výpisu pak zpracovanaPrijataData[7] taky vypíše "bez ničeho". Takže nevím, co dát do podmínky, kdyby se náhodou nezadala nějaká položka, aby to vyhodnotilo chybu a zápis do EE nebyl proveden. Zachytit to umím, ale v tomhle případě nevím, co tam vlastně je (nebo spíš není :-D), co mám dát do podmínky;

Kód: Vybrat vše

20:14:39.437 -> Přijatý řetězec: K1|P1|12|35|1|53|2|
20:14:39.484 -> +++++++++++++++++++++++++++++++++++++++
20:14:39.537 -> zpracovanaPrijataData[0]K1
20:14:39.537 -> zpracovanaPrijataData[1]P1
20:14:39.584 -> zpracovanaPrijataData[2]12
20:14:39.637 -> zpracovanaPrijataData[3]35
20:14:39.637 -> zpracovanaPrijataData[4]1
20:14:39.637 -> zpracovanaPrijataData[5]53
20:14:39.684 -> zpracovanaPrijataData[6]2
20:14:39.737 -> zpracovanaPrijataData[7]
20:14:39.737 -> +++++++++++++++++++++++++++++++++++++++


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

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

Příspěvek od tosik » 19 úno 2020, 21:44

Přikládám výpis ze SL, v přijatém řetězci není za posledním řetězci nic,
mělo být: Přikládám výpis ze SL, v přijatém řetězci není za posledním svislým lomítkem nic,

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

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

Příspěvek od KamilV » 20 úno 2020, 10:12

Ono není šťastné házet si to do toho pole podle inkrementovaného "c".
Protože když nějaká hodnota nepříjde (bude NULL), strtok ji přeskočí a Tobě se hodnoty v poli posunou.
Lépe by bylo podívat se u každé naparsované hodnoty na ten první znak a podle toho to zařadit do pole.
Pokud bude první znak K, uložíš to do pole na index 0, pokud bude první znak P, uložíš to do pole na index 1...
Celý string by pak vypadal třeba takto: "K1|P1|H12|M35|F1|D53|R2|T"

No a jako bonus bych už u "vysílací" appky udělal validaci, která uživatele sprdne, že nějaké pole nevyplnil a ať ho vyplní.

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

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

Příspěvek od tosik » 20 úno 2020, 20:37

Dobře, opravím to. Díky za pomoc.

Le-Ze
Příspěvky: 216
Registrován: 24 črc 2017, 08:15

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

Příspěvek od Le-Ze » 23 úno 2020, 11:17

Jsem to nějak časově nedaval :(
Nějak jsem nepochopil, co chceš s tým ComboBoxem ale je to jen rozbalovací seznam.
Spiše jsem to zatím aní neřešil, jen obrazky.
https://wiki.freepascal.org/TImageList# ... h_ComboBox
https://wiki.freepascal.org/TComboBox

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

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

Příspěvek od tosik » 25 úno 2020, 09:21

Díky za tipy, projdu to. Ale myslel jsem, že to bude jednodušší, potřeboval bych něco podobného, jak je příklad s těmi barvami, ale místo barev číslo. Zatím použiju tu konverzi tabulkou...

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

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

Příspěvek od tosik » 26 úno 2020, 16:43

Hoj borci. Dá se nějak pomocí fce měnit název proměnné? Nebo jak to jinak udělat?
Mám několik řádků stejného kódu, třeba chci načítat hodnoty z EEPROM. A mám několik kanálů, pro které je chci načíst. Hodnoty adres měnit ve fci umím, ale jak to načíst pokaždé do jiné proměnné (typu pole). Ty pole (5 kanálů, 5 polí) mám normálně deklarované na začátku kódu a pak v loop bych potřeboval ta pole co určitý čas nasypat novýma hodnotama typu byte nebo integer. Stejný postup, ale pro každý kanál jiné hodnoty (načítání z jiné adresy)...

např. kanalL1[6], kanalL1[6], …

Když si udělám tu fci, tak umím naplnit jednou fcí jeden kanál. Jak to udělat, abych v průběhu fce změnil název toho pole, které budu plnit hodnotama?

Něco takového:

Kód: Vybrat vše


  aktProgL1 = (buferL1[indexProgramuL1]*3600L) + 
              ((buferL1[indexProgramuL1+1]) * 60);
  aktDimL1 = map((buferL1[indexProgramuL1+2]), 0, 100, 0, 255);
  indexProgramuL1 += 3;
  
  naslProgL1 = (buferL1[indexProgramuL1])*3600L) + 
               ((buferL1[indexProgramuL1+1])) * 60);
  naslDimL1 = map((buferL1[indexProgramuL1+2]), 0, 100, 0, 255);
  
Pak by mi v loop stačilo zavolat:

NactiData(L1);

a měl bych naplněné pole pro kanál L1 novýma hodnotama. To, které se mají z EE načíst mi určí indexProgramu, který si postupně měním.

Lze nějak zařídit, aby se mi v těch názvech měnily koncovky za to, co dám fci jako argument (to L1 za L2, nebo L3, atd)?
Jinak musím napsat 5 totožných fcí. Tady nejsou moc dlouhé, tak to zatím tak vyřeším, ale je to takové nic moc řešení a prostor pro chyby při přepisování...

Uživatelský avatar
kiRRow
Příspěvky: 1242
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

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

Příspěvek od kiRRow » 26 úno 2020, 17:21

pomohlo by dvourozměrné pole ? data[kanal][index_dat] ?

Uživatelský avatar
gilhad
Příspěvky: 825
Registrován: 07 bře 2018, 11:22

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

Příspěvek od gilhad » 26 úno 2020, 19:11

Nebo predat ty promenne/pole odkazem.
Pripadne, pokud je jich hodne, tak je zabalit do struktury/objektu a predavat odkazem tohle.

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

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

Příspěvek od tosik » 26 úno 2020, 19:33

Malý příklad by nebyl? Ještě jsem se ke strukturám nedostal. Zatím zkusím nastudovat to dvojrozměrné pole...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host