J'ai regardé le code qu'il y a dans le forum anglais.
En supposant que tu as utilisé la même routine de récupération "collect3()" je vois que pour afficher la vitesse en binaire il fait :
//WIND SPEED
for (int i =17 ; i> 8 ; i--){
Serial.print( ((data[i] == 48)? 0 : 1) );
}
Donc les bits format la valeur de la vitesse sont stockées de [9] (poids faible puisqu'il l'affiche en dernier) à [17] (poids fort affiché en premier).
Donc pour créer un nombre décimal à partir des bits [8] à [17] je te propose :
int bit;
uint bit_val = 1;
int vitesse = 0;
for( bit = 9 ; bit <= 17 ; ++bit, bit_val <<= 1 )
if ( data[bit] == '1' )
vitesse += bit_val;
Le bit de poids faible [9] a pour poids 1, le suivant à pour poids 2 etc....
On lit donc la chaine du bit de poids faible au bit de poids fort en commençant par bit_val valan 1.
A chque bit, bit_val est multiplié par 2 puisque dans un nombre écrit en binaire :
bn ... b2 b1 b0
vaut
Somme ( bi * (2^i) )
Si on reprend l'exemple donné ici :
http://www.rd-1000.com/chpm78/lacrosse/Lacrosse_TX23_protocol.htmlAvec :

Si tu compte les bits du message de 0 en partant de la gauche, la vitesse est bien du bit 9 au bit 17, sans compter les 3 bits suivants qui sont d'après lui toujours à 0.
Ensuite il dit :
Wind Speed decoding:
The wind speed is sent under 9 bits (actually 12 but the last 3 are always 0), LSB first. The LSB value is 0,1m/s or 0,36km/h
Donc le code que je te donne ci-dessus permet de récupérer la vitesse en unités de 0,1m/s.
Par exemple :
110010000
Les bits à 1 sont b0, b1 et b4
Soit vitesse = 1 + 2 + 16 = 19 = 1,9 m/s
Est-ce plus clair maintenant ?