Rotary Encoder als scrollrad

Hi

Ich würde gerne einen Rotationsencoder als scrollwheel benutzen.

jetzt wäre meine frage wie ich das realisieren kann

meinen Leonardo habe ich als keyboard eingerichtet.

wie bekomme ich den quadrature sketch dazu das er mir das er mir das als mousemove macht?

habe mich shon müde gegoogelt und irgendwie nix passendes gefunden was ich verwenden könnte und so gut bin ich noch nicht das ich mir das komplettalleine zusammen klabustern kann.

hat da jemand eine idee?

vielen dank schonmal

Was ist denn dein Problem?

combie:
Was ist denn dein Problem?

Dass er nicht weiß, wie er das realisieren kann?

Gruß

Gregor

Ja, das wird es sein....

Aber er/sie/es hat doch schon alles da:

  1. Encoder Sketch
  2. Maus/Tastatur Emulator Sketch
  3. Leonardo
  4. Arduino IDE

ok, eins fehlt wohl noch: Kenntnis über die verwendete Sprache, C++.

Aber da weiß ich gerade nicht wie ich da helfen könnte.
Klar, mir hilfts, wenn ich C++ lerne.....
Aber das hilft doch unserem neox666x nicht aufs Pferd, wenn ich C++ lerne.

Mit Mouse.move() - Arduino Reference . Der 3. übergebene Parameter sind die Schritte des Wheelrades. Mögliche Werte von -128 bis 127
Grüße Uwe

combie:
Klar, mir hilfts, wenn ich C++ lerne.....

Lerne lieber ein paar Dinge über Kommunikation.

Gruß

Gregor

gregorss:
Lerne lieber ein paar Dinge über Kommunikation.

Hmm ....

Und, was schwebt dir da so vor?

combie:
Und, was schwebt dir da so vor?

Irgendetwas zum Thema „Lesen und verstehen eines Textes“. Vielleicht weiß einer der Mitlesenden, was es dazu gibt.

Gruß

Gregor

Hi...

Das Problem liegt darin das ich nur was finde das ich es als Serial print ausgeben kann und wenn ich Das aber als Mouse Scrolling machen will ich nix finde wie der befehlsablauf sein sollte.

Button Mouse steuerung hilft da nicht weiter .... und über Einbindung eines Scroll Rades findet man so gut wie gar nix drüber.....

Den oben angegebenen link hatte ich auch schon gefunden nur geht es da anscheinend auch nur über die x und y Achse.... aber keine Definition wie sich das Rad verhalten soll ....

Das scrollrad soll als "analog plunger" fungieren in meinem vpin.

Mechanischen weg als digitales Signal umsetzen. Im gleichen Maß wie das scrollrad einer Maus da dieses Software seitig vom Programm unterstützt wird.

Ich hab erst angefangen mit dem arduino Kram.....

Danke für eure hilfe

Hier ein Beispiel zur bereits von Uwe erwähnten Anweisung (#4)

void setup() {
  Mouse.begin();
  delay(6000);
  Mouse.move(0, 0, 50);  // usage: Mouse.move(xVal, yPos, wheel); 
  delay(2000);
  Mouse.move(0, 0, -50);
}

void loop() {
  // bleibt leer
}

Da wird das Mausrad um 50 Schritte nach oben "gedreht" und nach 2 Sekunden dann wieder 50 Schritte nach unten.
Das funktioniert bei mir mit einem Leonardo oder Micro ausgezeichnet.
Um zu sehen ob das funktioniert muss natürlich ein Fenster/Programm aktiv sein, wo das Drehen des Mausrades eine Auswirkung zeigt. :slight_smile:

Hi

Das ist ja schonmal was .....
Aber er soll sich nicht automatisch zurück drehen sondern eine vorwärts/rückwärts Bewegung machen je nach weg.....

Mal schauen ob ich das umbauen das Script.. ...

Danke dir....

neox666x:
Aber er soll sich nicht automatisch zurück drehen sondern eine vorwärts/rückwärts Bewegung machen je nach weg.....

Ja, das ist ja auch nur ein Beispiel und ein wenig darst du schon selbst auch machen :wink:

neox666x:
Den oben angegebenen link hatte ich auch schon gefunden nur geht es da anscheinend auch nur über die x und y Achse.... aber keine Definition wie sich das Rad verhalten soll ....

Das scrollrad soll als "analog plunger" fungieren in meinem vpin.

Mechanischen weg als digitales Signal umsetzen. Im gleichen Maß wie das scrollrad einer Maus da dieses Software seitig vom Programm unterstützt wird.

Ich hab erst angefangen mit dem arduino Kram.....

Danke für eure hilfe

Vieleicht solltest Du Dein Problem besser umreisen.
Wie mouse.move funktioniert habe ich Dir aufgezeigt. Genau so wie uxomm das macht. Wie Du Dein Eingabesignal in einen Wegstrecke umrechnest must Du programmieren.
Wenn Du mit meinen Infos nicht weiterkommst vieleicht fehlen Dir da das Basiswissen über C-Programmierung.

Grüße Uwe

So hier mal das script ..... hab aber irgendwo noch ein Fehler drin......
......expected '}' at end of input.........
aber den find ich auch noch

#include <Keyboard.h>
#define ENCODER_DO_NOT_USE_INTERRUPTS
#include <Encoder.h>
#include <Mouse.h>

Encoder myEnc(A0, A1);

  // Variables will change:
long previousMillis = 0;        // will store last time LED was updated
 
// Distance to scroll
long scrollDistance = 0;
int sensitivity = 1;
 
// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 300;           // interval at which to blink (milliseconds)
 
// Number of buttons to handle
const int buttonsCount = 12;

// Arduino PINs to use
const int pins[buttonsCount] = {
    0,
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    10,
    11
    
};

// Keys to send (order has to match the pins array)
const byte keys[buttonsCount] = {
    64,
    65,
    66,
    67,
    68,
    69,
    70,
    27,
    72,
    73,
    74,
    75
};

bool status[buttonsCount] = {HIGH};

void setup() {
    for (int i = 0; i < buttonsCount; ++i) 
        pinMode(pins[i], INPUT);
    
  Keyboard.begin();
  //Serial.begin(9600);
  //Serial.println("Basic NoInterrupts Test:");
 
  // Mouse on/off
 // pinMode(4, INPUT);
 // digitalWrite(4, HIGH);
}
long position  = -999;

void loop() {
    for (int i = 0; i < buttonsCount; ++i) {
        const int pinStatus = digitalRead(pins[i]);
        if (pinStatus != status[i]) {
            status[i] = pinStatus;
            if (pinStatus == LOW) {
                Keyboard.press(keys[i]);
            } else {
                Keyboard.release(keys[i]);
            
        
  unsigned long currentMillis = millis();
  long newPos = myEnc.read();
 
  if(currentMillis - previousMillis > interval) {
    // Last interval time
    previousMillis = currentMillis;  
   
    //Serial.println("Interval reached");
    //Serial.println(scrollDistance);
   
    scrollDistance = newPos;
   
    // Send scroll distance to computer
    scrollDistance = scrollDistance * sensitivity;
   
    // Scroll mouse if connected
    // if(digitalRead(4) == HIGH)
    {
      Mouse.begin();
      Mouse.move(0,0, scrollDistance);
    }
  } else 
      Mouse.end();
    }
        
        
    // Reset scroll position
    myEnc.write(0);
        }
        }
        //Serial.println(scrollDistance);

Es fehlt ein Teil des Sketches oder die letzte Klammer.
Du kannst die Pins 0 und 1 nicht als Eingänge verwenden wenn Du auch die serielle Schnittstelle verwenden möchtest.
Du mußt sicherstellen daß der Wert des Skrollrades nicht über 255 geht da ansonsten Schritte verlorengehen.
Es ist nicht sinvoll dauerdn Mouse.begin und Mouse.end zu machen.

long previousMillis = 0; muß "unsigned long" Variable sein.

Grüße Uwe