Arduino soll 6 Buttons schalten

Hallo Leute,
ich habe versucht meinen Ersten Code zu schreiben, doch weiß ich nicht warum er nicht funktioniert.

Auf Taste 1 soll STRG+1
Auf Taste 2 soll STRG+2
Auf Taste 3 soll STRG+3
Auf Taste 4 soll STRG+4
Auf Taste 5 soll F10
und auf Taste 6 Soll Enter
ausgelöst werden.

Bis jetzt gibt er diese Befehle nicht zurück.

Hier mal der Code.
Für Hilfe wäre ich dankbar.

Hardware ist ein Pro Micro ATmega32U4

#include "Keyboard.h"
#include "HID.h"

char ctrlKey = KEY_LEFT_GUI;
void setup() 
{
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);

  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);

  Keyboard.begin();
  delay(1000);
}

void loop() 
{
  if (digitalRead(3)   == LOW) { 
  Keyboard.press(MODIFIERKEY_CTRL); //501DO
  Keyboard.press(KEY_1)
  Keyboard.releaseAll(); 
  delay(250);
  }
  else if (digitalRead(4)  == LOW) { 
  Keyboard.press(MODIFIERKEY_CTRL); //501MO
  Keyboard.press(KEY_2)
  Keyboard.releaseAll();
  delay(250);  
  }
  else if (digitalRead(5) == LOW) {
  Keyboard.press(MODIFIERKEY_CTRL); //Cricket
  Keyboard.press(KEY_3)
  Keyboard.releaseAll();
  delay(250);
  }  
  else if (digitalRead(6) == LOW) {
  Keyboard.press(MODIFIERKEY_CTRL); //Splitscore
  Keyboard.press(KEY_4)
  Keyboard.releaseAll();
  delay(250);
  }  
  else if (digitalRead(7) == LOW) {
  Keyboard.press(KEY_F10); //Start
  Keyboard.releaseAll();
  delay(250);
  }  
  else if (digitalRead(8) == LOW) {
  Keyboard.press(KEY_Enter); //Enter
  Keyboard.releaseAll();
  delay(250);
  }
}

Hallo,
jeder der hier neu ist und eine Frage stellt, braucht Hilfe.
Das musst du nicht extra betonen.

Also ändere deinen Beitragstitel, damit jeder gleich sehen kann, wo dein Problem liegt.
Damit bekommst du sicher mehr Hilfe und deine Frage wird besser gefunden.

Und beschreibe auch was dein Sketch machen soll und was er bisher nicht macht.

HotSystems:
Hallo,
jeder der hier neu ist und eine Frage stellt, braucht Hilfe.
Das musst du nicht extra betonen.

Also ändere deinen Beitragstitel, damit jeder gleich sehen kann, wo dein Problem liegt.
Damit bekommst du sicher mehr Hilfe und deine Frage wird besser gefunden.

Und beschreibe auch was dein Sketch machen soll und was er bisher nicht macht.

Habe es jetzt angepasst.

Also ich habe ein Holzpanel mit 6 Knöpfen. Diese sollen unterschiedliche Funktionen, bzw. Tastenkombinationen senden an meinen PC via USB.

Ich habe den Code jetzt angepasst, doch irgendwo ist der Wurm drin.

#include "Keyboard.h"
#include "HID.h"

char ctrlKey = KEY_LEFT_GUI;
void setup()
{
 pinMode(2, INPUT);
 pinMode(3, INPUT);
 pinMode(4, INPUT);
 pinMode(5, INPUT);
 pinMode(6, INPUT);
 pinMode(7, INPUT);

 digitalWrite(2, HIGH);
 digitalWrite(3, HIGH);
 digitalWrite(4, HIGH);
 digitalWrite(5, HIGH);
 digitalWrite(6, HIGH);
 digitalWrite(7, HIGH);

 Keyboard.begin();
 delay(1000);
}

void loop()
{
 if (digitalRead(3)   == LOW) {
 Keyboard.press(ctrlKey); //501DO
 Keyboard.press('1');
 Keyboard.releaseAll();
 delay(250);
 }
 else if (digitalRead(4)  == LOW) {
 Keyboard.press(ctrlKey); //501MO
 Keyboard.press('2');
 Keyboard.releaseAll();
 delay(250); 
 }
 else if (digitalRead(5) == LOW) {
 Keyboard.press(ctrlKey); //Cricket
 Keyboard.press('3');
 Keyboard.releaseAll();
 delay(250);
 } 
 else if (digitalRead(6) == LOW) {
 Keyboard.press(ctrlKey); //Splitscore
 Keyboard.press('4');
 Keyboard.releaseAll();
 delay(250);
 } 
 else if (digitalRead(7) == LOW) {
 Keyboard.press(KEY_F10); //Start
 Keyboard.releaseAll();
 delay(250);
 } 
 else if (digitalRead(8) == LOW) {
 Keyboard.press(KEY_RETURN); //Enter
 Keyboard.releaseAll();
 delay(250);
 }
}

Hast du an deinen Taster-Pins Pullup-Widerstände dran ?

Wenn nicht, kannst du im Sketch noch Pullups definieren:

pinMode(2, INPUT_PULLUP);

Bei allen Tastern.

Edit:
Und warum nimmst du jetzt keine Code-Tags.

Ändere das bitte noch!
Dann kannst du "digitaWrite" sparen.

Ok, leider habe ich selbst mit der Library keine Erfahrung.
Sieh dir dazu einfach mal die Referenz an.

HotSystems:
Hast du an deinen Taster-Pins Pullup-Widerstände dran ?

Wenn nicht, kannst du im Sketch noch Pullups definieren:

pinMode(2, INPUT_PULLUP);

Bei allen Tastern.

Edit:
Und warum nimmst du jetzt keine Code-Tags.

Ändere das bitte noch!
Dann kannst du "digitaWrite" sparen.

Also Widerstände habe ich keine dran.
Dann änder ich den Code mal ab.

"Und warum nimmst du jetzt keine Code-Tags."
Was heißt das jetzt genau?

TiOs:
"Und warum nimmst du jetzt keine Code-Tags."
Was heißt das jetzt genau?

In deinem ersten Beitrag hast du den Sketch richtig und gut lesbar eingesetzt.
Warum machst du das nicht auch im Post #2, da ist der Sketch nicht mehr lesbar.

Ah OK.
Also hier der Code nochmal.

#include "Keyboard.h"
#include "HID.h"

char ctrlKey = KEY_LEFT_GUI;
void setup()
{
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);

  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);

  Keyboard.begin();
  delay(1000);
}

void loop()
{
  if (digitalRead(3)   == LOW) {
  Keyboard.press(ctrlKey); //501DO
  Keyboard.press('1');
  Keyboard.releaseAll();
  delay(250);
  }
  else if (digitalRead(4)  == LOW) {
  Keyboard.press(ctrlKey); //501MO
  Keyboard.press('2');
  Keyboard.releaseAll();
  delay(250); 
  }
  else if (digitalRead(5) == LOW) {
  Keyboard.press(ctrlKey); //Cricket
  Keyboard.press('3');
  Keyboard.releaseAll();
  delay(250);
  } 
  else if (digitalRead(6) == LOW) {
  Keyboard.press(ctrlKey); //Splitscore
  Keyboard.press('4');
  Keyboard.releaseAll();
  delay(250);
  } 
  else if (digitalRead(7) == LOW) {
  Keyboard.press(KEY_F10); //Start
  Keyboard.releaseAll();
  delay(250);
  } 
  else if (digitalRead(8) == LOW) {
  Keyboard.press(KEY_RETURN); //Enter
  Keyboard.releaseAll();
  delay(250);
  }
}

Und warum machst du jetzt wieder einen neuen Post ?
Du hättest den Post#2 doch ändern können.

So wird das jetzt schön unübersichtlich.

Sorry, Anfänger halt.
Werde den 2. Post versuchen zu löschen.

Ist der Code denn so nun in Ordnung?

TiOs:
....
Ist der Code denn so nun in Ordnung?

Du kannst jetzt diese Zeilen

digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);

löschen.

Wie ich schon schrieb, fehlt mir die Erfahrung mit der Lib.
Hast du dir das verlinkte Tutorial mal durchgelesen ?

Und um zu prüfen, wie weit dein Sketch funktioniert, könntest du in die einzelnen Abfragen Ausgaben auf den seriellen Monitor eintragen. Nach folgendem Beispiel:

  if (digitalRead(3)   == LOW) {
  Keyboard.press(ctrlKey); //501DO
  Keyboard.press('1');   <<< dieser Eintrag stimmt nicht mit dem Tutorial überein.
  
  Serial.print("Taste x");
  
  Keyboard.releaseAll();
  delay(250);
  }

Es wäre sicher auch sinnvoll eine kleine Pause zwischen press und releaseAll einzufügen.
Die delays hinter releaseAll sind eher sinnlos.

So ok Pause am Ende weg und vor releaseAll.
Dann werde ich das heute mittag mal testen.

Wieso inizialisierst Du die Pins von 2 bis 7 und liest die Pins von 3 bis 8?
Das ist ein "Schönheitsfehler" der Sketch müßte aber dennoch zu 83,3% funktionieren.

Grüße Uwe

... weshalb 'magic numbers' (also nackte Zahlen) in einem Sketch eher nur Probleme machen - besser weg damit.

const byte _pinTaste1=2;
...
pinMode(_pinTaste1,INPUT_PULLUP);
...
if (digitalRead(_pinTaste1)==LOW){
  //da hat doch glatt Wer den Knopf gedrückt ...
}

Netter Nebeneffekt: Man kann diese Pins einfachst umsetzen - andere Arduino, anderes Layout, EINE Zahl angepasst, Sketch läuft wieder.
Ähnlich geht Das auch mit festen Werten (const = Werte, Die sich NIEMALS ändern - z.B. Pin-Zuweisungen).

MfG

Hallo Leute.
Ich habe den Code aufgespielt, doch anstelle der Strg Taste nimmt der Code die Windowstaste.
Ich finde den Fehler nicht.

TiOs:
Ich habe den Code aufgespielt, doch anstelle der Strg Taste nimmt der Code die Windowstaste.
Ich finde den Fehler nicht.

Das meinst du nicht ernst, oder?

char ctrlKey = KEY_LEFT_GUI;

Die linke Windows Taste ctrlKey zu nennen reicht halt nicht.

Also das verstehe ich jetzt nicht. Wie spreche ich denn jetzt nun die strg taste an?

Hast du mal erwogen die Dokumentation (z.B. von Keyboard.press()) zu lesen?

pressExample.png

pressExample.png

... soll heißen ... 'ctrlKey' ist nur ein Name - könntest Du genau so Benno nennen - an der Funktion ändert Sich NIX - da die Taste RECHTS vom = steht und dort steht 'KEY_LEFT_GUI' ... riecht irgendwie nach Windows-Taste.

Mache dort Mal // davor, dafür entfernst Du 2 Zeilen drunter die zwei // (bei 'KEY_LEFT_CTRL', was eindeutig nach der linkten STRG-Taste riecht - früher (oder auf dem englischem Layout) heißt die Taste CTRG (Control) ).