Posílaní pole znaků přes bluetooth do androidu

Odpovědět
matoushybl

Posílaní pole znaků přes bluetooth do androidu

Příspěvek od matoushybl »

Zdravím,
snažím se rozchodit komunikaci mezi arduinem a androidem, ale mám problém. Když pošlu pole znaků do androidu tak příjdou pole dvě- jedno obsahující jen první odeslaný byte a 31 nul a druhé obsahující další 2 byty a zbytek jsou nuly.
Mohli byste mi s tím prosím pomoct?
Díky

Arduino:

Kód: Vybrat vše

char data[32]={};
      
      data[0]=(char)2;
      data[1]=(char)10;
      data[2]=(char)front.Ranging(CM);
      Serial2.print(data);
Android:

Kód: Vybrat vše

final byte buffer[]= new byte[32];
							int result=fu2.getInputStream().read(buffer);
							if(result!=-1){
								Log.d("[0]", String.valueOf(buffer[0]));  //LOG zobrazí 2 a pak 10
								runOnUiThread(new Runnable(){

									@Override
									public void run() {
										// TODO Automaticky generovaný stub metody
										for(int i=0;i<buffer.length;i++)out.append("[Received]: "+String.valueOf(buffer[i])+"\n"); //write received data
									}
									
								});
hubacekp
Příspěvky: 259
Registrován: 24 úno 2013, 13:40

Re: Posílaní pole znaků přes bluetooth do androidu

Příspěvek od hubacekp »

zkus si nejdřív na PC přes USB zkontrolovat to co posíláš z arduina. Pak uvidíš, jestli no máš správně v arduinu.
Uživatelský avatar
adamh
Příspěvky: 62
Registrován: 24 úno 2013, 23:10
Bydliště: Opava / Praha
Kontaktovat uživatele:

Re: Posílaní pole znaků přes bluetooth do androidu

Příspěvek od adamh »

matoushybl píše:Zdravím,
snažím se rozchodit komunikaci mezi arduinem a androidem, ale mám problém. Když pošlu pole znaků do androidu tak příjdou pole dvě- jedno obsahující jen první odeslaný byte a 31 nul a druhé obsahující další 2 byty a zbytek jsou nuly.

Jasně. Ten systém má v sobě nějaký zásobník, který si plní přijatými znaky. Kdykoliv zavoláš InputStream.read(buffer), vyprázdní se a jeho obsah se to předá do pole. Nefunguje ale tak, že by počkala, až bude v "systémovém zásobníku" 32 bajtů - prostě jen do pole uloží vše, co v něm zrovna je (a kdyby bylo pole menší, tak v něm asi něco málo zůstane do příštího volání). Tu metodu voláš dřív, než je v zásobníku všechno, co jsi přes Bluetooth odeslal, takže to z něj dostáváš po kouscích.

Chce to udělat si nějaký mezibuffer, který ti bude tyhle fragmenty spojovat, hledat, jestli náhodou nebyla přijata celá zpráva (koukat po nějakém ukončovacím znaku, hlídat počet bajtů, ...), a tu zprávu pak zpracovávat. Mám pocit, že metoda read() ti vrátí počet přijatých bajtů, takže na tom nebude nic těžkého.
“We’re all pathetic and creepy and can’t get girls. That’s why we fight robots.” –Kripke (TBBT)
Osobní web: adamh.cz
Odpovědět