Arduino Micro scroll Funktion

Hallo,

Ich hab einer Adruino (Genuino) Micro und ich benötige einen Sketch womit ich mit einer Poti (kein Joystick bitte) die scroll funktion am PC bedienen kann.

als alternative :

mit Poti (nicht Joystick) die yAxis von der mauszeiger bewegen, da muss aber eine press funktion mit eingebaut werden so bald ich der poti bewege und wenn der poti zum stehen kommt sofort ein press relese.

Wäre super wenn mir jemanden helfen könnte;-)) Ich möchte virtuelle knopfe am bildschirm mit dem Poti bedienen können und die nit mit dem maus.

Bitte keine andere lösungen anbieten...;))) wie midi oder powermate.... ich weis genau was ich benötige.

Vielen Dank,

Tal

Hallo,

wenn du die Basics durchgehst, Bsp. der IDE oder hier auf der Seite oben unter Learning, dann biste dem ganz schnell ganz nah.

talfish:
Bitte keine andere lösungen anbieten....

Wieso anbieten ?
Wir verkaufen hier doch nix.

Doc_Arduino:
wenn du die Basics durchgehst, Bsp. der IDE oder hier auf der Seite oben unter Learning, dann biste dem ganz schnell ganz nah.

Bei den Beispielen der IDE seien dir die Beispiele unter 03.Analog und 09.USB wärmstens empfohlen. Damit sollte es leicht gelingen das gewünschte selbst zu programmieren.
Hilfreich ist diese Tabelle: https://www.arduino.cc/en/Reference/KeyboardModifiers

Mit Mouse.move kann man auch das Scrollrad einer Maus simulieren: Mouse.move() - Arduino Reference

hi,

vom leonardo (das ist glaube ich der arduino, der eine maus simulieren kann) abgesehen, schau Dir mal autoIt an. das ist eine script-software, die (unter vielem anderen) mausaktionen simuliert und auch ein serielles signal vom arduino lesen kann.

gruß stefan

Danke an euch alle für eure tips.
Das mit dem Mouse mit Joystick kontrolieren hab ich natürlich schon probiert. Das problem ist das Joystick, konstruktionbedigt, immer automatisch zu mitte zurück geht. Ein potie bleibt immer wo der grade ist. Ich hab nicht hin bekommen die "reset" funktion aus zuschalten und der curser dazu zu bringen in relation zu poti zu bewegen. Auserdem könnte ich leider nicht einer der "Axis" funktion ins "Wheel" um zu schreiben.

@ Hot Systems, "Anbieten" kann man auch was kostenlos, wie "tips" Anbieten, "Hilfe" Anbieten etc.;)))) wenn man was Anbietet heißt das nicht dass es um Bezahlung geht.

es wäre super wenn jemanden die Zeit hat mir zuhelfen.....

talfish:
@ Hot Systems, "Anbieten" kann man auch was kostenlos, wie "tips" Anbieten, "Hilfe" Anbieten etc.;)))) wenn man was Anbietet heißt das nicht dass es um Bezahlung geht.

Ahh, ok. Das wusste ich nicht.

Dann zeig uns doch mal, was du bisher geschrieben hast, dann können wir dir evtl. weiter helfen.

;-)))

bis jetzt habe ich ausschlißlich den sketch von Tom Igoe "JoystickMouseControl" probiert und hab versucht parametern zu ändern ohne erfolg.

Funktioniern tut es aber wie gesagt ich muss immer den poti zu mitte drehen um den curser zu stehen zu bringen und ich verstehe nicht wie ich einer der Achsen ins wheel (Scroller) umwandeln kann. Ich kann noch nich wirlich programieren. Ich fang grade erst an damit.

LG,
Tal

talfish:
Ich kann noch nich wirlich programieren. Ich fang grade erst an damit.

ja, dann trifft doch genau das zu, was Doc_Arduino in Post #1 schon geschrieben hat.

Du zeigst uns keinen Sketch, so können wir nicht helfen.

Oder möchtest du, das wir für dich programmieren, ohne das du etwas lernen möchtest ?

Hallo,

mein gut gemeinter Rat. Fang mit einfachen Dingen wie analoges einlesen an. Nimm keine fertigen Projektcodes, verstehste ja eh noch nicht. :slight_smile: Nicht böse gemeint. Nimm die IDE Bsp. oder kauf dir ein Buch. Probiere viel rum mit einfachen Dingen. Ich mache seit Jahren nicht anders. Ich konzentriere mich auf eine Sache bis ich es verstanden habe. Dann kommt das nächste. Wenn viele kleine Dinge verstanden sind, kommt eine große Idee was ich machen könnte. Dabei entstehen neue Probleme. Die werden geklärt bis es verstanden ist, dann wird am großen weitergemacht. So nach und nach kennt man immer mehr kleine Zutaten. Die man dann später verwendet in allen erdenklichen Kombinationen. Und man lernt nie aus. Es wird immer was geben wo es klemmt. Meistens sind es dann Ideen zur Umsetzung. Dann reicht ein Wink mit der Richtung und weiter gehts. Irgendwann kann man dann auch fremden Code lesen. Wobei es da auch viele Schreibweisen geben kann. Wie gesagt man lernt nie aus und es wird immer mehrere Lösungen geben. Aber die Hauptsache ist und bleibt das man seinen eigenen Code versteht.

Nein natürlich nicht;-)) aber Ich bin davon ausgengenen dass ihr alle der "JoystickMouseControl" Sketch kennt.... Ich kann es aber gerne hier nochmal zeigen:

Ich hab probiert statt "const int xAxis = A0;", "const int wheel = A0;". Ich gehe davon aus das ich auch beim "int xReading = readAxis(A0);" wheel irgend wo einsetzen muss aber ich weiß nicht genau wie.

Auch beim:

int threshold = range / 4; // resting threshold
int center = range / 2; // resting position value

hab ich verschidene Werte versucht ohne erfolg.

Danke nochmal im vorraus.

#include "Mouse.h"

// set pin numbers for switch, joystick axes, and LED:
const int switchPin = 2;      // switch to turn on and off mouse control
const int mouseButton = 3;    // input pin for the mouse pushButton
const int xAxis = A0;         // joystick X axis
const int yAxis = A1;         // joystick Y axis
const int ledPin = 5;         // Mouse control LED

// parameters for reading the joystick:
int range = 12;               // output range of X or Y movement
int responseDelay = 5;        // response delay of the mouse, in ms
int threshold = range / 4;    // resting threshold
int center = range / 2;       // resting position value

boolean mouseIsActive = false;    // whether or not to control the mouse
int lastSwitchState = LOW;        // previous switch state

void setup() {
pinMode(switchPin, INPUT);       // the switch pin
pinMode(ledPin, OUTPUT);         // the LED pin
// take control of the mouse:
Mouse.begin();
}

void loop() {
// read the switch:
int switchState = digitalRead(switchPin);
// if it's changed and it's high, toggle the mouse state:
if (switchState != lastSwitchState) {
  if (switchState == HIGH) {
    mouseIsActive = !mouseIsActive;
    // turn on LED to indicate mouse state:
    digitalWrite(ledPin, mouseIsActive);
  }
}
// save switch state for next comparison:
lastSwitchState = switchState;

// read and scale the two axes:
int xReading = readAxis(A0);
int yReading = readAxis(A1);

// if the mouse control state is active, move the mouse:
if (mouseIsActive) {
  Mouse.move(xReading, yReading, 0);
}

// read the mouse button and click or not click:
// if the mouse button is pressed:
if (digitalRead(mouseButton) == HIGH) {
  // if the mouse is not pressed, press it:
  if (!Mouse.isPressed(MOUSE_LEFT)) {
    Mouse.press(MOUSE_LEFT);
  }
}
// else the mouse button is not pressed:
else {
  // if the mouse is pressed, release it:
  if (Mouse.isPressed(MOUSE_LEFT)) {
    Mouse.release(MOUSE_LEFT);
  }
}

delay(responseDelay);
}

/*
reads an axis (0 or 1 for x or y) and scales the
analog input range to a range from 0 to <range>
*/

int readAxis(int thisAxis) {
// read the analog input:
int reading = analogRead(thisAxis);

// map the reading from the analog input range to the output range:
reading = map(reading, 0, 1023, 0, range);

// if the output reading is outside from the
// rest position threshold,  use it:
int distance = reading - center;

if (abs(distance) < threshold) {
  distance = 0;
}

// return the distance for this axis:
return distance;
}

Hallo,

nicht jeder kennt jedes Bsp. Ich dachte dein Code wäre sonst woher. Aber ich kann das Bsp. gar nicht kompilieren. Die Lib ist vorhanden, der Name stimmt auch, aber die Lib wird angemeckert. Sollte beim original Bsp. nicht passieren. Der Bsp. Code ist in meinen Augen leider, warum auch immer, gerade an Deiner Stelle etwas fehlerhaft. Deine angesprochene Variable xAxis und yAxis existiert im weiteren Sketch überhaupt nicht. Ist also nicht relevant. Sollte bestimmt in Zeile 71 und 72 Verwendung finden. Statt dessen wurden die Pins nochmal direkt geschrieben.

Du könntest ändern in, dann macht die Variablen Deklaration auch Sinn.

// read and scale the two axes:
int xReading = readAxis(xAxis);
int yReading = readAxis(yAxis);

Den Variablennamen xAxis und yAxis kannste beliebig ändern, mußte nur überall machen.

talfish:
Funktioniern tut es aber wie gesagt ich muss immer den poti zu mitte drehen um den curser zu stehen zu bringen und ich verstehe nicht wie ich einer der Achsen ins wheel (Scroller) umwandeln kann. Ich kann noch nich wirlich programieren. Ich fang grade erst an damit.

Beschäftige dich mit dem Befehl Mouse.move. Eine minimale Umstellung im Sketch und es dürfte so ziemlich das machen, was du suchst...

Hallo, @ Doc_Arduino:

ist das ein unterschied ob:

int xReading = readAxis(xAxis);
int yReading = readAxis(yAxis);

oder:

int xReading = readAxis(A0);
int yReading = readAxis(A1);

?

da oben steht doch:

const int xAxis = A0;
const int yAxis = A1;

dann ist doch zum Bsp. "A0" und "xAxis" ein und das selbe oder denk ich Fasch?

@Theseus:

"xReading" ist ja klar aber wie soll es beim wheel stehen? "wheelReading"???? und dann:

Deklariern zum Bsp.:

"const int wheelAxis = A2;"

und unter "Loop":

"int wheelReading = readAxis(wheelAxis);"

"Mouse.move(xReading, yReading, wheelReading);" ????

bin ich in der richtiger Richtung?????

Vielen dank an euch alle;-)))

talfish:
bin ich in der richtiger Richtung?????

Bist in der richtigen Richtung unterwegs.

Du kannst erstmal auch testen:

Mouse.move(xReading, 0, yReading);

Dann ist das y-Poti fürs Scrollen zuständig.

Hallo,

genau, Richtung stimmt. :slight_smile: Du kannst dann schreiben int xReading = readAxis(xAxis);
Der Sinn dahinter ist, die Einstellung wird als konstant übergeben, besser für den Compiler, und du kannst oben im Sketch einfacher Deine Einstellungen ändern und mußt nicht den ganzen Code durchgehen wenn du kleine Änderungen vornehmen möchtest.

Also jetzt funktioniert es mit dem scrollen aber leider nur schlagartig nach ober oder nach unten ohne zwischen positionen. falls jemaden ein tip hat wo kann ich es dazu bringen nur im relation zum poti position zu bewegen ist willkommen;-))

Ich werde aber parallel dazu eine neue "Konzept" starten:

der poti mit "sensorValue" und "analogRead" auslesen und irgend wie mit "mouseMove" und "WheelRead" es an der scroller weiter geben.... Wie genau ist noch offen;-))) Hilfe erwünscht;-))

So wie bei der"AnalogInput" Sketch:

int sensorPin = A0;
int ledPin = 13;
int ledPin2 = 12;
int sensorValue = 0;

void setup() {

pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
}

void loop() {

sensorValue = analogRead(sensorPin);

digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2,LOW);

delay(sensorValue);

digitalWrite(ledPin, LOW);
digitalWrite(ledPin2,HIGH);

delay(sensorValue);
}

wo der "Delay" Zeit von der Spannung die an das Poti abfählt abhängig ist möchte ich die Position der Scroll bestimmen....

P.S.
Den Sketch habe ich mit eine zweite LED modifiziert für Pingpong Effekt...

Danke... und viele Grüße aus Osnabrück.

Hallo,

Code bitte in Code Tags. Button oben links </>. Auch nachträglich noch möglich.

Wegen der relativen Position. Merke dir mit einer Variablen die aktuelle Position und rechne dann mit den Differenzen zu dieser und aktualisiere die "Zwischenvariable" nach deren Nutzung wieder. Ist das gleiche Prinzip wie mit millis wenn man damit backt und kocht. :slight_smile: Nur das du nicht millis zwischen speicherst sondern deinen Potiwert.
Theseus erklärt millis()
http://forum.arduino.cc/index.php?topic=400102.msg2752141#msg2752141

Hallo Leute, es hat etwas gedauert und am Ende habe ich mich doch für den "Encoder" Lösung.
Dafür habe ich einer Sketch modifiziert der ich gefunden habe. Der Original Sketch ist von Tim:
http://www.tim.id.au/limejuice/volume-control-with-arduino-leonardo/.

Alle Funktioniert mit eine Aussnahme un zwar, wenn ich damit einen Fader steuern möchte läuft es ganz gut aber wenn es um einer Drehe knopf geht, funktioniert es nur bis der cursor der "Press" Bereich verläst.

ich hab einer kleine Filmchen vorbereitet: - YouTube

Kann jemanden Helfen? hier ist mein Sketch (ich hab die relevante Bereich in Rot markiert):

#include <Mouse.h>

const int encoderA = 2;
const int encoderB = 3;

int position = 0; 
int volume = 0;
int encoderState = LOW; 
int encoderLastState = LOW; 

[color=red]void raiseVolume()
  { position++;
  Mouse.press();
  Mouse.move(0, 10, 0);
  delay(10);
  Mouse.release();
  }

void lowerVolume()
  {
  if (position > 0) 
    position--;
  Mouse.press();
  Mouse.move(0, -10, 0);
  delay(10);
  Mouse.release();
  }[/color]

void printStatus()
  {
  Serial.print("Position: ");
  Serial.print(position);
  Serial.print(", volume: ");
  Serial.print(volume);
  Serial.println("%");
  }

void setup()
  {
  pinMode(encoderA, INPUT);
  digitalWrite(encoderA, HIGH);
  pinMode(encoderB, INPUT);
  digitalWrite(encoderB, HIGH);
  Mouse.begin();
  Serial.begin(9600);
  }

void loop()
  {
  
  encoderState = digitalRead(encoderA);
  if (encoderLastState == LOW && encoderState == HIGH) 
    {
    if (digitalRead(encoderB) == LOW)
      lowerVolume();
    else 
      raiseVolume();
    
    
    printStatus();
    }
  encoderLastState = encoderState;
  
  
  
  }