Arduino UNO: HID - Keyboard mit Lichtschranke prellt

Hallo,

ich habe mit dem makey makey code für den arduino uno rumgespielt. Und zwar möchte ich das beim auslösen einer Lichtschranke ein Buchstabe ausgegben wird. Das Funktioniert zwar alles so weit. Allerdings wird dieser Buchstabe gleich mehrfach ausgegeben, also eine Art prellen.

Hier mal mein Code:

uint8_t buf[8] = { 0 }; /* Keyboard report buffer */

void setup();
void loop();

#define TonC 2
#define TonD 3
#define TonE 4
#define TonF 5
#define TonG 6
#define TonA 7
#define TonH 8
#define TonC2 9

int state = 1;

void setup() 
{
    Serial.begin(9600);
 pinMode(TonC, INPUT);
 pinMode(TonD, INPUT);
 pinMode(TonE, INPUT);
        pinMode(TonF, INPUT);
        pinMode(TonG, INPUT);
        pinMode(TonA, INPUT);
        pinMode(TonH, INPUT);
        pinMode(TonC2, INPUT);
// enable internal pull-ups
    delay(200);
}


void loop() 
{
    state = digitalRead(TonC);
if (state != 0) {
buf[2] = 50;    // Send #
Serial.write(buf, 8); // Send keypress
releaseKey();
}
 
state = digitalRead(TonD);
if (state != 0) {
buf[2] = 80;    // Send Left Arrow
Serial.write(buf, 8); // Send keypress
releaseKey();
}
 
state = digitalRead(TonE);
if (state != 0) {
buf[2] = 81;    // Send Down Arrow
Serial.write(buf, 8); // Send keypress
releaseKey();
}

state = digitalRead(TonF);
if (state != 0) {
buf[2] = 79;    // Send Right Arrow
Serial.write(buf, 8); // Send keypress
releaseKey();
}
state = digitalRead(TonG);
if (state != 0) {
buf[2] = 20;    // Send Q
Serial.write(buf, 8); // Send keypress
releaseKey();
}
state = digitalRead(TonA);
if (state != 0) {
buf[2] = 26;    // Send W
Serial.write(buf, 8); // Send keypress
releaseKey();
}
state = digitalRead(TonH);
if (state != 0) {
buf[2] = 8;    // Send E
Serial.write(buf, 8); // Send keypress
releaseKey();
}
state = digitalRead(TonC2);
if (state != 0) {
buf[2] = 21;    // Send R
Serial.write(buf, 8); // Send keypress
releaseKey();
}

}

void releaseKey()
{
buf[0] = 0;
buf[2] = 0;
Serial.write(buf, 8); // Release key
}
[q/qcode]

Ich habe schon an verschiedenen Stellen Delays probiert. Das hilft zwar ein wenig, allerdings wird das ganze auch Träge.

Habt ihr noch eine Idee wie man das ganze anpassen könnte?

VG,
DaHu

solange digitalRead(Tonx) HIGH zurückliefert, wird dauernd gesendet.

Du hast zwar eine Funktion namens releaseKey, aber die wartet nicht bis der Pin Tonx wieder frei ist. ( Das wäre eine Möglichkeit ... )