Arduino 433Hz komunikácia

Odpovědět
byfo
Příspěvky: 25
Registrován: 13 srp 2020, 11:25
Reputation: 0

Arduino 433Hz komunikácia

Příspěvek od byfo » 15 dub 2022, 17:46

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..

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

Re: Arduino 433Hz komunikácia

Příspěvek od gilhad » 15 dub 2022, 19:31

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)

byfo
Příspěvky: 25
Registrován: 13 srp 2020, 11:25
Reputation: 0

Re: Arduino 433Hz komunikácia

Příspěvek od byfo » 15 dub 2022, 20:26

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 :(

byfo
Příspěvky: 25
Registrován: 13 srp 2020, 11:25
Reputation: 0

Re: Arduino 433Hz komunikácia

Příspěvek od byfo » 15 dub 2022, 21:25

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?

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

Re: Arduino 433Hz komunikácia

Příspěvek od gilhad » 16 dub 2022, 00:55

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'

byfo
Příspěvky: 25
Registrován: 13 srp 2020, 11:25
Reputation: 0

Re: Arduino 433Hz komunikácia

Příspěvek od byfo » 16 dub 2022, 09:21

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?

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

Re: Arduino 433Hz komunikácia

Příspěvek od gilhad » 17 dub 2022, 08:39

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

Odpovědět

Kdo je online

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