Invia float con libreria RCSwitch.h + modulo hc-05

buongiorno, prima di aprire il topic premetto che ho fatto del mio meglio con le ricerche online per cercare di trovare una soluzione, quindi non sentendomi in colpa chiedo aiuto alla community italiana.
sto cercando di inviare tramite la suddetta libreria una banale variabile di tipo float ma non riesco. c'è un modo con questa libreria o devo optare altro?`
esempio:

float temp = 4.5;`
myswitch.send(xxxx);

come deve essere la sintassi?

grazie mille

hai un link alla libreria?

si presa direttamente da qua

... e allora chiamiamo le cose con il LORO nome, quella è la libreria rc-switch e non myswitch che è una TUA instanza di quella libreria ... difficile che gli altri capiscono di cosa parli :roll_eyes:

Guglielmo

Se guardi il .h della libreria, vedi che il metodo send() può essere usato in due modi:

void send(unsigned long code, unsigned int length);
void send(const char* sCodeWord);

e nessuno dei due prevede l'invio di un float.

Bisogna che te la studi bene e vedi come trasformare il tuo float in un qualche cosa che la libreria può inviare.

La documentazione è in QUESTO WiKi.

Guglielmo

Ma a chi lo trasmetteresti il float? Quella libreria serve per comandare dei dispositivi che hanno un radiocomando. Mi sembra che tu possa comunque trasmettere solo cose che gli apparecchi radiocomandati possano accettare

Credo che puoi usarla anche tra un TX ed un RX a 433 ... con cui fai quello ch ti pare ... :roll_eyes:

Guglielmo

Ma in quel caso temo che il problema maaggiore non sia trasmettere, ma decodificare in ricezione. Perché non usa un modulino più serio? Un hc12 per esempio

giusta critica

si ho un trasmettitore e una ricevente 433 mhz mi sono avanzati da un altro progetto e siccome i moduli wifi nrf24 mi danno tantissimi problemi volevo provare ad utilizzare questi moduli uhf.
forse la libreria non è adatta? ne conoscete un'altra?

Ma credo che la libreria vada anche bene ... è che NON prevede i floar e quindi devi trasformare il float in qualche cosa d'altro che puoi trasmettere ... :roll_eyes:

Ad esempio, un float, su Arduino, è costituito da 4 bytes potresti fare 4 trasmissioni, una per ciascun byte e poi ricostruirlo ...

Oppure, come dice C1P8, passare a moduli più seri, tipo gli HC-12 :wink:

Guglielmo

quindi scomporrere la variabile...
come faresti?

... mai inteso parlare delle "union" in 'C' ? :slight_smile:

Guglielmo

Ma se c'è l'esigenza specifica di riutilizzare HW esistente...
Capisco
Comunque in arduino float e long int hanno la stessa dimensione
Penso quindi che non serva scomporla, basta solo castarla (oppure passarla per puntatore a sua volta castato)

... vero, non avevo notato che si può inviare un unsigned long, quindi va benissimo fare la union con tale tipo e trasmettere usando questo metodo:

void send(unsigned long code, unsigned int length);

Guglielmo

Di quante cifre intere e quanti decimali hai bisogno?
Se ci stai in un unsigned long moltiplica semplicemente per 10 / 100 / 1000 in base ai decimali che ti servono e trasmetti un intero.
Poi in ricezione dividi per 10 / 100 / 1000 e hai il tuo float.

Mmm, la parola union no effettivamente mi suonava nuova non mi sono ancora informato, probabilmente uscirebbe qualcosa di più professionale e stabile ma per ora me la sono cavata inviando vari integer.
I miei float li ho scomposti in due int parte intera e parte decimale e li ho inviati
Una trasmissione un po' lenta ma ora come ora funziona!

Pian piano cerco di perfezionarlo
Intanto ho preso anche dei hc 05 che vorrei provare, mi piacciono

sto provando hc-05
però ho sempre grossi problemi
sto andando a step, sto cercando di comunicare con lui coi comandi at, il problema è che alcuni comandi funzionano (pochissimi tipo AT, AT-name=xxx e basta) e altri no.

con l'app per android se invio qualcosa sulal seriale visualizza lettere o numeri casuali...non ne esco vivo neanche con questo modulo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.