Tastaturbefehle über Tasten und Drehgeber und LED

Moin,
Ich möchte mein altes Projekt mal etwas aufhübschen, also neu bauen.
Es gibt da einiges, das ich Haptisch optimieren möchte. Sonst würde ich es genauso wieder anschließen.
Hier hoffe ich wieder auf eure Grossartige Hilfe, ohne die ich es bestimmt nicht hinbekommen würde.

Verbessert mich bitte gerne und reichlich, wenn ich falsch liege:

Über USB sollen TASTENBEFEHLE gegeben werden. ALSO AUCH Kombinationen mit STRG und Shift und so.

Also es stehen auf der Liste:
8 Drehregler, das wurde schon mal mit sogar 10 erreicht siehe:

Dazu ca. 75 Taster
Und 6 LEDs

Für die ca 75Taster dachte ich an die PCF Expander, die in meinem MIDI Projekt schon gute Dienste erreicht haben.
5 von denen reicht ja (5 x16 = 80 )

Erste Frage:
Welchen Arduino nehme ich dafür???

Geht ein LEONARDO ?
(richtig, kein Micro!)

Der MEGA ist ja nix für Tastatur?

LG Rebecca

Und Dankeschön schon mal im Voraus.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

1 Like

Moin!

Du magst den Moderator mit dem Heli, gib's zu!

Ja, aber nicht in meiner Bastelbox.

Ja.

1 Like

Ich glaube ich fang mal damit an, was mein Ziel ist:

Die 8Drehgeber sollten Dynamisch arbeiten, also langsam drehen = Langsame Ausgabe , schnell drehen = schnelle Ausgabe
In der Regel stelle ich einen Wert von 0 bis 255 ein, ohne Dynamic drehst du dir einen Wolf. Es gibt glücklicherweise noch andere Eingabe Möglichkeiten, jedoch macht der Drehgeber so nur für feinabstimmung Sinn.
Die Taster der Drehgeber sollen auch eine Funktion haben, wenn das mit Dynamisch nicht Funktioniert, könnte man auch diese als Umschalter für schnell und langsam nehmen.

Wenn einer der 8 Drehgeber betätigt wird , soll eine LED angehen.
Diese macht man über einen festgelegten Taster wieder aus , der natürlich auch dazu ein Tastenkomando sendet.

6 Taster mit Tastenbefehlen, deren Mode mit 5 LEDs angezeigt wird . Die Zusammenhänge werde ich später noch genauer definieren.

Und ca 61 Taster für alle anderen Tastaturbefehle.

Kriegt man das alles wirklich an EINEN Leonardo?

Und...
Ist der Speicherplatz im Controller dafür überhaupt ausreichend?

LG Rebecca

Schau mal hier: Fun with Arduino 27 Rotary Encoder Recognize Slow or Fast Rotation. – Fun with Arduino

Also 30 LEDs

Wirklich eine LED und ein Taster?

1 Like

klingt so als ob jemand alle im Keller befindlichen Sachen zusammen löten will.

was hast du gegen Micro(Pro)?
Mega kann das alles, natürlich nur die Platine die mit ATMega16U2.

Nein wirklich nur 5LEDs die sich die 6Taster teilen

Also 5 plus die eine Drehgeber abhängige
Zusammen also 6!
Es werden auch die LowCarb LEDs mit nur ca.2mA je Stück

Eher LowCurrent oder willst Du die essen? :wink:

Gruß Tommy

1 Like

Na klar...
Die gelben mag ich am liebsten.
Die Grünen sind mir etwas zu bitter.
Und die roten knispern am besten...

:no_mouth:

Natürlich sindes die low Current LEDs

:wink:

Prinzipiell nichts

In dem bisherigen hab ich 2 davon verbaut.

Es geht mir dabei nur um das eingebaute "Steckbrett".

Bei dem Projekt mit dem MEGA hab ich auch den grossen genommen.
Dadurch wurde es aufgeräumter , besser in der Übersicht, beim Löten musste der nicht mal angeschlossen sein...

UND !!!
ALLE Anschlüsse sind so gesteckt.
Sollte der MEGA aus irgendeinem Grund ausfallen, habe ich einen 2ten (und Programierten) MEGA im Koffer, das ist also ggf. Ganz fix gefixt.

LG

Das geht, wenn Du den USB-Teil als HID programmieren kannst.
Die üblichen Verdächtigen Serial2USB können das nicht.
Damit bist Du entweder an Leonardo / Micro gebunden oder der 16U2 auf dem Mega wird dafür missbraucht, was aber das programmieren erschwert.
Anleitung gabs von @agmue für einen UNO, ist aber beim MEGA nicht anders.
https://forum.arduino.cc/t/anleitung-uno-als-human-interface-device-hid-tastatur/

Der Rest ist wie gehabt.
Deine Dynamik ist eine einfache Zeit / Impuls Feststellung
Also mal als Fake:
1 Impuls in 0,1 Sekunde -> Es wird ein Impuls gewertet
3 Impulse -> Es werden 5 gewertet
5 Impulse -> Es werden 10 gewertet

Somit nix unmögliches.

1 Like

Meinst Du so?

Programm mit einem Drehencoder
// getestet mit Teensy 3.2
#include <Keyboard.h>        // available when you chose Arduino Leonardo or Pro Micro or Teensy
#include <NoiascaEncoder.h>           // download library from http://werner.rothschopf.net/microcontroller/202202_noiasca_encoder_en.htm
// Change these two numbers to the pins connected to your encoder.
// avoid using pins with LEDs attached, e.g. pin 13
Encoder myEnc(2, 3);

void setup() {
  Serial.begin(115200);
  delay(5000);
  Serial.println(F("Basic Encoder Test:"));
  myEnc.begin();                       // call begin method in your setup()
}

long newPosition = 0;                 // the current value to be used in your sketch
long oldPosition = 0;                 // internal used previous value
uint16_t diff, anzZeichen;
const uint8_t SPEED0 = 3, SPEED1 = 6, SPEED2 = 9;
const uint8_t MULTI0 = 2, MULTI1 = 4, MULTI2 = 8;
const uint32_t intervall = 100;
uint32_t jetzt, vorhin = millis();

void loop()
{
  jetzt = millis();
  newPosition = myEnc.getCounter();
  if (jetzt - vorhin >= intervall)
  {
    vorhin = jetzt;
    diff = abs(newPosition - oldPosition);
    if (diff)
    {
      Serial.print(diff);
      Serial.print('\t');
      if (diff <= SPEED0)
      {
        anzZeichen = diff;
      }
      else if (diff <= SPEED1)
      {
        anzZeichen = MULTI0 * diff;
      }
      else if (diff <= SPEED2)
      {
        anzZeichen = MULTI1 * diff;
      }
      else
      {
        anzZeichen = MULTI2 * diff;
      }
      oldPosition = newPosition;
      Serial.println(anzZeichen);
      for (uint8_t j = 0; j < anzZeichen; j++)
      {
        Serial.print('-');
        //Keyboard.press(KEY_LEFT_ALT);  //   see https://www.arduino.cc/reference/en/language/functions/usb/keyboard/keyboardmodifiers/
        //Keyboard.press(KEY_LEFT_CTRL);
        Keyboard.press('r');
        Keyboard.releaseAll();
      }
      Serial.println();
    }
  }
}

Stimmt :smiley:

@rebel_tilt: Kannst Du mal mit einem Leonardo testen.

1 Like

Auch UNO und Mega können HID über V-USB.
Ohne den ATMega16U2/ATMega8U2 dafür umzuprogrammieren.

Von Arduino nicht so wirklich vorgesehen, aber mit der richtigen Lib und wenigen Bauteilen machbar.

z.B. Digispark mit seinem ATTiny85 oder USBasp mit seinem ATMega8 machen es vor.
Beide Chips können von Hause kein USB, bzw. haben keine USB Hardware eingebaut.
Müssen das vollständig in Software abhandeln

1 Like

Für den UNO sieht unoHID vielversprechend aus. Leider habe ich die Z-Dioden nicht und möchte meine USB-Anschlüsse nicht zerschießen. Der Logikanalysator zeigt kein Zucken.

Viel spannender wäre für Rebecca aber sowieso der Mega2560 mit seinen vielen Pins, aber der Name "unoHID" stimmt mich nicht optimistisch, daß diese Bibliothek auch für einen Mega2560 funktioniert.

Ganz vielversprechend klingt Learning To Use The V-USB (AVR USB Firmware) Library, doch ist das nicht für die Arduino-IDE vorgesehen. Meine Versuche scheitern schon mit "usbdrvasm16.inc: No such file or directory", obwohl die Datei im Verzeichnis vorhanden ist.

Ich benötige einen Kompaß :thinking:

1 Like

Hab mal drauf geschaut.
Das wäre eine Variante.
Die 100ms könnten gut gehen.

Ich hätte die Zeitspanne zwischen zwei Änderungen als Auswertemerkmal genommen.
Müsste man sich bestimmt genauer ansehen.

Aber wir sind uns ja einig.

:sweat_smile:

1 Like

Das drehdynamisch sieht doch schon gar nicht so schlecht aus...

Es würde mir auch nichts ausmachen 2 leonardo oder 2 micro zu nehmen.

Es muss aber mindestens zusammen auf einem:

Alle Drehgeber incl. deren Taster
,1 LED, und 1 extra Taster

Ich überlege mal Laut mit Fragen:

Am Leonardo hab ich 6 Analog und 14 Digital?

Laufen die Drehgeber auch über Expander?

Die brauchen dann 1 Expander an Tx und 1 Expander an RX?

Die Taster der Drehgeber geben GND aus? Könnten also mit anderen Tastern an einem Expander zusammen angeschlossen sein?

Wären also 2 Expander für Drehgeber, und 5 Expander für Taster...
Macht zusammengefasst 7 Digital am Leonardo in gebrauch.
Bleiben also 7 frei für 6 LEDs reicht also auch...

Hmmm..

Was bedeutet eigentlich das ~ neben der Beschriftung?

LG Rebecca

Soweit mir bekannt ist, nein.

Nein, die Expander haben I²C oder SPI als Bus-Schnittstelle, die Pins sind fix.

Ja, ja.

Der Pin kann PWM = PulsWeitenModulation.

1 Like

Wieso Nein? Ein PCF hat doch den /INT Pin wenn sich an einem der 8 od 16 Pins eine Wertänderung auftritt. Das müsste sich doch verarbeiten lassen.

1 Like

Ich korrigiere mich: Using Rotary Encoders over MCP23017(s)

Ich neige zu MCP23S17 über SPI, weil schneller, aber das müßte man probieren.