Grüß Gott,
Ich habe nun seit etwa 2 Wochen meinen neuen Arduino Leonardo.
Am Anfang lief auch alles gut, bis gestern. Ich habe ein Programm geschrieben, dass eine Tastatur emuliert für die Steuerung eines Spiels.
Als Eingabe nutze ich normale Wippschalter und für mehr Pins benutze ich 4 4051.
Alles hat auch geklappt. Die Wippschalter, die 4051's, und auch das Programm.
Doch seit gestern leuchtet nur noch die RX-LED dauerhaft und das emulieren der Tastatur funktioniert auch nicht mehr.
Unter dem Geräte-Manager in Windows wir bei Eingabegeräte nur noch "USB-Eingabegerät" angezeigt, mit einem Warn-Dreieck wegen Treiber Probleme. Ich hab auch schon manuell versucht die Treiber zu installieren, aber ohne Erfolg.
Nach meiner Suche im Internet, habe ich dem Tipp mit dem Reset des Arduinos und dann das Hochladen des Blink-Programms ausprobiert --> RX-LED aus, Arduino läuft.
Ich hab mir gedacht, dass es vielleicht an der Tastatur Emulierung liegt.
Also Tastatur und Maus Beispiel hochgeladen, Serial Monitor geöffnet und eingaben gesendet --> RX-LED aus, Arduino empfängt Eingaben, Maus bewegt sich.
Nun nach stundenlangem Verzweifeln kommt mir die Vermutung, dass das Programm dran schuld ist. Vielleicht kann jemand mal drüberschauen und findet meinen blöden Fehler:
#include "Keyboard.h"
//Variablen
//Software Variablen
//KeyCode-Tabelle
char KeyTable[45];
//Key-Variable
char key = ' ';
int data[7][3];
int old[7][3];
///Input Config (4051 Anschluesse)
int Input1 = 5;
int Input2 = 6;
int Input3 = 7;
int Input4 = 8;
int SelectOut1 = 2;
int SelectOut2 = 3;
int SelectOut3 = 4;
int bit1 = 0;
int bit2 = 0;
int bit3 = 0;
int InVar1 = 0;
int InVar2 = 0;
int InVar3 = 0;
int InVar4 = 0;
//Ende Button Config
//LED Leuchtmelder
void setup() {
//Variablen
//KeyCode-Tabelle initalliesieren
KeyTable[10] = ' ';
KeyTable[11] = ' ';
KeyTable[12] = '6';
KeyTable[13] = '7';
KeyTable[14] = '8';
KeyTable[15] = ' ';
KeyTable[16] = ' ';
KeyTable[17] = ' ';
KeyTable[20] = ' ';
KeyTable[21] = ' ';
KeyTable[22] = ' ';
KeyTable[23] = ' ';
KeyTable[24] = ' ';
KeyTable[25] = ' ';
KeyTable[26] = '1';
KeyTable[27] = '2';
KeyTable[30] = 'D';
KeyTable[31] = 'N';
KeyTable[32] = 'R';
KeyTable[33] = 'B';
KeyTable[34] = '-';
KeyTable[35] = '/';
KeyTable[36] = '*';
KeyTable[37] = ' ';
KeyTable[40] = 'M';
KeyTable[41] = ' ';
KeyTable[42] = 'E';
KeyTable[43] = 'L';
KeyTable[44] = ' ';
KeyTable[45] = ' ';
KeyTable[46] = ' ';
KeyTable[47] = ' ';
//Buttons
Keyboard.begin();
pinMode(SelectOut1, OUTPUT);
pinMode(SelectOut2, OUTPUT);
pinMode(SelectOut3, OUTPUT);
pinMode(13, OUTPUT);
pinMode(Input1, INPUT);
pinMode(Input2, INPUT);
pinMode(Input3, INPUT);
pinMode(Input4, INPUT);
digitalWrite(Input1, HIGH);
digitalWrite(Input2, HIGH);
digitalWrite(Input3, HIGH);
digitalWrite(Input4, HIGH);
Serial.begin(9600);
for (int i = 0; i <= 7; i++) {
old[i][0] = HIGH;
old[i][1] = HIGH;
old[i][2] = HIGH;
old[i][3] = HIGH;
}
}
int GetKeyCode(int ICNum, int PinNum) {
return 10 * ICNum + PinNum;
}
char GetKey(int KeyCodeNum) {
return KeyTable[KeyCodeNum];
}
bool PressKey(int keyNum) {
Keyboard.write(GetKey(keyNum));
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
Serial.write("Taste Gedrueckt: ");
Serial.write(GetKey(keyNum));
Serial.println("");
return true;
}
void loop() }
for (int i = 0; i <= 7; i++) {
// Bit aus dem zaehler bekommen
bit1 = bitRead(i, 0);
bit2 = bitRead(i, 1);
bit3 = bitRead(i, 2);
//Ausgabe an Select Pins
digitalWrite(SelectOut1, bit1);
digitalWrite(SelectOut2, bit2);
digitalWrite(SelectOut3, bit3);
// InVar1 = digitalRead(Input1);
// InVar2 = digitalRead(Input2);
// InVar3 = digitalRead(Input3);
// InVar4 = digitalRead(Input4);
data[i][0] = digitalRead(Input1);
data[i][1] = digitalRead(Input2);
data[i][2] = digitalRead(Input3);
data[i][3] = digitalRead(Input4);
}
for (int i = 0; i <= 7; i++) {
if (old[i][0] != data[i][0]) {
key = GetKeyCode(1, i);
PressKey(key);
old[i][0] = data[i][0];
}
if (old[i][1] != data[i][1]) {
key = GetKeyCode(2, i);
PressKey(key);
old[i][1] = data[i][1];
}
if (old[i][2] != data[i][2]) {
key = GetKeyCode(3, i);
PressKey(key);
old[i][2] = data[i][2];
}
if (old[i][3] != data[i][3]) {
key = GetKeyCode(4, i);
PressKey(key);
old[i][3] = data[i][3];
}
}
delay(100);
}
Ich komm grad echt nicht weiter.
Danke schon mal im Vorraus.
MfG
David1611