From 5dde6947d366561ae28bdba9a005532e7222de93 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 12 Sep 2018 08:16:22 -0700 Subject: [PATCH] Step counter activity (#1216) * added step-counter project * added to summary --- docs/SUMMARY.md | 1 + docs/projects/fashion.md | 6 ++ docs/projects/step-counter.md | 67 +++++++++++++++++++++++ docs/static/mb/projects/step-counter.png | Bin 0 -> 21317 bytes 4 files changed, 74 insertions(+) create mode 100644 docs/projects/step-counter.md create mode 100644 docs/static/mb/projects/step-counter.png diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 774f8825..3c995a1f 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -41,6 +41,7 @@ * [Karel](/projects/karel) * [Stop Watch](/projects/stopwatch) * [Name Tag](/projects/name-tag) + * [Step counter](/projects/step-counter) ## #examples diff --git a/docs/projects/fashion.md b/docs/projects/fashion.md index 80717493..5b5b58a6 100644 --- a/docs/projects/fashion.md +++ b/docs/projects/fashion.md @@ -17,6 +17,12 @@ "url": "/projects/stopwatch", "imageUrl":"/static/mb/projects/stopwatch.png", "cardType": "side" +}, { + "name": "Step counter", + "description": "Count your steps", + "url": "/projects/step-counter", + "imageUrl":"/static/mb/projects/step-counter.png", + "cardType": "side" }] ``` diff --git a/docs/projects/step-counter.md b/docs/projects/step-counter.md new file mode 100644 index 00000000..e5cb9a7d --- /dev/null +++ b/docs/projects/step-counter.md @@ -0,0 +1,67 @@ +# Step counter + +![A @boardname@ attached on a foot](/static/mb/projects/step-counter.png) + +This project turns the @boardname@ into a simple step-counter. +Each **shake** event increment a **counter** variable. + +## ~ hint + +If you built a watch in the [make](/projects/watch/make) portion of the of the [Watch](/projects/watch) project, you can use the code from this project with it too. + +## ~ + +## A counter + +To build a counter, we will need a variable to store the number of steps. + +```blocks +let step = 0 +step = 0 +``` + +## Detecting a step + +Assuming you attach the @boardname@ to your foot, it will get shaken up when do a step. We can use the ``||input:on shake||`` event to detect a step (it should work most of the time). Let's add the code to increment ``step`` by 1 when @boardname@ is shaken. + +```blocks +let step = 0 +input.onGesture(Gesture.Shake, function () { + step += 1 +}) +step = 0 +``` + +## How many steps so far? + +We want to see the number of steps at all time. In a ``||basic:forever||`` loop, +we add a ``||basic:show number||`` block to display the value of ``step``. + +```blocks +let step = 0 +input.onGesture(Gesture.Shake, function () { + step += 1 +}) +basic.forever(function() { + basic.showNumber(step) +}) +step = 0 +``` + +## Display lag + +Did you notice there is a lag in the display of steps? +This is because the ``step`` value can change **while** the @boardname@ is displaying a number. +To remove the lag, add ``||led:stop animation||`` after changing the value of ``step``. + +```blocks +let step = 0 +input.onGesture(Gesture.Shake, function () { + step += 1 + led.stopAnimation() +}) +basic.forever(function() { + basic.showNumber(step) +}) +step = 0 +``` diff --git a/docs/static/mb/projects/step-counter.png b/docs/static/mb/projects/step-counter.png new file mode 100644 index 0000000000000000000000000000000000000000..9454f9aabb1f3a01f19d623ca336333baa07280c GIT binary patch literal 21317 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 RY}5b%002ovPDHLkV1nF9&`$sW literal 0 HcmV?d00001