Stránka 1 z 1

Arduino 433Hz komunikácia

Napsal: 15 dub 2022, 17:46
od byfo
Ahojte, prosím váš, prečo dokážem preniesť float, long, a podobne, cez struct, do druhého arduina, ale nedokážem preniesť text, aj keď píšem jeho veľkosť a podobne, stale vydadzuje chybu..

Kód: Vybrat vše

struct dataStruct{                               // Group list of variables under one name in a block of memory
  char motor;   
  float a;                           
}myData;

byte tx_buf[sizeof(myData)] = {0}; 
Slučka:

Kód: Vybrat vše

void()
[b]myData.motor="asDF text ktory chcem preniest";[/b] - tuto je najskôr chyba
myData.a= 25.12;

//odoslanie
memcpy(tx_buf, &myData, sizeof(myData) );       // Get data, data size from memory
byte Size = sizeof(myData);                     // Set Size to length of each piece of data
driver.send((uint8_t *)tx_buf, Size);           // Transmit the data
driver.waitPacketSent();                     // Wait until the transmitter completes sending                   
delay(10);
Príjem je v podstate rovnaký, myData.motor, zobrazí mi buď otáznik, alebo nič.. neviem už ako ho definovať.. skúšal som aj čísla, ale najskôr blbo..

Prosím vás, ak máte čas, pozrieť sa na to..

Re: Arduino 433Hz komunikácia

Napsal: 15 dub 2022, 19:31
od gilhad
char motor; je proměnná jménem motor a typu char - tedy jeden jediný znak dlouhá.
"asDF text ktory chcem preniest" je pole znaků, které je poměřně dlouhé a zcela jistě se nevejde do proměnné typu char.

Jedno z řešení by mohlo být nadefinovat

Kód: Vybrat vše

struct dataStruct{                               // Group list of variables under one name in a block of memory
  char motor[30];
.....
a v programu pak použít pro naplnění něco jako memcpy, strncpy, nebo cyklus (a pozor, ať si tam dáš i koncový znak \0)

Re: Arduino 433Hz komunikácia

Napsal: 15 dub 2022, 20:26
od byfo
Ahoj, ano, toto som urobil, dal som [30] do zahlavia, nedaval som ho uz ale priamo do programu... ale zabudol som dat /0..

Primac ma:

Kód: Vybrat vše

uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];      // Determine the length of msg
    uint8_t buflen = sizeof(buf);             // Set buffer to required length

    if (driver.recv(buf, &buflen)) {          // Message comming in, not blocking, checksum ok
  
        memcpy(&myData, buf, sizeof(myData)); // Get data, data size
        Serial.println(myData.motor);        // Print the received deg C temperature value
Predpokladam, ze [30], by mala byt aj tu Serial.println(myData.motor[30]); chapem to dobre prosim ta?

Uprimne, absolutne netusim kam mam pridat /0 :(

Re: Arduino 433Hz komunikácia

Napsal: 15 dub 2022, 21:25
od byfo

Kód: Vybrat vše

myData.motor[1];
int secondArray[] = {1,2,3,4,5,6,7,8,9,0,'\0'};
memcpy(myData.motor, secondArray, sizeof(secondArray));

Taketo nieco si myslel?

Re: Arduino 433Hz komunikácia

Napsal: 16 dub 2022, 00:55
od gilhad
ano, něco takového. Akorát, že int secondArray[] ti obsahuje integery (na Arduinu IMHO 2-bytové), nikoli znaky. Takže by ti to pak na přijímací straně vypsalo jen řídící kód '\1', protože za ním násloduje '\0' jakožto konec řetězce (na vysílací tam kopíruješ integer s hodnotou 1, čili byty 1 a 0. Následně podobně s 2,3,...,9, a ještě integer 0 - čili byty 0, 0 - a pak ještě jeden ( na který se převede ten char '\0').

Tedy raději

Kód: Vybrat vše

char secondArray[] = "1234567890"; 
délka řetězce je 10, délka pole je 11, protože řetězec (cokoli v uvozovkách) je automaticky ukončen znakem '\0'

Re: Arduino 433Hz komunikácia

Napsal: 16 dub 2022, 09:21
od byfo
dakujem ti, ide to, super, prosim ta kde si sa naucil rozdieli medzi tym co si popisal? aby som si ujasnil rozdiel v pojmoch, nasmerujes ma?

Re: Arduino 433Hz komunikácia

Napsal: 17 dub 2022, 08:39
od gilhad
Programování v C, nějaká starší kniha o základech, zejména jak se to ukládá do paměti a co se defautně konvertuje na co a jak.

Teda, já začínal s Pascalem (a následně TurboPascalem od Borlandu) a assemblery pro různé procesory a teprve pak se dostal k C a časem C++ a dalším jazykům (a když jich bylo opřez 30, tak jsem je přestal počítat) a pak, když jsem se dostal k Arduinu, tak jsem zjistil, že vlastně běží nad gcc v něčem jako C++, akorát si tam nejdřív doplní chybějící hlavičky tak nějak samo (a tedy ne vždy dobře) a celé je to taková trochu hodně dost spatlanina nad knihovnou Wiring (a bylo s tím dost mrzení, když to autorovi té knihovny chtěli upřít) a celá jeho filosofie je taková, no řekněme svérázná ... http://micro-corner.gilhad.cz/blog/Ardu ... _hrdi.html