Posílání více "položek" komunikací pomocí STRUCT

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, ...)
Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Posílání více "položek" komunikací pomocí STRUCT

Příspěvek od pavel1tu » 22 črc 2020, 15:21

Nemám to jak vyzkoušet, ale tak jak máš nadefinovaný STRUCT v odesílací části, nadefinuješ v přijímací.

Tak jak jsi odeslal
rf95.send((uint8_t *)&packet, sizeof(radiopacket));
// nechce se mi prolézat příklady, nemá to být rf95.send(packet, sizeof(radiopacket));
pokud je to správně a něco to odešle,

tak stejně přijmeš
rf95.recv(packet, sizeof(radiopacket))

pak by se to mělo dát rozrřídit
Serial.println(packet.stav);
Serial.println(packet.kod);
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Cenda608
Příspěvky: 16
Registrován: 21 úno 2018, 11:16
Reputation: 0

Re: Posílání více "položek" komunikací pomocí STRUCT

Příspěvek od Cenda608 » 22 črc 2020, 15:51

Tohle jsem zkoušel a skončím s chybovou hláškou

Kód: Vybrat vše

note: candidates are: virtual bool RH_RF95::recv(uint8_t*, uint8_t*)
Funkce recv funguje takhle https://www.airspayce.com/mikem/arduino ... a5fca0579a

Obsah zkopíruje asi jako byty do paměti (v tomhle se nevyznám) a asi by tedy stačilo to nějak překopírovat do radiopacket?

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

Re: Posílání více "položek" komunikací pomocí STRUCT

Příspěvek od pavel1tu » 22 črc 2020, 23:59

Celý tvuj kod nevím,
jednou jsem dle netu testoval RF95 na stole, pak z toho kamarád udělal meteostanici, používáme tam pro zjednodušení RHDatagram manager. Našel jsem to kdysi dávno jako příklad na netu, pak už nepoužil.
Kod není celý, vymazal jsem display, vyčítání čidel atd.
Není tam inicializace a nastavení RF95 a nevím jak staré ty knihovny byly
Je tam jak vysílání tak příjem

třeba to pomůže a asi tam jsou překlepy, jsem na dovolené a rovnám to tu na tabletu

Kód: Vybrat vše

#include <RHReliableDatagram.h>
#include <RH_RF95.h>

#define MY_ADDRESS      3
#define SERVER_ADDRESS  2

//Nastaveni RF95 a další
WEATHERDATA data;
unsigned long startMilli,stopMilli;
const float FREQ = 915.0;
RH_RF95 rf95;
RHDatagram manager(rf95, MY_ADDRESS);

typedef struct WEATHERDATA {  //data jak odesílaná, tak přijímaná
  float temp;
  float hum;
  float windSpeed;
  char windDir[2];
};

//uložení dat do struktury
  data.temp = xxxxxx;
  data.hum = xxxxxx;
  data.windSpeed = xxxxx;
  strcpy(data.windDir, "E");  //příklad odesílání znaku
  
//odesílání dat všetně výpisu jak dlouho to trvalo
startMilli = millis();
  if (!manager.sendto((uint8_t *) &data, sizeof(data), SERVER_ADDRESS))
    Serial.print("Transmit failed");
  rf95.waitPacketSent(100);                  // wait 100 mSec max for packet to be sent
  stopMilli = millis();
  Serial.print("Transmission time (mSec) = ");
  Serial.println(stopMilli-startMilli);
  Serial.println();
  
//prijem dat
  startMilli = millis();
  if (rf95.waitAvailableTimeout(100))        // wait 100 mSec max for response
  { 
    uint8_t bufLen = sizeof(data);
    if (manager.recvfrom((uint8_t *) &data, &bufLen))
    {
      stopMilli = millis();
      Serial.print("Response time (mSec) = ");
      Serial.println(stopMilli-startMilli);      
    }
  else
    Serial.println("Timed out waiting for response");
  Serial.println();
}

//přijaté proměnné
        Serial.println(String(data.temp,1));
        Serial.println(String(data.hum,1));
        Serial.println(String(data.windSpeed,0));
        Serial.println(String(data.windDir));
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Cenda608
Příspěvky: 16
Registrován: 21 úno 2018, 11:16
Reputation: 0

Re: Posílání více "položek" komunikací pomocí STRUCT

Příspěvek od Cenda608 » 24 črc 2020, 08:15

Díky za rady, ale nějak mi to nefunguje, budu na tom pracovat a když to dám dohromady, tak se pochlubím.

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

Re: Posílání více "položek" komunikací pomocí STRUCT

Příspěvek od pavel1tu » 24 črc 2020, 10:23

Cenda608 píše:
24 črc 2020, 08:15
Díky za rady, ale nějak mi to nefunguje, budu na tom pracovat a když to dám dohromady, tak se pochlubím.
No, nemám doma (dnes jsem dorazil) žádný modul z rodiny RFM, abych to s tou knihovnou RH_RF95.h otestoval.
Pohledám na netu ten příklad na meteostanici, odkud to kamarád kdysi použil.
Pak nahodím.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Cenda608
Příspěvky: 16
Registrován: 21 úno 2018, 11:16
Reputation: 0

Re: Posílání více "položek" komunikací pomocí STRUCT

Příspěvek od Cenda608 » 26 črc 2020, 14:12

Problém vyřešen!
Použil jsem jinou knihovnu, konkrétně https://github.com/sandeepmistry/arduino-LoRa která posílá data jinak než ta původní RadioHead.

Vysílač:

Kód: Vybrat vše

LoRa.beginPacket();
LoRa.write((uint8_t*)&packet, sizeof(radiopacket));
LoRa.endPacket();
Přijímač:

Kód: Vybrat vše

int packetSize = LoRa.parsePacket();
  
if (packetSize) {
LoRa.readBytes((uint8_t *)&packet, packetSize);
//zpracování dat
}
Díky za nakopnutí ;)

Odpovědět

Kdo je online

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