Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 520

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 535

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 542

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 578

Deprecated: Function set_magic_quotes_runtime() is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 18

Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1244

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1442

Strict Standards: Redefining already defined constructor for class wpdb in /www/htdocs/w009f8cd/blog/wp-includes/wp-db.php on line 306

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /www/htdocs/w009f8cd/blog/wp-includes/cache.php on line 431

Strict Standards: Declaration of Walker_Comment::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/comment-template.php on line 1266

Strict Standards: Redefining already defined constructor for class WP_Dependencies in /www/htdocs/w009f8cd/blog/wp-includes/class.wp-dependencies.php on line 31

Strict Standards: Redefining already defined constructor for class WP_Http in /www/htdocs/w009f8cd/blog/wp-includes/http.php on line 61
Digitaler Input - Schalter auslesen « Physical Computing

Digitaler Input - Schalter auslesen

Zunächst nochmal kurz geklärt, was ist digitaler Input in Vergleich zu allem anderen? In der Welt der Mikrokontroller bedeutet ein digitales Signal im Wesentlichen: Entweder fließt Strom oder eben nicht.

Das einfachste Beispiel für digitalen Input ist ein Schaltkreis mit einem Mikrotaster (oder sonstigem Schalter). Wird der Taster gedrückt, dann schließt er den Schaltkreis und der Strom fließt, ist er nicht gedrückt dann ist der Stromkreis offen und es fließt kein Strom. Soviel also zur Theorie.

Um das auch praktisch auszuprobieren, machen wir jetzt eine kleine Übung. Ihr braucht dazu 1 Arduino, 1 Breadboard, 1 Mikrotaster, 1 Widerstand (ca. 1-2 kOhm) und ein paar Kabel.

Die Schaltung wird so aufgebaut, dass der Mikrotaster auf der einen Seite (je 2 Pins sind intern verbunden und somit 1 Seite) mit GND verbunden wird und auf der anderen Seite mit dem Widerstand. Vom Widerstand gehts dann weiter zu +5V und zwischen Schalter und Widerstand wird eine Verbindung zu Pin 8 hergestellt. Ich hab das ganze mal in Fritzing vorbereitet, wer will kann sich auch das Sketch runterladen.

Fritzing Sketch Button

Fritzing Sketch Button

Einige von euch, die schon mit elektrischen Kreisen zu tun hatten, werden sich jetzt vermutlich fragen, wozu der Widerstand und die Verbindung zu Plus und zu Minus gut sind. Würde man nur die Verbindung GND zu Pin oder +5V zu Pin herstellen und diese durch den Schalter unterbrechen, fließt kein Strom. Dummerweise kann Arduino mit dieser Situation nichts anfangen, denn wo kein Strom fließt kann der Mikrokontroller auch nichts feststellen und sich sozusagen nicht entscheiden welches Signal er empfängt. Liest man einen nicht verbundenen Pin aus, ist es rein zufällig welchen Wert man bekommt.
Damit das nicht passiert, setzen wir eine 2. Verbindung über den Widerstand, den man übrigens auch als Pull-Up bzw. Pull-Down Widerstand bezeichnet, je nachdem ob er am Plus- oder Minus-Pol angeschlossen ist. Ist der Schalter jetzt nicht gedrückt, fließt also ein sehr geringer Strom über den Plus-Kontakt und Arduino kann immerhin einen Wert bestimmen. Wird aber der Taster gedrückt, fließt der Strom über den Minus-Pol, da elektrischer Strom immer den Weg des geringsten Widerstands geht und dieser führt hier durch den Taster. Dadurch bekommt Arduino dann eindeutig ein anderes Signal und diesen Unterschied können wir dann auch im Programm auslesen.

Apropos Programm, was jetzt natürlich noch fehlt ist der Quelltext für unser kleines Programm. Glücklicherweise versorgt uns die Arduino IDE auch hier mit einem Beispiel-Code, den wir bequem nutzen können, siehe Examples > Digital > Button. Die einzige Änderung die ich vorgenommen habe ist in der Zeile 12, wo ich die Variable inputPin auf den von uns genutzten Pin 8 umgestellt habe.


/*
* Button
* by DojoDave
*
* Turns on and off a light emitting diode(LED) connected to digital
* pin 13, when pressing a pushbutton attached to pin 7.
*
* http://www.arduino.cc/en/Tutorial/Button
*/

int ledPin = 13;                // choose the pin for the LED
int inputPin = 8;               // choose the input pin (for a pushbutton)
int val = 0;                    // variable for reading the pin status

void setup() {
pinMode(ledPin, OUTPUT);      // declare LED as output
pinMode(inputPin, INPUT);     // declare pushbutton as input
}

void loop(){
val = digitalRead(inputPin);  // read input value
if (val == HIGH) {            // check if the input is HIGH
digitalWrite(ledPin, LOW);  // turn LED OFF
}
else {
digitalWrite(ledPin, HIGH); // turn LED ON
}
}

Ist die Schaltung fertig aufgebaut und der Code aufs Arduino überspielt, könnt ihr jetzt mit dem Schalter die LED auf dem Arduino-Board ein- bzw. ausschalten.
Viel Spass beim Ausprobieren! Wenns noch Fragen oder Probleme gibt, immer rein in die Kommentare.

  • Das is ja alles super. Es funktioniert auch prächtig. Nur ich verstehs nicht. Binb kein Elektroniker und fange nach 8 Jahren erstmals wieder was mit elektrischen Schaltungen an.

    Ich weiß: Strom fließt von Minus nach Plus. Wenn ich dazwischen einen Schalter (AN) und einen Widerstand (Richtung +) einbaue, fließt Strom, nur weniger. Wenn ich den Schalter auf AUS stelle, fließt kein Strom.

    Hat der Input den Pluspol? Ist der Schalter AN, fließt also der Strom vom - nach + und der Weg über den Widerstand ist irrelevant, weil der Strom den WEg des kleinsten Widerstands nimmt. Klingt logisch.

    Ist der Schalter jetzt aber aus, dann dürfte doch gar kein Strom fließen, bzw. input (+) -> Widerstand -> 5V

    Ich hab echt nen Knoten im Hirn…

You can follow any responses to this entry through the RSS 2.0 feed.