Encoder im zusammenführen (Array)

Hallo zusammen,

kann mir jemand sagen wie ich die nachfolgenden Encoder zusammen packe:

Encoder enc100 (48, 49);
Encoder enc101 (46, 47);
Encoder enc102 (50, 51);

so? Encoder enc = {{48,49},{46,47},{50,51}};

hi,

falls Du meinst, wie man ein zweidimensionales array initialisiert, hier ein beispiel (rheinwerk):

/* 4 Zeilen 5 Spalten */
int Matrix[4][5] = { {10,20,30,40,50},
                     {15,25,35,45,55},
                     {20,30,40,50,60},
                     {25,35,45,55,65}};
gruß stefan

Das ist kein zwei-dimensionales Array, sondern ein Array aus Objekten

Ist zwar ein eindimensionales Array aus Encoder Objekten, die jeweils zwei Parameter beim Definieren brauchen, geht aber trotzdem so, denke ich.

Alternativ sollte auch

Encoder elist[] = { Encoder(12,13),  Encoder (14,15) };

sich übersetzen lassen.

Hallo,

also meine Glaskugel sagt das sind 3 Instanzen einer Klasse. Die kann man nicht zusammenwürfeln.

Doc_Arduino:
Hallo,

also meine Glaskugel sagt das sind 3 Instanzen einer Klasse. Die kann man nicht zusammenwürfeln.

Natürlich kann man Instanzen in ein Array stopfen.
Macht sogar Sinn!
Ins besondere, wenn man drüber weg iterieren möchte.

Encoder enc[] = {
                  Encoder(48, 49),
                  Encoder(46, 47),
                  Encoder(50, 51),
                };

Hallo,

jetzt geht mir ein Licht auf ... :slight_smile: , wie Micha schon schrieb, auch wenn ich im Moment davon kein Gebrauch mache.

hi,

Das ist kein zwei-dimensionales Array, sondern ein Array aus Objekten

oh! encoder ist ein objekt, kein variablentyp. warum sagt denn das keiner?

gruß stefan

Nein. Encoder ist eine Klasse. enc100, etc. sind Objekte, bzw. Instanzen der Klasse

naja, nomenklatur, alles vereinbarungssache... :slight_smile:

also gut, ein objekttyp.

hab ich so versucht

#define ENCODER_DO_NOT_USE_INTERRUPTS
#include <Encoder.h>

Encoder enc[] = {
                  Encoder(42, 43),
                  Encoder(44, 45),
                  Encoder(46, 47),
                  Encoder(48, 49),
                };
/*/
Encoder enc100 (42, 43);
Encoder enc101 (44, 45);
Encoder enc102 (46, 47);
Encoder enc103 (48, 49);
/*/

byte controlChange = 176;
byte controllerENCNummer [] = {100,101,102,103};
byte encoderWert [4] = {0};
byte newPos [4] = {0};

void setup() {
   
  Serial.begin(9600);
  Serial1.begin(31250);
}

 byte position[8]  = {0};
 
 
void loop() {

     encoder(0);
     encoder(1);
     encoder(2);
     encoder(3);
  
      
}
   void encoder (byte x) {   
            
   newPos[x] = enc[x].read();
   encoderWert[x]  = newPos[x] % 128 ;
    
          if (newPos[x] != position[x]) {   position[x] = newPos[x];  
             sendeMIDI(controlChange, controllerENCNummer[x], encoderWert[x]);
    
                                                     }     }  




 void sendeMIDI(int statusByte, int dataByte1, int dataByte2)  {
 Serial1.write(statusByte);
 Serial1.write(dataByte1);
 Serial1.write(dataByte2);

}

aber bei der Abfrage habe ich ab Encoder 101 immer 2 Encoder gleichzeitig.
Heißt Encoder 100
Encoder 100+101
Encoder 101+102
Encoder 102

aber nicht
Encoder 100
Encoder 101
Encoder 102
Encoder 103

Aber bei der einfachen Abfrage die ich nach dem // stehen habe, funktioniert das.

Aber ich finde den Fehler nicht.

Das ist wieder mal ein Fall wie man ein Array aus structs verwenden sollte. Statt mehrere unabhängige Arrays