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

Bonjour à tous!!

Je suis en train de réaliser un drone et je galère un peu: pour lui faire passer des infos complexe, j'utilise virtualWire et donc, des informations en String qui ensuite doivent être décodées par mon drone.

Manque de bol, virtualWire utilise des informations en bytes donc le String d'arduino ne fonctionne pas, puisque ce sont des chaînes de caractère donc.

J'ai donc demandé de l'aide sur le forum international, voici mon post: https://forum.arduino.cc/index.php?topic=546603.0

mais j'ai un peut de mal à comprendre comment appeler l'objet string et non String... dois-je juste déclarer :

"string blablabla;" ?

auriez vous des tuttos pour mieux comprendre tout cela, je suis perdu là?

Merci à quiconque pourrait m'aider! :)


EDIT (j'ai oublié d'expliqué le projet): Mon drone est un drone sous marin, donc j'ai besoin de fréquence radio, car cela passe bien mieux que le wifi pour l'eau.

Ensuite, j'ai deux arduino, l'un émetteur(branché à l'ordi) l'autre récepteur (le drone). Je sélectionne donc les informations que j'envoie (par exemple les positions de ses moteurs etc... qui sont au degré près).

Pour cela je dois pouvoir lui dire "moteur2 à 124°" par exemple.

Donc j'envoie un String lui indiquant "M2_124" Et en la déconstruisant, par substring et toInt(), à lui demander ce que je veux.

Les communications passent bien, mais c'est le substring que je n'arrive pas à établir car ce que je reçois est une sorte d'array de char qui passe pas pour un vrais string dans la fonction String() propre au framework arduino.

Je cherche donc un moyen de décomposer cette phrase "M2_124", car j'ai vraiment besoin d'être précis et de ne pas y aller en manuel.

Sauf que... J'ai appris arduino à la dure et n'ai pas assez de compétences pour comprendre cette histoire clairement, me voila bien perdu :(

Bonsoir,
Bon c’est pas mon domaine, mais c’est quand-même pas bien clair.
Quel genre d’informations passent?
Si ce sont toujours les mêmes, suffit d’un switch pour faire d’une variable une autre.
Il fait quoi ton arduino? Il est où l’arduino ? dans le drone? Tu parles de faire communiquer un module avec arduino? ça doit se trouver

Bien sur, je suis allé bien vite en besogne:

Mon drone est un drone sous marin, donc j'ai besoin de fréquence radio, car cela passe bien mieux que le wifi pour l'eau.

Ensuite, j'ai deux arduino, l'un émetteur l'autre récepteur (le drone). Je sélectionne donc les informations que j'envoie (par exemple les positions de ses moteurs etc... qui sont au degré près).

Pour cela je dois pouvoir lui dire "moteur2 à 124°" par exemple.

Donc j'envoie un String lui indiquant "M2_124" Et en la déconstruisant, par substring et toInt(), à lui demander ce que je veux.

Les communications passent bien, mais c'est le substring que je n'arrive pas à établir car ce que je reçois est une sorte d'array de char qui passe pas pour un vrais string dans la fonction String() propre au framework arduino.

Je cherche donc un moyen de décomposer cette phrase "M2_124", car j'ai vraiment besoin d'être précis et de ne pas y aller en manuel.

Sauf que... J'ai appris arduino à la dure et n'ai pas assez de compétences pour comprendre cette histoire clairement, me voila tout perdu :'(

Cela t'éclaire un peu?

Marsat: Bien sur, je suis allé bien vite en besogne:

Mon drone est un drone sous marin, donc j'ai besoin de [u]fréquence radio[/u], car cela passe bien mieux que le wifi pour l'eau.

ET la question est 8) : c'est quoi ton ensemble émetteur/recepteur qui passe mieux que le WIFI ? ;)

Liens ?, photos ? :grin:

La "comm" sous marine "wireless" , ça ne s'improvise pas ... vraiment passé qq ... mètres

Ce qu'il ne faut pas faire Ca, ça s'essaie.

La transmission impose un type de variable. Tu veux lire cette variable comme si c'était un autre type. M'enfin je pense que ça vient de là. C'est exactement le genre d'erreurs que je fais :grin:

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

Artouste: ET la question est 8) : c'est quoi ton ensemble émetteur/recepteur qui passe mieux que le WIFI ? ;)

Liens ?, photos ? :grin:

La "comm" sous marine "wireless" , ça ne s'improvise pas ... vraiment passé qq ... mètres

433hz classique en fait ^^, mais t'inquiète c'est en piscine, et surtout... ben le signal radio est imposé, donc pas le choix :)

Concernant la photo, disons que c'est ceci, mais version miniature et sous marine : http://masss.fr/ ;) (vus le machin, tu comprends donc que le code risque d'être trèèèèèèès long).

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

Je teste ça des ce weekend (le M2 est juste un nom, pas une variable haha), en tout cas c'est beaucoup plus clair, merciiiii !!!!!