VirtualWire envoie et reçoit des chaînes d'octets, ou de char (c'est un peu pareil, à une constante près).
Il y a des infos un peu partout, par exemple ici
Si tu envoies un message du genre "M2_123" où le 2 et le 123 viennent de variables byte, il faut que tu construises ce message :
char msg[6] = {'M','*','_','*','*','*'};
msg[1] = numero_du_moteur;
msg[3] = angle/100;
msg[4] = (angle%100)/10;
msg[5] = angle%10;
vw_send((uint8_t *)msg, 6);
vw_wait_tx();
Pour vérifier, tu peux faire afficher le msg sur le console.
Il est possible qu'il faille faire (et pareil pour les autres lignes) si ça n'affiche pas comme il faut
msg[1] = numero_du_moteur+'0';
A la réception, tu dois décoder de la même manière :
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Non-blocking
{
numero_du_moteur = buf[1];
angle = buf[5] + 10*buf[4] + 100*buf[3];
}
et éventuellement
numero_du_moteur = buf[1]-'0';
angle = buf[5]-'0' + 10*(buf[4]-'0') + 100*(buf[3]-'0');
A tester...