Go Down

Topic: IPAddress et udp.write (Read 1 time) previous topic - next topic

skywodd


Par contre, je n'ai pas compris pourquoi il fallait mettre un pointeur.

Avec un pointeur ça marche mais pas avec une valeur brute ?

Pas normal ça, write() prend que deux type de paramètres :
Code: [Select]
write(byte val);
ou
Code: [Select]
write(byte* buf, int len);

L'opérateur crochet retournant un byte il ne devrait pas y avoir de problème ...

Et quand je regarde dans EthernetUDP.h :
Code: [Select]
// Write a single byte into the packet
  virtual size_t write(uint8_t);

Donc normalement ce & n'as rien à faire là ...
Tu utilise arduino 1.0.1, 1.0.2 ou 1.0.3 ?

Essaye ça :
Code: [Select]
udp.beginPacket(monBroadcast, udpPort);
for (byte i = 0; i < 4; ++i)
  udp.write((uint8_t) monIP[i]);
udp.endPacket();
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pac2Kro

#6
Jan 02, 2013, 12:10 pm Last Edit: Jan 02, 2013, 12:17 pm by Pac2Kro Reason: 1
Voici le message d'erreur à la compilation.

Code: [Select]
error: invalid conversion from 'unsigned char' to 'const uint8_t*'
error: initializing argument 1 of 'virtual size_t EthernetUDP::write(const uint8_t*, size_t)'


J'utilise l'IDE 1.0.3.

Edit:Je pense que cela vient du type de la variable IPAddress qui ne doit pas être un simple tableau de bytes.

Avec ton code, la compilation fonctionne.

skywodd


Code: [Select]
error: invalid conversion from 'unsigned char' to 'const uint8_t*'
error: initializing argument 1 of 'virtual size_t EthernetUDP::write(const uint8_t*, size_t)'


Attend ...

Tu utilise :
Code: [Select]
udp.write(monIP[i]);
ou
Code: [Select]
udp.write(monIP[i], 1);
Parce que c'est pas du tout la même chose !

La 1er version envoi un octet directement par valeur, la 2ieme version envoi un buffer.
Manisfestement le compilateur utilise la 2iéme version et non la 1er, d'où l'erreur !
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pac2Kro

Voici les resultats :

Code: [Select]
    udp.write(monIP[i],1); //compile pas
    udp.write(&monIP[i],1); //compile
    udp.write(monIP[i]); //compile
    udp.write((uint8_t) monIP[i]); //compile


donc il faut utiliser :

Code: [Select]
    udp.write(monIP[i]);

skywodd

Code: [Select]
udp.write(&monIP[i],1); //compile
Test et tu verras que ça ne marchera pas une fois exécuté ;)
Le fait de passer un pointeur va t'envoyer l'adresse (enfin une partie) du pointeur et non sa valeur.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Go Up