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]