Suche hilfe bei Radio/Media Modul-Bau

Hallo zusammen,

ich möchte ein Modul bauen, mit dem ich dann zb. Windows Mediaplayer, Streaming-Software, usw. steuern kann.

Hierfür stehen 11 Taster sowie ein Roteryencoder inkl Taster bereit.

Bauteil und für was es zuständig ist:

Taster 1 Windows Mediaplayer
Taster 2 Winamp
Taster 3 Discord
Taster 4 Teamspeak
Taster 5 Botsoftware
Taster 6 Musikstreamingdienst
Taster 7 Zurück
Taster 8 Play
Taster 9 Pause
Taster 10 Stop
Taster 11 Vorwärts
Taster 12 Aus/ Mute ALL
Roteryencoder links rum leise rechts rum laut

Beispiel:

Ich Spiele gerade ein Spiel am PC und habe im Hintergrund den Windows Mediaplayer offen. Drücke jetzt auf Taster 1, um das Programm an zu wählen. Nun möchte ich mit den Mediatastern die Software steuern.

Nun möchte ich aber in Winamp eine hinterlegte Playlist spielen. Da das Programm noch nicht offen ist, drücke ich Taster 2, um es zu öffnen. Das Programm öffnet sich und ich möchte auch hier, wie zuvor im Mediaplayer auch, mit den Mediatasten alles Steuern.

Sollte jetzt aber zb. das Programm schon im Hintergrund offen sein, so soll es nach dem Tastendruck nicht nochmal aufgehen sondern nun in den Vordergrund geschoben werden. Anschliesend möchte ich es mit den Mediatasten steuern können.

Der Roteryencoder soll hierbei immer das Windows Mastervolumen steuern (Vol up/down/mute).

Hat jemand sinnvolle Ansätze oder Ideen dafür?

Ich packe Morgen noch den Ansatz von mir rein, möchte aber erstmal schauen ob meine Ansätze falsch waren, oder mit euren in die gleiche Richtung gehen. Damit soll erstmal alles offen gehalten werden und nicht zuviel ausgegrenzt werden.

Generell habe ich aber mit

.bat Datei
Keyboard.h
FastLED.h
RotaryEncoder.h

angefangen, aber komme nicht so recht weiter, was das Software aufrufen bzw. in den vordergrund holen betrifft.

Lg

Dee

Da wirst Du wohl entweder einen Arduino nehmen müssen, der als Tastatur arbeiten kann oder direkt ein Programm auf dem PC schreiben müssen, dass die Infos vom Arduino entgegen nimmt.

Eine entsprechende Konfiguration auf dem PC könnte evtl. die Tastendrücke in Steuerbefehle umsetzen. Ansonsten musst Du Dir auch dafür ein PC-Programm schreiben.

Wenn ich mir Deine beiden Threads so anschaue, habe ich den Eindruck, Du verzettelst Dich in für Dich derzeit zu großen Projekten.
Es kommt mir so vor, als wären auf Deiner Seite noch nicht viele Grundkenntnisse vorhanden. Wenn das so ist, solltest Du mit denen anfangen zu lernen.

Gruß Tommy

Hey Tommy,

als Arduino ist der Micro als Stand alone gewählt worden (wenn er also direkt per USB angeschlossen ist), da dieser ein Keyboard simulieren kann. Über Bus soll er als "Slave" dann einen Due ansprechen, welcher auch ein Keyboard simulieren kann.

Das ist mir schon klar.

Per .bat Datei kann ich die Softwaren aufrufen, was auch geht, aber wenn es Programme sind, die mehrfach zu öffnen gehen, öffnet er diese dann halt bei mehrfacher betätigung der (Progamm)Tasten auch mehrfach.

Weiterhin hatte ich noch die Idee per Tastenkombination dies zu realisieren.

Hierzu gab es eine Kombination, die dann zur Position wechselt (durch tabt), was aber nicht so sinnvoll ist, da die Programme nicht immer in der gleichen Reihenfolge geöffnet werden.

Alle sonstigen Funktionen sind vorhanden. Taster, Thumbsticks, Roteryencoder, Servos usw funktoinieren nur die Bus Geschichte und die Probleme in diesem Thread sind noch zu lösen.

Hier der Teilcode (noch fehlerhaft/nicht voll funktionsfähig)

#include "HID-Project.h"
#include <FastLED.h>
#include <RotaryEncoder.h>

//#define NUM_LEDS    6
//CRGB leds[NUM_LEDS];

#define ROTARY_A01 12
#define ROTARY_B01 13
#define ROTARY_C01 A2

boolean A, a, B, b, C, c;
char line[80];
int n, t;

const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
const int buttonPin6 = 7;
const int buttonPin7 = 8;
const int buttonPin8 = 9;
const int buttonPin9 = 10;
const int buttonPin10 = 11;
const int buttonPin11 = A3;

int buttonState1;
int buttonState2;
int buttonState3;
int buttonState4;
int buttonState5;
int buttonState6;
int buttonState7;
int buttonState8;
int buttonState9;
int buttonState10;
int buttonState11;

int lastButtonState1 = LOW;
int lastButtonState2 = LOW;
int lastButtonState3 = LOW;
int lastButtonState4 = LOW;
int lastButtonState5 = LOW;
int lastButtonState6 = LOW;
int lastButtonState7 = LOW;
int lastButtonState8 = LOW;
int lastButtonState9 = LOW;
int lastButtonState10 = LOW;
int lastButtonState11 = LOW;

unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
unsigned long lastDebounceTime3 = 0;
unsigned long lastDebounceTime4 = 0;
unsigned long lastDebounceTime5 = 0;
unsigned long lastDebounceTime6 = 0;
unsigned long lastDebounceTime7 = 0;
unsigned long lastDebounceTime8 = 0;
unsigned long lastDebounceTime9 = 0;
unsigned long lastDebounceTime10 = 0;
unsigned long lastDebounceTime11 = 0;

unsigned long debounceDelay = 50;
RotaryEncoder encoder(A3, A4);

void setup() {

  Serial.begin(57600);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);
  pinMode(buttonPin5, INPUT);
  pinMode(buttonPin6, INPUT);
  pinMode(buttonPin7, INPUT);
  pinMode(buttonPin8, INPUT);
  pinMode(buttonPin9, INPUT);
  pinMode(buttonPin10, INPUT);
  pinMode(buttonPin11, INPUT);

  pinMode(ROTARY_A01, INPUT_PULLUP);
  pinMode(ROTARY_B01, INPUT_PULLUP);
  pinMode(ROTARY_C01, INPUT_PULLUP);

  a = b = c = false;
  t = 0;
  n = 0;
  Consumer.begin();
  BootKeyboard.begin();

  // FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  Keyboard.begin();
}

void loop() {
  //*Taster 1*Windows Media Player - rdy

  int reading1 = digitalRead(buttonPin1);
  if (reading1 != lastButtonState1) {
    lastDebounceTime1 = millis();
  }
  if ((millis() - lastDebounceTime1) > debounceDelay) {
    if (reading1 != buttonState1) {
      buttonState1 = reading1;
      int reading = digitalRead(buttonPin1);
      if (buttonState1 == HIGH) {
        lastDebounceTime1 = millis();
        Keyboard.begin();
        delay(200);
        Keyboard.press(KEY_LEFT_GUI);
        Keyboard.press('r');
        delay(100);
        Keyboard.releaseAll();
        delay(500);
        Keyboard.print("BBWinMediaPlazer");
        Keyboard.press(KEY_RETURN);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState1 = reading1;

  //*Taster 2*Winamp

  int reading2 = digitalRead(buttonPin2);
  if (reading2 != lastButtonState2) {
    lastDebounceTime2 = millis();
  }
  if ((millis() - lastDebounceTime2) > debounceDelay) {
    if (reading2 != buttonState2) {
      buttonState2 = reading2;
      int reading2 = digitalRead(buttonPin2);
      if (buttonState2 == HIGH) {
        lastDebounceTime2 = millis();
        Keyboard.begin();
        delay(200);
        Keyboard.press(KEY_LEFT_GUI);
        Keyboard.press('r');
        delay(100);
        Keyboard.releaseAll();
        delay(500);
        Keyboard.print("BBWinAmp");
        Keyboard.press(KEY_RETURN);
        Keyboard.releaseAll();

      }
    }
  }
  lastButtonState2 = reading2;

  //*Taster 3*Discord - rdy

  int reading3 = digitalRead(buttonPin3);
  if (reading3 != lastButtonState3) {
    lastDebounceTime3 = millis();
  }
  if ((millis() - lastDebounceTime3) > debounceDelay) {
    if (reading3 != buttonState3) {
      buttonState3 = reading3;
      int reading3 = digitalRead(buttonPin3);
      if (buttonState3 == HIGH) {
        lastDebounceTime3 = millis();
        Keyboard.begin();
        delay(200);
        Keyboard.press(KEY_LEFT_GUI);
        Keyboard.press('r');
        delay(100);
        Keyboard.releaseAll();
        delay(500);
        Keyboard.print("BBDiscord");
        Keyboard.press(KEY_RETURN);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState3 = reading3;

  //*Taster 4*Teamspeak - rdy

  int reading4 = digitalRead(buttonPin4);
  if (reading4 != lastButtonState4) {
    lastDebounceTime4 = millis();
  }
  if ((millis() - lastDebounceTime4) > debounceDelay) {
    if (reading4 != buttonState4) {
      buttonState4 = reading4;
      int reading4 = digitalRead(buttonPin4);
      if (buttonState4 == HIGH) {
        lastDebounceTime4 = millis();
        Keyboard.begin();
        delay(200);
        Keyboard.press(KEY_LEFT_GUI);
        Keyboard.press('r');
        delay(100);
        Keyboard.releaseAll();
        delay(500);
        Keyboard.print("BBTeamspeak");
        Keyboard.press(KEY_RETURN);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState4 = reading4;

  //*Taster 5*Botsoftware

  int reading5 = digitalRead(buttonPin5);
  if (reading5 != lastButtonState5) {
    lastDebounceTime5 = millis();
  }
  if ((millis() - lastDebounceTime5) > debounceDelay) {
    if (reading5 != buttonState5) {
      buttonState5 = reading5;
      int reading5 = digitalRead(buttonPin5);
      if (buttonState5 == HIGH) {
        lastDebounceTime5 = millis();
        Keyboard.begin();
        delay(200);
        Keyboard.press(KEY_LEFT_GUI);
        Keyboard.press('r');
        delay(100);
        Keyboard.releaseAll();
        delay(500);
        Keyboard.print("BB_");
        Keyboard.press(KEY_RETURN);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState5 = reading5;

  //*Taster 6*Musik Streaming

  int reading6 = digitalRead(buttonPin6);
  if (reading6 != lastButtonState6) {
    lastDebounceTime6 = millis();
  }
  if ((millis() - lastDebounceTime6) > debounceDelay) {
    if (reading6 != buttonState6) {
      buttonState6 = reading6;
      int reading6 = digitalRead(buttonPin6);
      if (buttonState6 == HIGH) {
        lastDebounceTime6 = millis();
        Keyboard.begin();
        delay(200);
        Keyboard.press(KEY_LEFT_GUI);
        Keyboard.press('r');
        delay(100);
        Keyboard.releaseAll();
        delay(500);
        Keyboard.print("BB_");
        Keyboard.press(KEY_RETURN);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState6 = reading6;

Hier der Teilcode Teil 2 (noch fehlerhaft/nicht voll funktionsfähig)

//*Taster 7*zurück

  int reading7 = digitalRead(buttonPin7);
  if (reading7 != lastButtonState7) {
    lastDebounceTime7 = millis();
  }
  if ((millis() - lastDebounceTime7) > debounceDelay) {
    if (reading7 != buttonState7) {
      buttonState7 = reading7;
      int reading7 = digitalRead(buttonPin7);
      if (buttonState7 == HIGH) {
        lastDebounceTime7 = millis();
        Consumer.write(MEDIA_PREV);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState7 = reading7;

  //*Taster 8*play

  int reading8 = digitalRead(buttonPin8);
  if (reading8 != lastButtonState8) {
    lastDebounceTime8 = millis();
  }
  if ((millis() - lastDebounceTime8) > debounceDelay) {
    if (reading8 != buttonState8) {
      buttonState8 = reading8;
      int reading8 = digitalRead(buttonPin8);
      if (buttonState8 == HIGH) {
        lastDebounceTime8 = millis();
        Consumer.write(MEDIA_PLAY_PAUSE);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState8 = reading8;

  //*Taster 9*pause

  int reading9 = digitalRead(buttonPin9);
  if (reading9 != lastButtonState9) {
    lastDebounceTime9 = millis();
  }
  if ((millis() - lastDebounceTime9) > debounceDelay) {
    if (reading9 != buttonState9) {
      buttonState9 = reading9;
      int reading9 = digitalRead(buttonPin9);
      if (buttonState9 == HIGH) {
        lastDebounceTime9 = millis();
        Consumer.write(MEDIA_PAUSE);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState9 = reading9;

  //*Taster 10*stop

  int reading10 = digitalRead(buttonPin10);
  if (reading10 != lastButtonState10) {
    lastDebounceTime10 = millis();
  }
  if ((millis() - lastDebounceTime10) > debounceDelay) {
    if (reading10 != buttonState10) {
      buttonState10 = reading10;
      int reading10 = digitalRead(buttonPin10);
      if (buttonState10 == HIGH) {
        lastDebounceTime10 = millis();
        Consumer.write(MEDIA_STOP);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState10 = reading10;

  //*Taster 11*vorwärts

  int reading11 = digitalRead(buttonPin11);
  if (reading11 != lastButtonState11) {
    lastDebounceTime11 = millis();
  }
  if ((millis() - lastDebounceTime11) > debounceDelay) {
    if (reading11 != buttonState11) {
      buttonState11 = reading11;
      int reading11 = digitalRead(buttonPin11);
      if (buttonState11 == HIGH) {
        lastDebounceTime11 = millis();
        Consumer.write(MEDIA_NEXT);
        Keyboard.releaseAll();
      }
    }
  }
  lastButtonState11 = reading11;

  //*Rotary Encoder*Encoder Vol. up/down/mute

  if (millis() + 5 > t) {
    A = digitalRead(ROTARY_A01) == LOW;
    B = digitalRead(ROTARY_B01) == LOW;
    C = digitalRead(ROTARY_C01) == LOW;
    if (A && !a) {
      if (B) {
        n++;
        Consumer.write(MEDIA_VOL_UP); // Consumer.write(MEDIA_VOL_UP);
      }
      else {
        n--;
        Consumer.write(MEDIA_VOL_DOWN); // Consumer.write(MEDIA_VOL_DOWN);
      }
      //      sprintf(line, "%d\n", n);
      //      Serial.write(line);
    }
    a = A;

    if (C && ! c) {
      Consumer.write(MEDIA_VOL_MUTE); //Consumer.write(MEDIA_VOL_MUTE);
      //      sprintf(line, "!\n");
      //      Serial.write(line);
    }
    c = C;
  }
}

Auch hier wieder die Frage, in welchem Forum hättest Du denn gern in Zukunft die Antworten?

Gruß Tommy

Und auch hier.

Das ist mir generell egal, hauptsache es geht Vorwärts. Aber danke, dass du so besorgt bist. Wenn du willst, setz dich neben mich, dann können wir noch mehr raussuchen! gruß

Wenn hier schon die Antwort stünde, würde ich mich zurückhalten, wenn sie halbwegs richtig ist.

Wenn ich weiß, dass dies auch in einem andern Forum sein könnte, kann ich mir ja die Mühe machen und nachsehen, ob sonstwo schon eine Antwort ist. Oder es einfach bleiben lassen, zu antworten.

Hauptsache, irgendwer hilft dir vielleicht.

Evtl. hast du jetzt Verständnis dafür, dass crossposting dich unbeliebt macht.

Unbeliebt machen mag sein zielführend ist es trotzdem

Was glaubst du warum es mehrere Foren gibt? Weil Leute nicht in dieses oder jenes gehen, weil Forenrambos denen das versaut haben. Das ist nur der kleinste Grund. Und deswegen sehe ich es als solches als mein Recht an, dass ich mich so weit wie möglich vernetze, um damit eine Lösung zu finden. Habe ich die Lösung, wird sie auch in den anderen Foren geteilt, um so das maximum für alle raus zu holen.

Also was heult der dann so rum. Zuhause am Ende nichts zu sagen und weil er denkt das er im internet Anonym ist denn großen Molly machen. So Leute sind es die sich unbeliebt machen, nicht die, die das Wissen einzelner Foren zu einem zusammen bringen.

So zurück zum Thema wobei ganz ehrlich, warum sollte ich dann noch das neue Wissen, was mir jetzt echt geholfen hat, mit euch hier teilen?

Teillösung siehe Link:

Naja, weil ich mich nicht so kindisch anstelle wie 31er Tellerrandkings

MICDROP

Danke Für Deine Bemühungen.
Ich mach zu.
Grüße Uwe