Hi Community (Endcoder Problem)

Guten Abend,

evtl kann mir einer von euch helfen :o , nach Stundenlanger Suche Youtube etc. wollte ich euch mal fragen.

Folgendes möchte ich umsetzten:

Vorhanden:
Arduino UNO Mini Leonardo
Rotary Encoder
usw.

Ich möchte mit einem Rotary Encoder eine USB Tastatur erstellen

UP
Down
Enter

Dieses sollte mit Encoder.h Keyboard.h gehen. Ich habe das mit Button umgesetzt das geht natürlich ohne Probleme aber ich finde ein Rotary Encoder besser für mein Projekt.

Ich raffe es einfach nicht dieses umzusetzen, könnte mir einer bitte helfen

Rotary Encoder
Anschüsse
CLK
DT
SW
+
GND

Hallo,

haste denn schon die Bsp. der Encoder Lib durch?

Der Rotary Encoder KY-040

Jo, gibt haufenweise Beispiele für die Encoder.

Und ich hab mir geschworen: das ist der letzte Eintrag den ich lese, bei dem im Titel nicht wenigstens ansatzweise das Thema angerissen wird :angry:

Aber wenigstens kam eine freundliche Begrüßung, ist ja auch nicht mehr selbstverständlich :confused:

Du schreibst Du hättest bereits einen Encoder.
Welchen Encoder hast Du?

Grüße Uwe

Klaus_ww:
Und ich hab mir geschworen: das ist der letzte Eintrag den ich lese, bei dem im Titel nicht wenigstens ansatzweise das Thema angerissen wird :angry:

Aber wenigstens kam eine freundliche Begrüßung, ist ja auch nicht mehr selbstverständlich :confused:

Du hast mein volles Verständnis. Ich finde manchmal übel, wie sehr Leute davon ausgehen, dass man versteht, was sie meinen, obwohl sie nicht einmal fähig zu sein scheinen, eine ordentliche Frage zu stellen.

Andererseits weiß ich, wie sehr man „neben der Kappe“ sein kann, wenn sich der Kopf gerade zu 100 % um die Sache dreht, die man vor sich liegen hat und wenn man nicht weiß, dass es nicht nur den Uno, sondern noch ein paar hundert andere Arduinos/Nachbauten/Shields und sonstwas gibt. Und wenn einem eine Frage gerade unter den Nägeln brennt, hat man selten die Geduld oder den Nerv, erst einmal ein bisschen mitzulesen und sich in diejenigen hineinzuversetzen, die helfen könnten.

Also ... einerseits ist es zum Kotzen, andererseits sind Idioten und Arschlöcher wie das Wetter: Einfach „da“. Außerdem ist bald wieder Sommer und die Eisdielen geöffnet :slight_smile:

Gruß

Gregor

Hi,

danke für das Feedback :slight_smile:

das ist der Endcoder

Mini

https://cdn.shopify.com/s/files/1/0122/7558/0986/products/leonardo-pro-micro-atmega32u4-arduino-bootloader-ide-1-0-3-replace-mini-expansion-shield-module-diymore_1_519_1024x1024.jpg?v=1534402892

Ich müsste halt wissen wie ich den anschließe und wie ich den Sketch aufbaue.

Hier hatte ich was ähnliches gefunden, ist aber nicht Basiert auf einem USB keybord

Evtl ist das ein Ansatz

#include <Keypad.h>
#include <Keyboard.h>


#define ENABLE_PULLUPS
#define NUMROTARIES 4
#define NUMBUTTONS 25
#define NUMROWS 5
#define NUMCOLS 5


//define the symbols on the buttons of the keypads
char buttons[NUMROWS][NUMCOLS] = {
 {'q','w','e','r','t'},
 {'y','u','i','o','p'},
 {'a','s','d','f','g'},
 {'h','j','k','l','z'},
 {'x','c','v','b','n'},
};



struct rotariesdef {
 byte pin1;
 byte pin2;
 int ccwchar;
 int cwchar;
 volatile unsigned char state;
};

rotariesdef rotaries[NUMROTARIES] {
 {0,1,KEY_RIGHT_ARROW,KEY_LEFT_ARROW,0},
 {2,3,KEY_DOWN_ARROW,KEY_UP_ARROW,0},
 {4,5,KEY_PAGE_UP,KEY_PAGE_DOWN,0},
 {6,7,KEY_HOME,KEY_END,0},
};

#define DIR_CCW 0x10
#define DIR_CW 0x20

#define R_START 0x0
#define R_CW_FINAL 0x1
#define R_CW_BEGIN 0x2
#define R_CW_NEXT 0x3
#define R_CCW_BEGIN 0x4
#define R_CCW_FINAL 0x5
#define R_CCW_NEXT 0x6

const unsigned char ttable[7][4] = {
 // R_START
 {R_START,    R_CW_BEGIN,  R_CCW_BEGIN, R_START},
 // R_CW_FINAL
 {R_CW_NEXT,  R_START,     R_CW_FINAL,  R_START | DIR_CW},
 // R_CW_BEGIN
 {R_CW_NEXT,  R_CW_BEGIN,  R_START,     R_START},
 // R_CW_NEXT
 {R_CW_NEXT,  R_CW_BEGIN,  R_CW_FINAL,  R_START},
 // R_CCW_BEGIN
 {R_CCW_NEXT, R_START,     R_CCW_BEGIN, R_START},
 // R_CCW_FINAL
 {R_CCW_NEXT, R_CCW_FINAL, R_START,     R_START | DIR_CCW},
 // R_CCW_NEXT
 {R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START},
};


byte rowPins[NUMROWS] = {21,20,19,18,15}; //connect to the row pinouts of the keypad
byte colPins[NUMCOLS] = {14,16,10,9,8}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS); 



void setup() {
 Keyboard.begin();
 rotary_init();
}



void loop() { 

 CheckAllEncoders();

 CheckAllButtons();

}


void CheckAllButtons(void) {
 char key = buttbx.getKey();
 if (key != NO_KEY)  {
   Keyboard.press(KEY_LEFT_CTRL);
   Keyboard.press(KEY_LEFT_ALT);
   Keyboard.press(key);
   delay(150);
   Keyboard.releaseAll();
 }//Keyboard.write(key);
}


/* Call this once in setup(). */
void rotary_init() {
 for (int i=0;i<NUMROTARIES;i++) {
   pinMode(rotaries[i].pin1, INPUT);
   pinMode(rotaries[i].pin2, INPUT);
   #ifdef ENABLE_PULLUPS
     digitalWrite(rotaries[i].pin1, HIGH);
     digitalWrite(rotaries[i].pin2, HIGH);
   #endif
 }
}

unsigned char rotary_process(int _i) {
  unsigned char pinstate = (digitalRead(rotaries[_i].pin2) << 1) | digitalRead(rotaries[_i].pin1);
 rotaries[_i].state = ttable[rotaries[_i].state & 0xf][pinstate];
 return (rotaries[_i].state & 0x30);
}

void CheckAllEncoders(void) {
 for (int i=0;i<NUMROTARIES;i++) {
   unsigned char result = rotary_process(i);
   if (result) {
     Keyboard.write(result == DIR_CCW ? rotaries[i].ccwchar : rotaries[i].cwchar ); 
   }
 }
}

nowin:
Ich müsste halt wissen wie ich den anschließe und wie ich den Sketch aufbaue.

Das steht beim Link in #2!

gregorss:
Außerdem ist bald wieder Sommer und die Eisdielen geöffnet :slight_smile:

Danke für den Trost, wenn meine Antworten schon ignoriert werden :smiling_imp: