summaryrefslogtreecommitdiffstatshomepage
path: root/docs/tutorial
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tutorial')
-rw-r--r--docs/tutorial/debounce.rst37
-rw-r--r--docs/tutorial/index.rst1
2 files changed, 38 insertions, 0 deletions
diff --git a/docs/tutorial/debounce.rst b/docs/tutorial/debounce.rst
new file mode 100644
index 0000000000..f730e1d340
--- /dev/null
+++ b/docs/tutorial/debounce.rst
@@ -0,0 +1,37 @@
+Debouncing a pin input
+======================
+
+A pin used as input from a switch or other mechanical device can have a lot
+of noise on it, rapidly changing from low to high when the switch is first
+pressed or released. This noise can be eliminated using a capacitor (a
+debouncing circuit). It can also be eliminated using a simple function that
+makes sure the value on the pin is stable.
+
+The following function does just this. It gets the current value of the given
+pin, and then waits for the value to change. The new pin value must be stable
+for a continuous 20ms for it to register the change. You can adjust this time
+(to say 50ms) if you still have noise. ::
+
+ import pyb
+
+ def wait_pin_change(pin):
+ # wait for pin to change value
+ # it needs to be stable for a continuous 20ms
+ cur_value = pin.value()
+ active = 0
+ while active < 20:
+ if pin.value() != cur_value:
+ active += 1
+ else:
+ active = 0
+ pyb.delay(1)
+
+
+Use it something like this::
+
+ import pyb
+
+ pin_x1 = pyb.Pin('X1', pyb.Pin.IN, pyb.Pin.PULL_DOWN)
+ while True:
+ wait_pin_change(pin_x1)
+ pyb.LED(4).toggle()
diff --git a/docs/tutorial/index.rst b/docs/tutorial/index.rst
index ed1137e1be..c134d0deb7 100644
--- a/docs/tutorial/index.rst
+++ b/docs/tutorial/index.rst
@@ -43,4 +43,5 @@ Tips, tricks and useful things to know
:maxdepth: 1
:numbered:
+ debounce.rst
pass_through.rst