getZ_OSCAddress(), Encoder, wohin mit der Adresse????

Hallo,
ich habe meine encoder in 12 (0 bis 11) teile aufgeteilt. wie bekomme ich es hin, dass ich den jeweiligen wert, der mein encoder sendet, verwenden kann?

if(encoder==rcvMes->getZ_OSCAddress(0)){
analogWrite(6,255);
analogWrite(5,0);
analogWrite(3,0);

...das soll meiner Meinung nach heißen: Wenn der encoder den Wert 0 sendet, setze Pin 6 auf 255, Pin 5 auf 0 und Pin 3 auf 0

Verstehe ich das richtig, dass ich die PWM der einzelnen Pins richtig angegeben habe, aber die Adresse des encoders (0 bis 11) nicht in die Klammer von .....if(encoder==rcvMes->getZ_OSCAddress(0)).... kommt?

Gruß Julian

Die Fehlermeldung vom Sketch

LED_Ethernet_sketch_2.cpp: In function 'void loop()':
LED_Ethernet_sketch_2:64: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:69: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:74: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:79: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:84: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:89: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:94: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:99: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:104: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:109: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:114: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()
LED_Ethernet_sketch_2:119: error: no matching function for call to 'Z_OSCMessage::getZ_OSCAddress(int)'
C:\Users\Julian\Documents\Arduino\arduino-1.0.1\libraries\Z_OSC/Z_OSCCommon/Z_OSCMessage.h:82: note: candidates are: char* Z_OSCMessage::getZ_OSCAddress()

Der Code für mein Arduino

#include <SPI.h>
#include <Ethernet.h> // version IDE 0022
#include <Z_OSC.h>

byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xFE, 0xFE, 0xED };
byte myIp[]  = { 192, 168, 178, 4 };
int  serverPort  = 8000;
byte gateway[] = { 192, 168, 178, 1 };    // ROUTER
byte subnet[] = {255, 255, 255, 0 };    // SUBNET
  

uint16_t i;
float floatValue;
Z_OSCServer server;
Z_OSCMessage *rcvMes;

void setup(){ 
 //Serial.begin(19200);
 Ethernet.begin(myMac ,myIp); 
 server.sockOpen(serverPort);
 //Serial.println("init"); 
 
 pinMode(7, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 analogWrite(3,254);
  analogWrite(5,254);
   analogWrite(6,254);
}
  
void loop(){
 if(server.available()){
   Serial.println("empfang");
   rcvMes=server.getMessage();
   
   for(i=0 ; i<rcvMes->getArgsNum(); i++){
     switch( rcvMes->getTypeTag(i) ){
       case 'f':        
         floatValue = rcvMes->getFloat(i);
          
          String encoder = "/2/encoder1";
          String LEDON = "/3/push1";
          String LEDOFF = "/3/push2";
          String blue = "/LED/fader3";
          String red = "/LED/fader1";
          String green = "/LED/fader2";
         if(blue==rcvMes->getZ_OSCAddress()){
           analogWrite(3,floatValue); 
         }
          if(red==rcvMes->getZ_OSCAddress()){
           analogWrite(6,floatValue); 
         }
         if(green==rcvMes->getZ_OSCAddress()){
          analogWrite(5,floatValue); 
        }
          if(LEDON==rcvMes->getZ_OSCAddress()){
          // ON
          digitalWrite(7,HIGH); 
         }
          if(LEDOFF==rcvMes->getZ_OSCAddress()){
          // OFF
          digitalWrite(7,LOW); 
          }
          if(encoder==rcvMes->getZ_OSCAddress(0)){
           analogWrite(6,255); 
           analogWrite(5,0);
           analogWrite(3,0);
           }
          if(encoder==rcvMes->getZ_OSCAddress(1)){
           analogWrite(6,255); 
           analogWrite(5,96);
           analogWrite(3,0);
             }
          if(encoder==rcvMes->getZ_OSCAddress(2)){
           analogWrite(6,255); 
           analogWrite(5,255);
           analogWrite(3,0);
             }
          if(encoder==rcvMes->getZ_OSCAddress(3)){
           analogWrite(6,96); 
           analogWrite(5,255);
           analogWrite(3,0);
             }
          if(encoder==rcvMes->getZ_OSCAddress(4)){
           analogWrite(6,0); 
           analogWrite(5,255);
           analogWrite(3,0);
             }
          if(encoder==rcvMes->getZ_OSCAddress(5)){
           analogWrite(6,0); 
           analogWrite(5,255);
           analogWrite(3,96);
             }
          if(encoder==rcvMes->getZ_OSCAddress(6)){
           analogWrite(6,0); 
           analogWrite(5,255);
           analogWrite(3,255);
             }
          if(encoder==rcvMes->getZ_OSCAddress(7)){
           analogWrite(6,0); 
           analogWrite(5,96);
           analogWrite(3,255);
             }
          if(encoder==rcvMes->getZ_OSCAddress(8)){
           analogWrite(6,0); 
           analogWrite(5,0);
           analogWrite(3,255);
             }
          if(encoder==rcvMes->getZ_OSCAddress(9)){
           analogWrite(6,96); 
           analogWrite(5,0);
           analogWrite(3,255);
             }
          if(encoder==rcvMes->getZ_OSCAddress(10)){
           analogWrite(6,255); 
           analogWrite(5,0);
           analogWrite(3,255);
             }
          if(encoder==rcvMes->getZ_OSCAddress(11)){
           analogWrite(6,255); 
           analogWrite(5,0);
           analogWrite(3,96);
}
       break; 
     }
   }
   
 }    
}

Als Erstes: Z_OSC ist keine Standard-Bibliothek, die mit der IDE mitgeliefert wird, also solltest Du immer einen Link auf diese Bibliotheken mitliefern, damit wir wissen, welchen Code Du verwendest.

Ich gehe davon aus, dass Du diesen Code GitHub - djiamnot/Z_OSC: OSC library, forked from http://arduino.cc/playground/uploads/Interfacing/Z_OSC.zip. So far, only fixed some typos in the code that were preventing compilation of simple sketches. verwendet hast.

das soll meiner Meinung nach heißen: Wenn der encoder den Wert 0 sendet, setze Pin 6 auf 255, Pin 5 auf 0 und Pin 3 auf 0

Ich kann Dir nicht genau sagen, was der Ausdruck zurückliefert, aber sicher nicht das, was Du erwartest. Es wird von der empfangenen Meldung die OSC-Adresse retourniert (ein String). Wenn diese gleich ist wie Dein String encoder

String encoder = "/2/encoder1";

dann werden die PWM-Ausgänge entsprechend gesetzt.

Hier ist gleich noch eine Anmerkung: Verwende die String-Klasse nicht, sie enthält Fehler, die zu Speichermangel führen und selbst wenn die Fehler korrigiert wären, ist sie für Mikrokontroller nicht geeignet, weil sie in kurzer Zeit den Speicher fragmentiert, was zu seltsamen Zuständen und unkontrollierten Resets führen kann.
Die Alternative sind einfach char-Arrays. Den Vergleich kannst Du dann mit strncmp() http://www.cplusplus.com/reference/clibrary/cstring/strncmp/ machen:

char encoder[] = "/2/encoder1";

if (strncmp(encoder, rcvMes->getZ_OSCAddress(), 11) == 0) {
  // setze Deine Ausgänge
}

habe gerade festgestellt, dass das rotary von touch osc nicht einteilbar ist.
bei drehung im uhrzeigersinn sendet es einen hohen wert, bei drehung gegen den urhzeigersinn einen niedrigen wert.

http://www.ros.org/wiki/touchosc_bridge/Controls

trotzdem danke