Ciao a tutti, voglio trasmettere il valore di un potenziometro (da 0 a 1023), con la libreria VirtualWire per i classici modulini a 433MHz.
Come posso trasmetterli, dato che la libreria supporta soltanto array di char a 8 bit?
Grazie in anticipo
nid69ita grazie per avermi risposto, ma il tuo post è sparito. Lo riporto qui sotto:
0-1023 ovvero un numero int (word), quindi 2 byte (1 char è 1 byte)
Puoi usare lowByte() e highByte() per spezzare il valore int in 2 byte, metterlo in array di char e spedirlo
http://arduino.cc/en/Reference/LowByteCon word(h,l) lo rimetti insieme
word() - Arduino Reference
Ok, sono riuscito e ho scritto un piccolo sketch per provare le 2 funzioni:
byte bitAlto=0;
byte bitBasso=0;
int numero=0B1010100011; //corrisponde a 675
int unione=0;
void setup() {
Serial.begin(9600);
bitBasso=lowByte(numero);
bitAlto=highByte(numero);
Serial.println(numero,DEC);
Serial.println(bitBasso,BIN);
Serial.println(bitAlto,BIN);
unione= int(word(bitAlto,bitBasso)); //unisce i 2 byte e converte in variabile int
Serial.println(unione);
}
void loop() {
//non c'è niente da eseguire all'infinito!
}
Sorry, l'ho cancellato per un motivo. Secondo me non credo ti possa funzionare con VirtualWire. ![]()
VirtualWire è questo? VirtualWire: VirtualWire library for Arduino and other boards
E quindi il comando per spedire questo?
uint8_t vw_send (uint8_t *buf, uint8_t len)
Questo comando non ti permette di spedire dati che non siano testo. Alcuni valori spediti non rientrano tra 65 (A) e 90 (Z) o comunque tra i valori 32 e 128 e possono essere interpretati come caratteri speciali. Ad esempio 0 di solito è il terminatore di stringa (vettore di char). Secondo me è meglio se utilizzi la conversione da int a testo e spedisci i numeri come testo. Poi quando li ricevi li riconverti. Puoi usare la snprint()
char buf[5]; // 4 numeri + fine stringa
snprintf(buf,5,"%04d",tuovaloreint); // spedisce sempre 4 cifre, esempio 123=>0123
vw_send(buf,strlen(buf));
In ricezione puoi usare atoi(), converte da testo a intero.
Ah, perchè?