osc

bonjours,
je tente de faire un proto pour envoyer l'etat des pin digital d'un arduino mega vers un mac avec MAX MSP (language objet), via OSC

j'ai un peu pret tout et cela commence a marche mais un probleme sur laquel je calle.

voici le prog arduino:

#include <SPI.h>
#include <Ethernet.h>
#include <ArdOSC.h>

byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIp[]  = { 192, 168, 127, 11 }; //adresse du module
int destPort=12001;//port de communication idem sur max et module
byte destIp[]  = { 192, 168, 127, 10 };//adresse de l'ordinateur
String adr1, adr2 ;
char adr3;
char oscadr;
OSCClient client;
const int firstPin = 2;         // first digital input
const int inputNumber = 6;     // number of inputs

int digitalStates[inputNumber];

//create new osc message
OSCMessage mes;


void setup(){ 
  
// configure all your inputs
  for(int i = firstPin ; i < inputNumber + firstPin ; i++)
  {
    pinMode(i, INPUT);
  }
 
 Ethernet.begin(myMac ,myIp); 
 // initialize the pushbutton pin as an input:
adr1 = String("/Ard/");
adr2 = String ();


}
  
void loop(){
  //////etat des entres numerique//////

for(int i = firstPin ; i < inputNumber + firstPin ; i++)
 {
  int currentPinState = digitalRead(i);
   adr2 = adr1 +i ;
   
  char adr3[50];
  adr2.toCharArray(adr3, 50);
  
 [color=green] char oscadr[]= adr3();[/color]
  mes.setAddress(destIp,destPort);
  mes.beginMessage(oscadr);
 
  mes.addArgInt32(currentPinState);
  client.send(&mes);
  mes.flush(); //object data clear
  delay(500);
    

 }
}

le probleme est qu'il faut une adresse en char pour OSC
je doit avoir un Pb de class
mais je ne vois pas
j'ai une erreur: 'adr3' cannot be used as a function

quelqu'un peut m'aider

Edit de Jean-François : Merci de mettre le code entre les balises, le bouton avec le " # "

  char adr3[50];
  adr2.toCharArray(adr3, 50);
  
  mes.setAddress(destIp,destPort);
  mes.beginMessage(adr3);

Quand on crée un tableau

  type tableau[taille]

le nom du tableau est syntaxiquement équivalent (mais pas fonctionnellement !) à un

  char *tableau;

ok ,mais comment je peux creer mon adresse osc du genre adr/"numero de pin"/
valeur: oscadr

j'essaye comme ceci

int currentPinState = digitalRead(i);
   adr2 = adr1 +i ;
   
  char adr3[50];
  adr2.toCharArray(adr3, 50);
  
  char oscadr[]= adr3();
  mes.setAddress(destIp,destPort);
  mes.beginMessage(oscadr);

Pourquoi remets tu ton code faux que j'ai déjà corrigé ci-dessus ?
char oscadr[] = adr3(); est FAUX et ARCHI FAUX pour plusieurs raisons

adr3 est un tableau de char, donc ça n'a aucun sens de lui accoler des parenthèse qui sont l'appanage des fonctions.
char oscadr[] est une déclaration de variable illégale. Acceptable comme déclaration de paramètre de fonction, cette syntaxe n'alloue pas de variable.

la fonction int16_t OSCMessage::beginMessage( const char *_addr); attend donc comme paramètre un pointeur sur char.
Comme indiqué dans ma 1ere répondre, c'est adr3 qu'il faut passer

Tu as déjà fait :
adr1 = String("/Ard/"); --> adr1 = "/Ard/";
puis
adr2 = adr1 + i; --> adr2 = "/Ard/2" ... adr2 = "/Ard/8"
Ensuite tu copie dans un tableau de char :

char adr3[50];
adr2.toCharArray(adr3, 50);

Puis tu passes à beginMessage :

mes.beginMessage(adr3);

Par ailleurs je note aussi dans ton code

adr2 = String ();

Inutile, adr2 est déjà déclarée comme une string

le programme fonctionne parfaitement merci pour l'aide
voici le prog fini

#include <SPI.h>
#include <Ethernet.h>
#include <ArdOSC.h>
#include <UTFT.h>

byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIp[]  = { 192, 168, 127, 11 }; //adresse du module
int destPort=12001;//port de communication idem sur max et module
byte destIp[]  = { 192, 168, 127, 10 };//adresse de l'ordinateur
String adr1, adr2 ;
char adr3;
char oscadr;
OSCClient client;
const int firstPin = 2;         // first digital input
const int inputNumber = 6; // number of inputs
//pour ecran LCD
extern uint8_t SmallFont[];
UTFT myGLCD(LPH9135,6,5,2,3,4);

int digitalStates[inputNumber];

//create new osc message
OSCMessage mes;


void setup(){ 
  
// configure all your inputs
  for(int i = firstPin ; i < inputNumber + firstPin ; i++)
  {
    pinMode(i, INPUT);
  }
 
 Ethernet.begin(myMac ,myIp); 
 // initialize the pushbutton pin as an input:
adr1 = String("/Ard/");
//pour lcd
// Setup the LCD
  myGLCD.InitLCD(PORTRAIT);
  myGLCD.setFont(SmallFont);



}
  
void loop(){
 

for(int i = firstPin ; i < inputNumber + firstPin ; i++)
 {
   ////////////////////generation de l'adresse OSC//////////
  int currentPinState = digitalRead(i);
  adr2 = adr1 +i  ;
  char adr3[16];
  adr2.toCharArray(adr3, 50);
  
  ////////////////////generation du message osc////////////
  mes.setAddress(destIp,destPort);
  mes.beginMessage(adr3);
  mes.addArgInt32(currentPinState);
  client.send(&mes);
  mes.flush(); //object data clear
  
  
  ///////////////////gestion de l'affichage LCD////////////////
  myGLCD.clrScr();
  myGLCD.setContrast(0);
  myGLCD.fillScr(0,0,255);
  myGLCD.setColor(255,0,0);
  myGLCD.fillRoundRect(2, 40, 125, 88);
  myGLCD.setColor(255,255,255);
  myGLCD.setBackColor(255,0,0);
  myGLCD.print("OSC ro2 module", CENTER, 46);
  myGLCD.print("valeur de la pin",i, CENTER, 66);
  myGLCD.print("Etat",currentPinState, CENTER, 76);
  
  delay(50);

 }
}