Stránka 6 z 8

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

Napsal: 19 úno 2020, 20:26
od tosik
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 -> +++++++++++++++++++++++++++++++++++++++


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

Napsal: 19 úno 2020, 21:44
od tosik
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,

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

Napsal: 20 úno 2020, 10:12
od KamilV
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í.

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

Napsal: 20 úno 2020, 20:37
od tosik
Dobře, opravím to. Díky za pomoc.

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

Napsal: 23 úno 2020, 11:17
od Le-Ze
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

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

Napsal: 25 úno 2020, 09:21
od tosik
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...

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

Napsal: 26 úno 2020, 16:43
od tosik
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í...

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

Napsal: 26 úno 2020, 17:21
od kiRRow
pomohlo by dvourozměrné pole ? data[kanal][index_dat] ?

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

Napsal: 26 úno 2020, 19:11
od gilhad
Nebo predat ty promenne/pole odkazem.
Pripadne, pokud je jich hodne, tak je zabalit do struktury/objektu a predavat odkazem tohle.

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

Napsal: 26 úno 2020, 19:33
od tosik
Malý příklad by nebyl? Ještě jsem se ke strukturám nedostal. Zatím zkusím nastudovat to dvojrozměrné pole...