Differences
This shows you the differences between two versions of the page.
| lehrkraefte:blc:math:formi:button-breadboard [2017/02/10 16:27] – created Ivo Blöchliger | lehrkraefte:blc:math:formi:button-breadboard [2017/02/10 16:35] (current) – Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | {{backlinks> | ||
| + | ===== Pushbuttons ===== | ||
| + | Ist ein digitaler Input nicht verbunden (bzw. hängt einfach ein loser Draht daran) ist die Spannung nicht definiert. Schlimmer noch, variable elektrische Felder induzieren eine Spannung (v.a. 50Hz Wechselstrom) und der digitale Input kann wild zwischen 0 und 1 wechseln. | ||
| + | Im Falle eines Pushbuttons wird das eine Ende des Buttons auf GND oder 5V gehängt, und das andere Ende mit dem Input-Pin verbunden und zusätzlich über einen grossen Widerstand auf 5V oder GND, damit der Zustand auch bei offenem Schalter definiert ist. | ||
| + | |||
| + | Der Arduino hat interne Pullup-Widerstände, | ||
| + | |||
| + | <code c++> | ||
| + | // Kurzform: | ||
| + | | ||
| + | // Alternative | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ==== Debouncing ==== | ||
| + | Diese Schalter schliessen nicht immer sofort und vollständig, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Das " | ||
| + | <code c++> | ||
| + | // GND auf eine Seite des Buttons, andere Seite auf Pin 2 | ||
| + | // Oder Pin 2 und GND mit zwei Stecker berühren (oder einfach ein- und ausstecken). | ||
| + | |||
| + | void setup() { | ||
| + | pinMode(2, INPUT_PULLUP); | ||
| + | Serial.begin(115200); | ||
| + | // Funktion aufrufen, wenn immer der Zustand ändert. | ||
| + | attachInterrupt(digitalPinToInterrupt(2), | ||
| + | } | ||
| + | |||
| + | #define NUM 20 | ||
| + | // volatile, damit im Interrupt verfügbar | ||
| + | volatile int pos = 0; | ||
| + | volatile long us[NUM]; | ||
| + | |||
| + | // Interrupt Methode | ||
| + | void click() { | ||
| + | if (pos< | ||
| + | us[pos++]=micros(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | if (pos==NUM) { | ||
| + | for (int i=0; i<NUM-1; i++) { | ||
| + | Serial.print(us[i+1]-us[i]); | ||
| + | Serial.print(" | ||
| + | } | ||
| + | | ||
| + | pos = 0; | ||
| + | } | ||
| + | } | ||
| + | </ | ||