Arduino Analog Keyboard

Fra HTX Arduino
Spring til navigation Spring til 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

Programmerings-Shield
Programmerings-Shield Analogt Keyboard - Display - LED'er - Trykknapper - Analog - LM35 - Fugt Sensor - Servo Motor - RF-Transmitter - RF-Receiver - LED-Matrix - RFID-læser - IR-Modtager - GPS1 - GPS2 - Step Motor - Matrix Tastatur - Ultralyd Afstandsmåler - XY Joystick - LED Strip
I2C Enheder I2C Display - Barometer BMP085 - Barometer BMP180 - Accelerometer MMA7660 - Gyroskop MPU6050 - Kompas HMC5883 - Real Time Clock DS1307 - Real Time Clock DS3231 - I2C
Grundlæggende Oversigt - Monteringsvejledning - Testprogram - Programmering Shield Gammel version
Arduino-Modul-Oversigt
Arduino Generelt: Biblioteker - Board - Driver - Shield - Arduino Analog - Arduino Seriel

Arduino-typer: Arduino UNO - Arduino Nano - Arduino Pro Mini - Arduino MEGA 2560 - LiliyPad Mikrocontroller - Arduino DUE - WeMOS

Input-moduler Trådløse: Bluetooth - Transceiver modul - WiFi Modul - SMS Modul - I2C-RF-modtager - RF Link - GPRS/GSM - GSM_Modul

Sensorer: GPS - Strøm-sensor - I2C Humidity - Lys og Nærhed - Magnetisk Kompas - I2C barometer - Farvegenkendelsesmodul - Alkoholsensor - Accelerometer - I2C Accelerometer - I2C Gyroskop - Vejecelleforstærker - IR Distance - AC Strømsensor - Afstand - XY Joystick - Humidity - Tryksensor - Vindhastighedsmåler
Photo og IR: IR Fjernbetjening - Photo Interrupter - IR Modtager - Bevægelsescensor - Photo Refleks Sensor - VGA Kamera
Power: Power Adapter - Lithium Batteri
Lager: SD Kort
Konvertere: I2C AD-konverter
Funktionsmoduler: RFID-modul - Matrix tastatur - DS1307 RTC - ENC28J60 Ethernet - IO Expander
Touch Display: Touch Display

Output-moduler Trådløse: Bluetooth - RF Link - GPRS/GSM - Transceiver modul - WiFi Modul - SMS Modul

Display: Display Shield - Touch Display - Arduino Display - Nokia 5110 Display - Dot-Matrix - Lys-avis - I2C Display
Funktionsmoduler: Lydgiver - Lydmodul - Relæ modul - Audio Power Forstærker - ENC28J60 Ethernet - Peltier Element - IO Expander
Hukommelse: SD Kort
Motorer: Stepper Motor Driver - Stepper med Accelleration - Servo

I2C-Moduler Funktionsmoduler: DS1307 RTC - I2C-RF-modtager - I2C tastatur

Sensorer: I2C Humidity - Magnetisk Kompas - I2C barometer - I2C Accelerometer - I2C Gyroskop
Konvertere: I2C AD-konverter
Display: I2C Display