Go Down

Topic: Envoie de données en UDP (Read 3 times) previous topic - next topic

armando2012

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 XD

armando2012

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: [Select]
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.

Gromain59

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

Code: [Select]
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: [Select]
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)
"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

armando2012

Code: [Select]

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  =(

armando2012

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.

Go Up