Optimiser un code de commande série (Visca)

Merci pour le conseil, cela m'a permit d'alleger 4 fonctions qui utilisaient des if {value == 0} etc… Super !!

J'ai essayé de déclarer les variable OSC en Flash, mais apparemment la librairie Ard0SC ne le gere pas… Dans le setup si je fait ca :

  server.addCallback(F("/visca/AddressSet"),&ViscaAddressSet);

L'arduino me retourne une erreur au moment de la compilation :

osc_visca.ino: In function 'void setup()':
osc_visca:32: error: no matching function for call to 'OSCServer::addCallback(const __FlashStringHelper*, void ()(OSCMessage))'
/Users/renaudrubiano/Documents/Arduino/libraries/ArdOSC/OSCCommon/OSCServer.h:53: note: candidates are: void OSCServer::addCallback(char*, void ()(OSCMessage))

J'ai encore 7 ou 8 fois ce genre de cas dans le code que je pourrais certainement optimiser, mais je ne sais pas comment mettre plusieurs opérateurs mathématique. :

/************* Zoom Direct ****************/
void ViscaZoom(OSCMessage *_mes) {
  int value = _mes->getArgInt32(0);
  int valuea = value % 16; 
  int valuebZ = value >> 4; 
  int valuecZ = value >> 8; 
  int valuedZ = value >> 12; 
  int valueb = valuebZ % 16  ; 
  int valuec = valuecZ % 16 ; 
  int valued = valuedZ % 16 ; 
  ViscaLongMsg[3] =  0x47;
  ViscaLongMsg[4] =  valued;
  ViscaLongMsg[5] =  valuec;
  ViscaLongMsg[6] =  valueb;
  ViscaLongMsg[7] =  valuea;
  Serial.write( ViscaLongMsg, sizeof(ViscaLongMsg) );
}

J'avais essayé cela, mais cela ne fonctionnait pas, les %16 n'étaient pas pris en compte pour lesvariables valueb valuec et valued :

[code]/************* Zoom Direct ****************/
void ViscaZoom(OSCMessage *_mes) {
  int value = _mes->getArgInt32(0);
  int valuea = value % 16; 
  int valueb = value >> 4 %16; 
  int valuec = value >> 8 %16; 
  int valued = value >> 12 %16; 
  ViscaLongMsg[3] =  0x47;
  ViscaLongMsg[4] =  valued;
  ViscaLongMsg[5] =  valuec;
  ViscaLongMsg[6] =  valueb;
  ViscaLongMsg[7] =  valuea;
  Serial.write( ViscaLongMsg, sizeof(ViscaLongMsg) );
}

[/code]