e3975e65e5
* Accessibility changes
101 lines
3.8 KiB
Markdown
101 lines
3.8 KiB
Markdown
# Code
|
||
|
||
Let's build the code that, when the user presses the button ``A`` on a @boardname@, will send an impulse over a wire to the receiving @boardname@ and turn an LED on there.
|
||
|
||
Make sure that the sending and receiving wires run symmetrically across: pin ``P1`` on one @boardname@ is connected to pin ``P2`` on the other, and vice versa, as shown on the pictures in the "Make" section. This way we can use the same code on both @boardname@s .
|
||
|
||
## Step 1
|
||
|
||
We start with a block that digitally writes **high** (value ``1``) to the sending @boardname@'s pin ``P1``. This block can be found in _Pins_ drawer of the Advanced section.
|
||
|
||
```blocks
|
||
pins.digitalWritePin(DigitalPin.P1, 1)
|
||
```
|
||
|
||
## Step 2
|
||
|
||
To show what we are sending, we add a block to turn on an LED in the centre of the LED display (2,2) using _plot x, y_ :
|
||
|
||
```blocks
|
||
pins.digitalWritePin(DigitalPin.P1, 1)
|
||
led.plot(2, 2)
|
||
```
|
||
|
||
## Step 3
|
||
|
||
Now that we know how to send the signal, we only want to be doing it while the button ``A`` is pressed.
|
||
Pick an _if_ block from the _Logic_ drawer (you'll need the version with _else_ part that will remain empty for now). Add a check whether the button ``A`` is pressed from the _Input_ drawer and move the blocks from the previous step into _then_ part :
|
||
|
||
```blocks
|
||
if (input.buttonIsPressed(Button.A)) {
|
||
pins.digitalWritePin(DigitalPin.P1, 1)
|
||
led.plot(2, 2)
|
||
} else { }
|
||
```
|
||
|
||
|
||
## Step 4
|
||
|
||
For the _else_ branch (while the button A is not pressed) we want to do the opposite of what we did in the _then_ branch: take the value of pin ``P1`` to **low** (0) and unplot the corresponding LED on the sending @boardname@ :
|
||
|
||
```blocks
|
||
if (input.buttonIsPressed(Button.A)) {
|
||
pins.digitalWritePin(DigitalPin.P1, 1)
|
||
led.plot(2, 2)
|
||
} else {
|
||
pins.digitalWritePin(DigitalPin.P1, 0)
|
||
led.unplot(2, 2)
|
||
}
|
||
```
|
||
|
||
## Step 5
|
||
|
||
Let's wrap it all in a forever loop so this code runs in the background, forever checking the button ``A`` and sending the appropriate signal to the receiver.
|
||
Modify your code so that your code looks like this. Download the code into one of the @boardname@s, press and release button ``A`` a few times.
|
||
|
||
```blocks
|
||
basic.forever(() => {
|
||
if (input.buttonIsPressed(Button.A)) {
|
||
pins.digitalWritePin(DigitalPin.P1, 1)
|
||
led.plot(2, 2)
|
||
} else {
|
||
pins.digitalWritePin(DigitalPin.P1, 0)
|
||
led.unplot(2, 2)
|
||
}
|
||
})
|
||
```
|
||
|
||
The sending part is done, so we are going to add the receiving part.
|
||
|
||
## Step 6
|
||
|
||
The receiver needs to digitally read from the pin to which the sending @boardname@ will be writing (``P2``) over the wire. Let's start by going to the _Pin_ drawer, adding digital read pin ``P0`` and changing the pin value to ``P2``.
|
||
Now we want to examine the value read from ``P2`` and check whether it is **high** (value ``1``) or not. Go to the _Logic_ drawer, first pick an _if_ block, then come back for a comparison operator (=). Plug in our digital read block as one operand and the value ``1`` as the other.
|
||
We shall turn the LED in the bottom right corner (4,4) on to indicate that we received **high** and turn it off otherwise.
|
||
Your code should look as follows:
|
||
|
||
```blocks
|
||
basic.forever(() => {
|
||
if (input.buttonIsPressed(Button.A)) {
|
||
pins.digitalWritePin(DigitalPin.P1, 1);
|
||
led.plot(2, 2);
|
||
} else {
|
||
pins.digitalWritePin(DigitalPin.P1, 0);
|
||
basic.clearScreen();
|
||
}
|
||
if (pins.digitalReadPin(DigitalPin.P2) == 1) {
|
||
led.plot(4, 4);
|
||
} else {
|
||
led.unplot(4, 4);
|
||
}
|
||
});
|
||
```
|
||
|
||
Your telegraph is ready!
|
||
|
||
## Step 7
|
||
|
||
* Connect the first @boardname@ to your computer using your USB cable and download the telegraph script to it.
|
||
* Connect the second @boardname@ to your computer using your USB cable and download the telegraph script to it.
|
||
* The first person and second person can take turns pressing button A on their @boardname@s to play the telegraph game!
|