Pages: 1 [2]   Go Down
Author Topic: Envoie de données en UDP  (Read 3110 times)
0 Members and 1 Guest are viewing this topic.
Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

regarde l'exemple UDPSendReceiveString.ino, et tu verras que:

Code:
  // start the Ethernet and UDP:
  Ethernet.begin(mac,192, 168, 1, 40);
est foireux.

Il faut donc quelque chose comme:
Code:
IPAddress monIP(192, 168, 1, 40); // ip de l'arduino
Ethernet.begin(mac,monIP);

Ensuite:

Code:
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
n'a pas de sens, puisque dans l'exemple c'est l'information d'IP et port du message reçu. Or tu n'en as pas dans ton cas.

Il faut donc quelque chose comme:
Code:
IPAddress remoteIP(192, 168, 1, 177); // ip du serveur
Udp.beginPacket(remoteIP, 9999);
pour lui indiquer quel est l'IP et le port de la cible (ton serveur)

Gromain
Logged

"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

je n'avais pas vu, mais tu as 2 fois "Ethernet.begin" dans le setup(). il n'en faut qu'un.
Garde uniquement:

Code:
Ethernet.begin(ipLocal, passerelle, masque);

Logged

"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour la remarque je n'est pas fait attention  smiley-lol
Toujours aucun changement au niveau de Wireshark. Tout a l'heure j'ai eu quelques trames sur Wireshark ( la source était Arduino.cc et la destination était mon pc en 192.168.1.59 alors qu'elle est censé être 192.168.1.26).
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est bon la carte Arduino communique avec le serveur  smiley-grin mais l'action ce fait continuellement, le bouton poussoir n'est pas pris en compte j'ai l'impression.
Logged

Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

cool que ça marche.

Pour le bouton, il faut une soit une résistance de pull-up soit une pull-down.

Si tu utilises une pull-up (interne ou externe), alors le niveau sera HIGH quand le bouton n'est pas pressé.

http://arduino.cc/en/Tutorial/DigitalPins

Note que tant que tu appuieras sur le bouton, la trame sera envoyée. Il faudra prévoir un mécanisme soft pour ne prendre en compte qu'une seule fois par appui.
Logged

"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok merci, je vais bosser sur la fonction LOW du bouton car je me retrouve avec 10000 repères sur le serveur c'est ennuyant smiley-lol
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pourrais-tu m'éclairer sur la commande qui va permettre lors de l'appui sur le bouton poussoir, d'envoyer le paquet et d'arrêter l'envoie quand on relâche le bouton. Avec la commande il envoie le paquet 1 fois et ne le renvoie pas si il est pressé une autre fois  smiley-roll
Code:
void loop() {

 
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // check if the pushbutton is pressed.     
    if (buttonState == HIGH);
 
 IPAddress remoteIP(192, 168, 1, 26); // ip du serveur
    Udp.beginPacket(remoteIP, 9999);
    Udp.write("label: debut");
    Udp.endPacket();
     
    if (buttonState == LOW);
     Udp.endPacket();

je pense qu'il n' y a pas de boucle.
Logged

Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

il va falloir que tu te mettes au C pour comprendre un minimum ce que tu codes et t'en sortir seul smiley-wink

Code:
Udp.endPacket();
ne fait pas ce que tu penses qu'il fait (http://arduino.cc/en/Reference/Ethernet)

Il faut simplement que tu mémorises que tu as envoyé le message, et tu reset le flag une fois le bouton relaché. Si le flag est vrai, alors tu n'envoies pas le message.

Code:
boolean memo = false; // variable globale, à placer en tete du code
IPAddress remoteIP(192, 168, 1, 26); // ip du serveur, tu peux le placer en tete du code également

void loop() {

 
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed et que la commande n'est pas envoyée
if (buttonState == HIGH &! memo ){

Udp.beginPacket(remoteIP, 9999);
Udp.write("label: debut");
Udp.endPacket();

memo=true; // on memorise que la commande a été envoyée
}

if (buttonState == LOW){
memo=false; // on remet à zéro le flag
};

il est possible que sur appui il envoie plusieurs fois le message à cause de possible rebonds du contact. Dans ce cas temporise un peu avant de relire l'entrée (100ms)
Logged

"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
boolean memo = false; // variable globale, à placer en tete du code

void setup() {
  //---- initialise la connexion Ethernet avec l'adresse MAC du module Ethernet, l'adresse IP Locale
//---- l'adresse IP de la passerelle internet et le masque du réseau local
Ethernet.begin(ipLocal, passerelle, masque);
delay(1000); // donne le temps à la carte Ethernet de s'initialiser

  IPAddress (192, 168, 1, 40); // ip de l'arduino
 
  Udp.begin(8888);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {

 
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // check if the pushbutton is pressed.     
    if (buttonState == HIGH &! memo);
      {
 
 IPAddress remoteIP(192, 168, 1, 26); // ip du serveur
    Udp.beginPacket(remoteIP, 9999);
    Udp.write("label: debut");
    Udp.endPacket();
    memo=true; // on memorise que la commande a été envoyée
      }
  if (buttonState == LOW); {
  memo=false; // on remet à zéro le flag
   delay(100);
  }
 }
   


toujours le même problême  smiley-cry
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je pense que le problème vient de ma commande qui ne dit pas à la carte Arduino d'arrêter d'envoyer des paquets quand le serveur en a reçu un. C'est pour cela qu'il en envoie continuellement.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Problème résolue merci à toi Gromain. smiley-grin
Logged

Pages: 1 [2]   Go Up
Jump to: