Jak poslat pole přes ser.port

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Le-Ze
Příspěvky: 201
Registrován: 24 črc 2017, 08:15
Reputation: 0

Jak poslat pole přes ser.port

Příspěvek od Le-Ze » 07 črc 2018, 08:50

Zdravím.

Kód: Vybrat vše

String A001[10] = { "one", "two", "three" };

void setup() {
 Serial.begin(9600);
 A001[0] = "Jedna"; 
 A001[1] = "Dvě"; 
 A001[2] = "Tři"; 
 
 Serial.println(A001[0]);
 Serial.println(A001[1]);
 Serial.println(A001[2]);
}
Dá se poslat přes ser.port cele pole, tak abych ho měl zas na druhem arduinu jako pole?

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

Re: Jak poslat pole přes ser.port

Příspěvek od gilhad » 07 črc 2018, 09:44

Ano, ve smycce - bud to budes posilat po retezcich (bacha, kdyz budou obsahovat odradkovani, tak musis resitr ty radky - obecne bych retezce posilal bez odradkovani a oodelene znakem \0) , nebo po bytech cele pole a jako cele pole to nacist.

Tak jak tak to budes muset cist taky ve smycce.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Jak poslat pole přes ser.port

Příspěvek od pavel1tu » 07 črc 2018, 10:21

JJ souhlas, také bych odesílal jeden string za druhým.
cele pole mi nikdy neprošlo, nejsem dobrý programátor :-)

pokud to zlomíš, poděl se se mnou, děkuji ...

Jinak najdeš spoustu příkladů, odsud často čerpám
https://www.safaribooksonline.com/libra ... /ch04.html
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

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

Re: Jak poslat pole přes ser.port

Příspěvek od Le-Ze » 08 črc 2018, 07:26

pavel1tu píše:
07 črc 2018, 10:21
JJ souhlas, také bych odesílal jeden string za druhým.
No a není pak lepší si to v arduinu pospojovat a odeslat jako jeden string?

Serial.println(A001[0] + "!"+ A001[1] + "!"+ A001[2]);
A v druhem si napsat nějaký delimiter, který to zas rozporcuje a uloží do pole.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Jak poslat pole přes ser.port

Příspěvek od pavel1tu » 08 črc 2018, 10:11

Le-Ze píše:
08 črc 2018, 07:26
pavel1tu píše:
07 črc 2018, 10:21
JJ souhlas, také bych odesílal jeden string za druhým.
No a není pak lepší si to v arduinu pospojovat a odeslat jako jeden string?

Serial.println(A001[0] + "!"+ A001[1] + "!"+ A001[2]);
A v druhem si napsat nějaký delimiter, který to zas rozporcuje a uloží do pole.
Asi ano, ale nevíme co budeš posílat, a pokud tam budou nestandartní znaky .... - já posílal také pole a měl jsem problém na druhé straně to rozebrat :-)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Jak poslat pole přes ser.port

Příspěvek od AstroMiK » 08 črc 2018, 14:33

Le-Ze píše:
08 črc 2018, 07:26
No a není pak lepší si to v arduinu pospojovat a odeslat jako jeden string?

Serial.println(A001[0] + "!"+ A001[1] + "!"+ A001[2]);
A v druhem si napsat nějaký delimiter, který to zas rozporcuje a uloží do pole.
A nemůže pak nastat problém při větším množství přenášených dat?

Vysílací Arduino posílá data maximální možnou rychlostí (obyčejný "Serial.print()"), ale přijímací Arduino ty data musí ještě navíc zpracovávat (testovat na ukončovací znaky, přiřazovat do jednotlivých proměnných ...).
Takže příjem bude asi o trochu pomalejší, než vysílání.

Při malých objemech dat tenhle problém řeší přijímací buffer (velikost 64 bajtů), ale když je těch dat moc, tak by mohlo dojít k postupnému zahlcení toho bufferu a ztrátám v datech.

Odpovědět

Kdo je online

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