Variable global qui reste égale à zero

Bonjour à tous,

Petits travaux avec OSC en ce moment, et un problème dont je ne connais la cause se pose à moi:

Je récupère une valeur OSC sans problème (int "Value"), dans une fonction. J'affiche "value" avec le moniteur série, ça fonctionne parfaitement. J'ai préalablement déclaré au début du programme une int "valeurOSC", qui était sencé me sortir la valeur de value de la fonction (int valeurOSC = value dans la fonction), pour que je puisse l'utiliser dans tout le programme, or... ça ne fonctionne pas, car en retournant dans le loop, "valeurOSC" est toujours égale à zéro...
Voici mon code, j'ai volontairement retiré toutes les choses inutiles à la compréhension du problème (notamment les questions d'Ethernet pour l'OSC, mais la reception fonctionne correctement puisque "value" me renvoie la bonne valeur OSC...)

int valeurOSC;

void setup(){}

void loop(){
  OSCMsgReceive(); 
  Serial.println(valeurOSC);
} 

void OSCMsgReceive(){
  OSCMessage msgIN;
  int size;
  if((size = Udp.parsePacket())>0){
    while(size--)
      msgIN.fill(Udp.read());
    if(!msgIN.hasError()){
      msgIN.route("/value",funcValue);
    }
  }
}

void funcValue(OSCMessage &msg, int addrOffset ){

int value = msg.getFloat(0);

  Serial.print("Value = : ");
  Serial.println(value);
  valeurOSC = value;

}

L'un de vous a t-il la solution du mystère?

Merci d'avance pour votre aide,

Bonne journé

Bonjour
Tu es sur que funcValue est appelée ?

Hello!

Merci pour ta réponse rapide!

funcValue est bien appelée car j'ai un retour en Serial ( Serial.println(value):wink: qui fonctionne bien, et que je demande dans cette même fonction...

hello
je ne comprends pas:
msgIN.route("/value",funcValue);

alors que:funcValue est une fonction qu’il faut appeler avec des parametres
void funcValue(OSCMessage &msg, int addrOffset ){

bonjour,
il serait bien de reprendre l'exemple de OSC en mettant aussi tout le code

ou

Merci à tous pour vos réponses!

dfgh:
hello
je ne comprends pas:
msgIN.route("/value",funcValue);

alors que:funcValue est une fonction qu'il faut appeler avec des parametres
void funcValue(OSCMessage &msg, int addrOffset ){

Effectivement je ne comprends pas bien moi même à vrai dire, mais j'ai suivi la doc ( quasi similaire à ce que propose infobarquee ci dessus d'ailleurs), et il semble qu'un evenement osc déclenche cette fonction?
En tout cas, cela fonctionne car je reçoit l'OSC sans problème, il s'affiche si j'écris la valeur avec le port série dans la fonction funcValue, seulement impossible d'extraire cette valeur OSC de cette fonction...

infobarquee:
bonjour,
il serait bien de reprendre l'exemple de OSC en mettant aussi tout le code
arduino-osc/udpBasics.ino at master · davidbouchard/arduino-osc · GitHub
ou
arduino-osc/serialBasics.ino at master · davidbouchard/arduino-osc · GitHub

J'ai suivi cette doc similaire, et encore une fois ça fonctionne, mais la librairie n'est peut etre pas faite pour extraire les données des fonctions? Par exemple ici dans ton lien de doc, si je voulais extraire "value" de la fonction "myFunction", normalement d'après moi il suffirait de creer une variable globale, et de l'assigner dans cette fonction à la valeur de "value", c'est ce qu'il me semble avoir fait dans mon programme initial, mais sans succès...

Dans la mesure où cette variable est modifiée hors de tout contrôle de loop(), ne faudrait-il pas la déclarer volatile

fdufnews:
Dans la mesure où cette variable est modifiée hors de tout contrôle de loop(), ne faudrait-il pas la déclarer volatile

Essayé ce matin, et ça fonctionne! C'était bien ça, il fallait la déclarer volatile!
Merci beaucoup!