Seinsleutel debouncen - input voor arduino

Ik heb een Arduino micro kloon gekocht, om een seinsleutel als invoerorgaan voor een computer te gebruiken. Dat gaat hiermee: http://www.elektronik-labor.de/Arduino/MorseKB.html

De arduino emuleert een toetsenbord, waardoor je met je seinsleutel kan seinen en de tekst op je PC verschijnt alsof je aan het typen bent. Probleempje: mijn seinsleutel lijkt te bouncen. Een D wordt soms een B, en een B wordt soms als een 6 herkend.

Hoe kan ik dit oplossen? Van programmeren heb ik geen kaas gegeten, al kan ik wel een paar regels code kopieren en in de sketch plakken. Hardwarematig kan ik zo doorvoeren. Is puur het plaatsen van een condensatortje over het sleutelcontact goed, zoals je dat bij een echte zender zou doen, of is er een betere methode die geschikt is voor digitale ingangen?

Tevens is er nog een probleempje met dat de sketch voor een US/internat toetsenbord geschreven is, en vervolgens is aangepast voor een duits toetsenbord (QWERTZ).
Kan ik dat aanpassen door in dit stukje code het #include "usToDE.H" weg te laten?

Een stukje van "usToDE.H"
code:
// ummappen für deutsches KeyBoard-Layout

unsigned char usToDE[192] = {
//  0,  0,  0,  0,  0,  0,  0,  0, BS, TB, CR,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  8,  9, 10,  0,  0, 10,  0,  0,

    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,

// BL,  !,  Ä,  §,  $,  %,  /,  ä,  ),  =,  (,  `,  ,,  ß,  .,  -,    US
//          "               &   /   (   )   *   +       -       /     DE
   32, 33, 64,  0, 36, 37, 94, 38, 42, 40,125,184, 44, 47, 46, 38 



Begin van de 'hoofdcode'
code:

#include "usToDE.h"
#include "morsedec.h"

static unsigned char key;
static unsigned char keystrokeDE;
static unsigned char morsechar;


Edit: ik zie dat ik er in de code verderop nog verwijzingen staan naar keystrokeDE, dus dat vereist wat meer werk in de code. Als iemand weet hoe ik 't aan kan passen (de volledige broncode staat in de link bovenaan dit bericht), laat maar weten!
Ledlover zoekt iemand om morse mee te oefenen op 40 of 80m. E-mail me als je mee wil doen!
Lambiek

Golden Member

Hoe kan ik dit oplossen?

Heb je het al geprobeerd met een 100nF'je over je seinsleutel/contact?
Als je haar maar goed zit, GROETEN LAMBIEK.
Anti klik filter,
de Junkers sleutels hebben dat er standaard in zitten.
u=ir betekent niet :U bent ingenieur..
maartenbakker

Special Member

Softwarematige debouncing is een goede en vrij simpele oefening.

Anders helpt een condensatortje waarschijnlijk al tegen het ergste leed. Of een 4538 ertussen ofzo.

[Bericht gewijzigd door maartenbakker op 27 januari 2015 18:02:22 (68%)]

"The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose." - Disclaimer: ik post soms vanaf een tablet, het is geen doen om alle autocrrect, ontbrekende spaties en off-by-ones er uit te halen.
Een doodsimpele condensator blijkt voldoende effectief te zijn als debouncing-frutsel. Nu het tweede punt nog: de duitse toetsenbordlayout.

Ik zie in de broncode wel ongeveer wat ik zou moeten aanpassen (volgens mij de US naar duits omzettabel verwijderen en de keystrokeDE-verwijzing laten verwijzen naar de niet-gecodeerde 'keystroke'), maar ik zou zelf echt niet weten hoe dat precies zou moeten. Is er iemand die mij (een leek op programmeervlak) kan vertellen hoe - of nog mooier, het me lekker voor kan kauwen voorzien van een uitleg? :) ;)
Ledlover zoekt iemand om morse mee te oefenen op 40 of 80m. E-mail me als je mee wil doen!
keystrokeDE = (usToDE[morsechar]);

vevangen door

keystrokeDE = morsechar;

vieze code trouwens, er staat meer in commentaar dan code die werkt
alles met // ervoor wordt niet gebruikt ...
stop het overmatig spatiegebruik !
bedankt voor de tips. d i t is g e s eind in morse . Tot hier dan. Te zien aan mijn nog wat gebrekkige spatiëring van de tekens. Het werkt nu zoals het hoort :)

[Bericht gewijzigd door Ledlover op 30 januari 2015 13:22:22 (11%)]

Ledlover zoekt iemand om morse mee te oefenen op 40 of 80m. E-mail me als je mee wil doen!
Lambiek

Golden Member

bedankt voor de tips.

--. . . -. -.. .- -. -.- :)
Als je haar maar goed zit, GROETEN LAMBIEK.
u=ir betekent niet :U bent ingenieur..