Um Pins zu sparen (falls diese knapp sein sollten), können die Knopfdrücke mehrerer Knöpfe auch über einen analogen Pin registriert werden (spanischer Blogeintrag dazu). Hier sind 11 Knöpfe verwendet worden. Über einen analogen Pin wird festgestellt welcher Knopf gedrückt worden ist.
Dabei werden mehrere Widerstände in Reihe geschaltet. Die Knöpfe werden so angebracht, dass bei einem Knopfdruck eine Parallelschaltung entsteht, durch die eine bestimmte Anzahl von Widerständen übersprungen wird. Der Messpunkt liegt hinter dem siebten Widerstand. Dadurch kann die Reihenschaltung auf zwei Elemente zusammengefasst werden. Das erste Element umfasst die ersten sieben Widerstände und das zweite Element umfasst die letzten sechs Widerstände. Durch einen Knopfdruck entsteht nun eine Spannungsänderung, die über den analogen Eingang ausgelesen werden kann. Über den gemessenen Spannungswert kann auf den gedrückten Knopf geschlossen werden.
Dazu der passende Programmcode, der den gelesen Wert am analogen Pin A5 ausgebiet. Zudem wird, falls eine Taste gedrückt worden ist, die Nummer dieser Taste ausgegeben.
// constants won't change // the number of the pin that is used for the pushbuttons const int buttonsPin = A5; // variables will change // variable for the pressed button int pressedButton = 0; // the setup routine runs once when you turn the device on or you press reset void setup() { // initialize serial communication at 9600 bits per second Serial.begin(9600); } // the loop routine runs over and over again forever void loop() { // check if a button is pressed pressedButton = CheckButtons(); if (pressedButton != 0) { Serial.print("Taste: "); Serial.println(pressedButton); delay(100); } } // returns 0 if no button is pressed, // else the number of the pressed button is returned (1 - 11) int CheckButtons() { int buttonsPinValue = analogRead(buttonsPin); int pressedButton = 0; Serial.println(buttonsPinValue); if (buttonsPinValue > 823) { // button 6 has a value of about 878 pressedButton = 6; } else if (buttonsPinValue > 725) { // button 5 has a value of about 768 pressedButton = 5; } else if (buttonsPinValue > 649) { // button 4 has a value of about 683 pressedButton = 4; } else if (buttonsPinValue > 586) { // button 3 has a value of about 614 pressedButton = 3; } else if (buttonsPinValue > 535) { // button 2 has a value of about 559 pressedButton = 2; } else if (buttonsPinValue > 492) { // button 1 has a value of about 512 pressedButton = 1; } else if (buttonsPinValue > 450) { // if no button is pressed the value is of about 473 pressedButton = 0; } else if (buttonsPinValue > 400) { // button 8 has a value of about 427 pressedButton = 11; } else if (buttonsPinValue > 340) { // button 10 has a value of about 372 pressedButton = 10; } else if (buttonsPinValue > 267) { // button 9 has a value of about 307 pressedButton = 9; } else if (buttonsPinValue > 178) { // button 8 has a value of about 228 pressedButton = 8; } else if (buttonsPinValue > 0) { // button 7 has a value of about 128 pressedButton = 7; } return pressedButton; }
Nächstes Mal werde ich mir die Verwendung eines Potentiometers anschauen.
Weitere Blogeinträge
- Auswahl der Komponenten
- Das Entwicklungsbrett
- Das erste Einschalten
- Die Entwicklungsumgebung
- Knöpfe (digital)
- Mehrere Knöpfe (digital)
- Mehrere Knöpfe (analog)
- Potentiometer
- Das MP3 Shield
- Auswahl der Komponenten 2
- Auswahl der Komponenten (Zusammenfassung)
- Punkt-Streifenrasterplatine und Knöpfe
- Punkt-Streifenrasterplatine und weitere Komponenten
- Das Gehäuse
- Sketch 1 (setup-Methode)
- Sketch 2 (loop-Methode)
- Sketch 3 (Der komplette Code)
- PC-Software
No comments:
Post a Comment