Saturday, November 15, 2014

Audino - Arduino MP3-Player (5) - Knöpfe (digital)

Knopfdrücke können im Arduino registriert werden. Nach einem Knopfdruck können dann entsprechende Aktionen ausgeführt werden. Ein einfacher Schaltkreis kann realisiert werden indem der Knopf mit dem digitalen Port 2 und der Masse verbunden wird. Dabei wird der interne Pull-up Widerstand verwendet. Alternativ kann eine Schaltung mit einem externen Pull-down Widerstand verwendet werden. Ein Beispiel dafür ist hier zu sehen Arduino - Button.


Der Programmcode schaltet solange der Knopf gedrückt wird die LED an. Wird der Knopf wieder losgelassen, wird die LED wieder ausgeschaltet. Jeder Knopfdruck wird gezählt. Der aktuelle Status des Knopfs und die Anzahl der Knopfdrücke wird über eine serielle Kommunikation ausgegeben.

// constants won't change
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13;   // the number of the LED pin
 
// variables will change
int buttonState = 0;     // variable for reading the pushbutton status
 
int counter = 0;         // variable for remember the number of button pressed
 
 
// the setup routine runs once when you turn the device on or you press reset
void setup()
{
    // initialize the LED pin as an output
    pinMode(ledPin, OUTPUT);
 
    // initialize the pushbutton pins as input and enable internal pull-up resistor
    pinMode(buttonPin, INPUT_PULLUP);
 
    // initialize serial communication at 9600 bits per second
    Serial.begin(9600);
}
 
 
// the loop routine runs over and over again forever
void loop()
{
    // read the state of the pushbutton value
    int state = digitalRead(buttonPin);
 
    // recognize state changes: button pressed and button released
    if (state != buttonState)
    {
        // remember new button state
        buttonState = state;
 
        // print out the state of the button
        Serial.print("2 State changed ");
        Serial.println(buttonState);
 
        // button is pressed
        if (buttonState == LOW)
        {
            // turn LED on
            digitalWrite(ledPin, HIGH);
 
            // increment number of button pressed
            counter++;
 
            // print out the number of button pressed
            Serial.print("2 counter: ");
            Serial.println(counter);
        }
        // button is released
        else if (buttonState == HIGH)
        {
            // turn LED off
            digitalWrite(ledPin, LOW);
        }
    }
}

Dieser Programmcode kann für Aktionen verwendet werden, die ausgeführt werden sollen, solange ein Knopf gedrückt ist. Eine Alternative zu dieser Logik ist es, dass eine Aktion bei einem Knopfdruck nur einmal ausgeführt werden soll. Dazu das folgende Beispiel. Der Programmcode schaltet bei einem Knopfdruck die LED an, bei einem weiteren Knopfdruck wieder aus. Jeder Knopfdruck wird gezählt. Der aktuelle Status des Knopfs, der LED und die Anzahl der Knopfdrücke wird über eine serielle Kommunikation ausgegeben.

// constants won't change
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13;   // the number of the LED pin
 
// variables will change
int buttonState = 0;     // variable for reading the pushbutton status
int ledState = 0;        // variable for reading the LED status
 
int counter = 0;         // variable for remember the number of button pressed
 
 
// the setup routine runs once when you turn the device on or you press reset
void setup()
{
    // initialize the LED pin as an output
    pinMode(ledPin, OUTPUT);
 
    // initialize the pushbutton pins as input and enable internal pull-up resistor
    pinMode(buttonPin, INPUT_PULLUP);
 
    // initialize serial communication at 9600 bits per second
    Serial.begin(9600);
}
 
 
// the loop routine runs over and over again forever
void loop()
{ 
    // read the state of the pushbutton value
    int state = digitalRead(buttonPin);
 
    // recognize state changes: button pressed and button released
    if (state != buttonState)
    {
        // remember new button state
        buttonState = state;
 
        // print out the state of the button
        Serial.print("2 State changed ");
        Serial.println(buttonState);
 
        // button is pressed and LED is off
        if (buttonState == LOW && ledState == LOW)
        {
            // remember new LED state
            ledState = HIGH;
 
            // turn LED on
            digitalWrite(ledPin, HIGH);
 
            // print out the state of the LED
            Serial.print("2 Set high ");
            Serial.println(ledState);
 
            // increment number of button pressed
            counter++;
 
            // print out the number of button pressed
            Serial.print("2 counter: ");
            Serial.println(counter);
        }
        // button is pressed and LED is on
        else if (buttonState == LOW && ledState == HIGH)
        {
            // remember new LED state
            ledState = LOW;
 
            // turn LED off
            digitalWrite(ledPin, LOW);
 
            // print out the state of the LED
            Serial.print("2 Set low ");
            Serial.println(ledState);
 
            // increment number of button pressed
            counter++;
 
            // print out the number of button pressed
            Serial.print("2 counter: ");
            Serial.println(counter);
        }
        // button is released
        else if (buttonState == HIGH)
        {
            // print out new line
            Serial.println();
 
            // wait before next click is recognized
            delay(100);
        }
    }
}


Als nächstes werde ich die Schaltung und den Programmcode um weitere Knöpfe erweitern.


Weitere Blogeinträge

  1. Auswahl der Komponenten
  2. Das Entwicklungsbrett
  3. Das erste Einschalten
  4. Die Entwicklungsumgebung
  5. Knöpfe (digital)
  6. Mehrere Knöpfe (digital)
  7. Mehrere Knöpfe (analog)
  8. Potentiometer
  9. Das MP3 Shield
  10. Auswahl der Komponenten 2
  11. Auswahl der Komponenten (Zusammenfassung) 
  12. Punkt-Streifenrasterplatine und Knöpfe
  13. Punkt-Streifenrasterplatine und weitere Komponenten
  14. Das Gehäuse
  15. Sketch 1 (setup-Methode)
  16. Sketch 2 (loop-Methode)
  17. Sketch 3 (Der komplette Code)
  18. PC-Software


No comments:

Post a Comment