String... mais en utilisant string (sans majuscule)

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...