From 45e85cba6d301080fbd23b95310a2e1a327b44cb Mon Sep 17 00:00:00 2001 From: Galen Nickel Date: Fri, 18 Jan 2019 07:52:09 -0800 Subject: [PATCH] Blocks2JS - Command Responder lesson (#1791) * text and pics for 'switch' lesson * download/try 'on' not 'to' --- docs/courses/blocks-to-javascript.md | 9 ++ .../blocks-to-javascript/command-responder.md | 146 ++++++++++++++++++ .../command-responder.png | Bin 0 -> 28225 bytes 3 files changed, 155 insertions(+) create mode 100644 docs/courses/blocks-to-javascript/command-responder.md create mode 100644 docs/static/courses/blocks-to-javascript/command-responder.png diff --git a/docs/courses/blocks-to-javascript.md b/docs/courses/blocks-to-javascript.md index fe07bb37..847e858c 100644 --- a/docs/courses/blocks-to-javascript.md +++ b/docs/courses/blocks-to-javascript.md @@ -45,6 +45,13 @@ Are you ready to try JavaScript to write your code? "cardType": "side", "imageUrl": "/static/courses/blocks-to-javascript/conditional-loops.png" }, + { + "name": "Command Responder", + "description": "Code a network command responder and learn how to use the switch statement in JavaScript", + "url": "/courses/blocks-to-javascript/command-responder", + "cardType": "side", + "imageUrl": "/static/courses/blocks-to-javascript/command-responder.png" + }, { "name": "Writing Functions", "description": "Writing reusable functions in JavaScript", @@ -60,5 +67,7 @@ Are you ready to try JavaScript to write your code? [Hello JavaScript](/courses/blocks-to-javascript/hello-javascript), [Starter Blocks](/courses/blocks-to-javascript/starter-blocks), [Writing Code](/courses/blocks-to-javascript/writing-code), +[Complex Conditionals](/courses/blocks-to-javascript/complex-conditionals), [Conditional Loops](/courses/blocks-to-javascript/conditional-loops), +[Command Responder](/courses/blocks-to-javascript/command-responder), [Writing Functions](/courses/blocks-to-javascript/writing-functions) diff --git a/docs/courses/blocks-to-javascript/command-responder.md b/docs/courses/blocks-to-javascript/command-responder.md new file mode 100644 index 00000000..99de5cd2 --- /dev/null +++ b/docs/courses/blocks-to-javascript/command-responder.md @@ -0,0 +1,146 @@ +# Command Responder + +## ~ avatar + +Code a network command responder and learn how to use the switch statement. + +## ~ + +## Make a protocol + +Effective network communication requires a method of receiving requests from a sender and a way to send back a response so that the sender can understand it. This is done by using a format for data that both the sender and receiver agree to use. The sequence of actions and format to request some data, and receive a response, is called a communication _protocol_. + +## Receive a command request + +For the @boardname@ we can make a simple protocol which just responds with some data that relates to a command request from the sender. To get started, we'll create a command called ``"temp"`` which asks the receiving @boardname@ to reply with its current measured temperature. We can call the program that does this a "command responder". + +Our command responder code fits inside an ``||radio:on radio received||`` block using the ``receivedString`` parameter. Go get a ``||radio:on radio received||`` block and put it in the workspace. Inside that block, put in a ``||logic:if then||``. Set the condition to check that ``receivedString`` is equal to ``"temp"``. Then, in the ``||logic:if then||``, send the current value for the temperature back to the requester using ``||radio:radio send value||``. The value name is the same as the command in ``receivedString``. This forms the response part of our protocol. + +```block +radio.onReceivedString(function (receivedString) { + if (receivedString == "temp") { + radio.sendValue(receivedString, input.temperature()) + } +}) +``` + +We can make our protocol more useful by allowing the sender to give more commands. Let's add 3 more responses for light level, compass heading, and acceleration. The commands for these that the the requester can send are: ``"light"``, ``"heading"``, ``"accel"``. + +Drag out the ``||radio:radio send value||`` block from the ``||logic:if then||`` and put it just after it. Make a new variable and name it ``response``. Pull out the ``||variables:response||`` variable from the ``||variables:Variables||`` drawer and put it in ``||radio:radio send value||`` where the the ``||input:temperature||`` block is. Get a ``||variables:set response to||``, put it into the ``||logic:if then||``. Place a ``||input:temperature||`` in the value slot where `0` is. We now have the ``"temp"`` command response refactored to let us easily add the other command responses. + +```block +let response = 0 +radio.onReceivedString(function (receivedString) { + if (receivedString == "temp") { + response = input.temperature() + } + radio.sendValue(receivedString, response) +}) +``` + +Find the **(+)** symbol on the ``||logic:if then||`` block and click it 4 times to make **3** ``||logic:else if||`` sections and **1** ``||logic:else||`` section. For each ``||logic:else if||`` condition, copy the condtion from ``||logic:if then||`` and put in the strings for the remaining 3 commands. Also, for each one, set ``response`` to the proper ``||input:Input||`` value. Finally, in the ``||logic:else||`` section, set ``response`` to `0` in case an unknown command is received. + +```blocks +let response = 0 +radio.onReceivedString(function (receivedString) { + if (receivedString == "temp") { + response = input.temperature() + } else if (receivedString == "light") { + response = input.lightLevel() + } else if (receivedString == "heading") { + response = input.compassHeading() + } else if (receivedString == "accel") { + response = input.acceleration(Dimension.Strength) + } else { + response = 0 + } + radio.sendValue(receivedString, response) +}) +``` + +## The `switch` statement + +JavaScript has a very powerful way to write code to check multiple values. It's really useful for processing communications messages that are sent using a protocol like in the command responder we just made. It's called a **switch** statement. It works by checking for one or more cases of possible values for a variable. When a case is matched to the value in the variable, you can run some code just for that case. You have to go to the JavaScript editor to use the switch statement. + +To compare the ``switch`` statement to the ``||logic:if then||``, let's look at just the ``"temp"`` command case again, this time in the JavaScript editor. Make this code again in Blocks: + +```blocks +let response = 0 +radio.onReceivedString(function (receivedString) { + if (receivedString == "temp") { + response = input.temperature() + } + radio.sendValue(receivedString, response) +}) +``` + +Now switch over to JavaScript: + +```typescript +let response = 0 +radio.onReceivedString(function (receivedString) { + if (receivedString == "temp") { + response = input.temperature() + } + radio.sendValue(receivedString, response) +}) +``` + +For the complete ``if`` statement, which earlier was our ``||logic:if then||`` block, we'll replace it with a ``switch`` statement having 1 case for the ``"temp"`` command. Change your ``if`` statement to a ``switch`` statement like this: + +```typescript +let response = 0 +radio.onReceivedString(function (receivedString) { + switch (receivedString) { + case "temp": + response = input.temperature() + } + radio.sendValue(receivedString, response) +}) +``` + +The ``receivedString`` parameter is what the ``switch`` statement is "switching" on inside the ``( )``. This means it's going to select a case that matches the current value of ``receivedString``. A case is made with a ``case`` statement inside the `{ }` of the ``switch``. Under the ``case`` statement is the code you want to run for that particular case. You can have multiple cases and run different code for each. + +The cases can have more than one line of code and they end with a ``break`` statement. If the ``break`` isn't at the end of the ``case``, the code in the next ``case`` will run too, all the way until the next ``break``. For our command responder, we'll put in a ``break`` for every ``case``. + +The complete command responder code using the ``switch`` looks like this: + +```typescript +let response = 0 +radio.onReceivedString(function (receivedString) { + switch (receivedString) { + case "temp": + response = input.temperature() + break + case "light": + response = input.lightLevel() + break + case "heading": + response = input.compassHeading() + break + case "accel": + response = input.acceleration(Dimension.Strength) + break + default: + response = 0 + } + radio.sendValue(receivedString, response) +}) +``` + +All of the cases after the first one replace the ``||logic:else if||`` blocks. Also, you see that at the end of the ``switch`` there is a ``default`` statement. This is similar to the ``||logic:else||`` part of the ``||logic:if then else||`` block. It takes care of all other values of ``receivedString`` that don't match any of the cases in ``switch``. You could put a ``break`` at the end of ``default`` but it's not necessary since it's the last part of the ``switch`` statement. + +## Try it! + +If you have a second @boardname@ to use, add some sending code to the command responder program we have already. Try sending one of the commands: + +```blocks +radio.setGroup(1) +radio.sendString("temp") +``` + +Download and try both the ``||logic:if then||`` and the ``switch`` statement versions of the program on each @boardname@. See if each version works the same. + +```package +radio +``` \ No newline at end of file diff --git a/docs/static/courses/blocks-to-javascript/command-responder.png b/docs/static/courses/blocks-to-javascript/command-responder.png new file mode 100644 index 0000000000000000000000000000000000000000..1d77598829e7d34b4c3ecb70687e34b28d9ffd2d GIT binary patch literal 28225 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 Rz;SP6hI(eY_1Z2m{|CPtf)oG% literal 0 HcmV?d00001