Arduino Analog Keyboard

Fra Holstebro HTX Wiki
Skift til: navigering, søgning
Det analoge keyboard på Prog-shieldet

Det analoge keyboard er monteret som standard på programmerings-shieldet, og er et 12 tasters nummerisk tastatur, men kan konfigureres som man ønsker.

Software

Da analoge keyboards ikke er standard, så er der skrevet et bibliotek til det analoge keyboard, der kan hentes i denne ZIP-fil. Biblioteket downloades og installeres som beskrevet under Arduinos biblioteker.

Anvendelsen af softwaren

Det der gennemgås her ligger i biblioteket under Basic Test eksemplet.

Det analoge keyboard sidder på programmerings-shieldet placeret på den analoge indgang A2, som det er angivet her.

Som alle andre biblioteker skal der sættes de grundlæggende ting op for at kontakte biblioteket og definere hvordan dette keyboard ser ud. Til sidst oprettes en instans af klassen Analog_Keypad (et keyboard-objekt):

#include <Analog_Keypad.h>

const byte NUM_KEYS = 12;
const byte KEYB_PIN = A2;
char hexaKeys[NUM_KEYS] = 
  {'0','1','2','3','4','5','6','7','8','9','A','B'};

//initialize an instance of class Analog_Keypad
Analog_Keypad myKeypad = Analog_Keypad(hexaKeys, KEYB_PIN, NUM_KEYS);

Inde i setup() skal der sættes gang i objektet ved hjælp af begin-metoden som vist her:

void setup() {
  myKeypad.begin();
}

Der kan sættes yderligere ting op, men for at komme i gang er dette nok.

Herefter kan metoden getKey() anvendes som vist her. Hvis der ikke er trykket på en gyldig tast, så returneres der NO_KEY.

En vigtig ting at nævne er at metoden kun returnerer tasten EN gang i et tastetryk, men at der skal 5 kald til metode til før den gør det. Det betyder at metoden skal kaldes så ofte som muligt (polling). Eksemplet her viser en simpel anvendelse af metoden:

void loop() {
  char key = myKeypad.getKey(); // Poll for a key value
  if (key != NO_KEY) {  // Are a valid key pressed?
    Serial.println(key);  // Do something with the aquired key
  }
}

Yderligere muligheder i softwaren

Der ligger yderligere muligheder i klassen man kan anvende, hvis man ønsker andre måder at anvende tastaturet på:

	  // Two different constructors for the class
	Analog_Keypad(char *userKeyMap, byte analogPin, byte numKeys);
	Analog_Keypad(char *userKeyMap, byte analogPin, byte numKeys, byte numAccept);

	// Basic interface
	char getKey();
	void begin();

	// Extended interface
	bool isPressed(char keyChar);
	void setDebounceTime(uint debounce);
	void setHoldTime(uint hold);
	void setHoldMode(bool mode);
	void setNumAccept(byte count);
	char waitForKey();

Hardware

Princippet i det analoge keyboard er beskrevet på AD-tast, der er skrevet til software med PIC mikrocontroller, men den hardwaremæssige opbygning er præcis den samme.

Princip-diagram for det Analoge keyboard

Som det kan se her, så er tastaturet baseret på en række ens modstande der sidder i serie, således at forsyningsspændingen opdeles i en række lige store dele. Antallet af ens modstande er det samme som antallet af taster.

Hvis der ikke er trykket på nogen tast, så vil R1 sørge for at der kommer 0V ind til PIC-benet, så AD'en kan se at der ikke er trykket på noget. Denne modstand skal være så stor, at den ikke belaster spændingsdelingen, så den bliver skæv (det er værst midt i modstandsrækken). Den skal heller ikke være så stor at der kommer problemer med læk-strømmen ud af indgangsbenet på PIC'en.

Hvis der trykkes på en tast, så kommer der en spænding ind der enten er en del af forsyningsspændingen eller selve forsyningsspændingen. Ud fra at der i definitions-filen til softwaremodulet er angivet hvor mange taster der er på tastaturet, og da modstandene i spændingsdeleren er ens, så ved softwaren hvilken spænding den skal forvente.

Med 3 taster, så vil softwaren registrere følgende niveauer:

  • fra 0V til 1/6 af forsyningen betyder at der ikke er nogen tast trykket.
  • fra 1/6 til 3/6 af forsyningen betyder det at 0-tasten er trykket ned.
  • fra 3/6 til 5/6 af forsyningen betyder det at 1-tasten er trykket ned.
  • fra 5/6 og op til forsyningen betyder det at 2-tasten er trykket ned.
Den spænding som en tast giver ud er givet ved den viste formel. Hvor Vtast er spændingen når der er trykket på tasten og N er det tal tasten giver i softwaren. Tast-formel.png
De spændinger som softwaren skelner imellem, for at se hvilken tast der er trykket på er givet ved den viste formel. Hvor Vtast-min er det laveste niveau for spændingen når der er trykket på tasten og Vtast-max er det højeste niveau for spændingen når der er trykket på tasten. N er det tal tasten giver i softwaren. Tast-l-formel.png Tast-h-formel.png


Principskitse af AD-tastaturet

Beregningerne og anvendelsen af et 12 eller 16 tasters keyboard er selvfølgelig samme princip, blot at spændingerne bliver anderledes.

Layout

Keyboardets placering på programmerings-shieldet kan ses her:
Layout-analog-keyboard.png
Angivelse af de 12 tasters placering og betydning i test-koden