# Rover marciano

##### Control remoto

Programemos un **robot de exploración a control remoto**. Esta vez serán necesarias dos placas micro:bit, una receptora montada sobre Cutebot y una emisora a modo de mando de control remoto.

Además, Cutebot enviará a la placa usada como control la información que capten sus sensores durante las exploraciones.

En primer lugar, es preciso que ambas placas ajusten la radio **Bluetooth** en el mismo grupo y banda de frecuencia. Los bloques necesarios se encuentran en el menú <span style="color: rgb(186, 55, 42);">**Radio**</span>. El siguiente código es por lo tanto común a la placa emisora y a la receptora.

[![Rover00.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover00.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover00.png)

Vamos ahora con el emisor. Cuando **pulsemos los botones A+B**, el rover debe **avanzar**. Para ello le enviaremos por radio una cadena de texto con el código "Av".

[![Rover01.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover01.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover01.png)

Al pulsar el **botón A** el mando enviará un código "Iz", que indicará un **giro a la izquierda**. De la misma forma, Al pulsar el **botón B** el mando mandará un código "De", indicativo de un **giro a la derecha**.

[![Rover02.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover02.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover02.png)

El código básico del emisor está ya resuelto. En cuanto al **receptor**, éste sólo debe ocuparse de mover el rover cuando reciba los códigos. Un rover marciano debe moverse muy despacio, así que cada vez que se reciba un código, las ruedas se mantendrán en movimiento durante unos pocos milisegundos.

[![Rover09.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover09.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover09.png)

La estructura <span style="color: rgb(53, 152, 219);">**si...si no, si...**</span> se obtiene del menú **<span style="color: rgb(53, 152, 219);">Lógica</span>**; habrá que pulsar sobre los símbolos <span style="color: rgb(53, 152, 219);">**+**</span> y **<span style="color: rgb(53, 152, 219);">-</span>** para añadir o quitar condiciones a la estructura.

El evento <span style="color: rgb(186, 55, 42);">**al recibir radio**</span> se encuentra en el menú **<span style="color: rgb(186, 55, 42);">Radio</span>**. <span style="color: rgb(186, 55, 42);">**receivedString**</span> hace referencia al código recibido, y puede arrastarse para encajarse en los comparadores <span style="color: rgb(230, 126, 35);">**incluye**</span>, que se encuentran en el menú **^Avanzado <span style="color: rgb(230, 126, 35);">Texto</span>**<span style="color: rgb(0, 0, 0);">.</span>

<span style="color: rgb(0, 0, 0);">El código es muy claro: cuando se recibe una cadena de texto se comprueba si contiene el código "Av" y, en caso afirmativo, se hace avanzar a Cutebot durante 500 ms. Si por el contrario el código es "Iz", el robot girará a la izquierda durante 250 ms. Por último, cuando el código sea "De", el robot girará a la derecha durante otros 250 ms. FInalmente, se pararán los motores.  
</span>

##### <span style="color: rgb(0, 0, 0);">Transmisión de datos ambientales</span>

<span style="color: rgb(0, 0, 0);">Hagamos ahora que el rover transmita información sobre los obstáculos que vaya encontrando. En primer lugar haremos que su placa micro:bit muestre el logotipo de la misión de exploración planetaria (La Tierra y Marte):</span>

<span style="color: rgb(0, 0, 0);">[![Rover04.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover04.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover04.png)</span>

Cada vez que el robot reciba un código para moverse, se comprobará la distancia medida por el sensor y, si ésta resulta ser menor o igual a 10 cm, se enviará el dato numérico al mando a distancia. Como puede verse a continuación, esta función se consigue añadiendo sólo dos bloques más.

[![Rover08.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover08.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover08.png)

Por su parte, la placa que se usa como control remoto debe mostrar en su pantalla el valor de la distancia que haya medido y retransmitido el rover. En primer lugar borraremos la pantalla LED cada vez que enviemos un código al rover.

[![Rover06.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover06.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover06.png)

Mediante el bloque <span style="color: rgb(132, 63, 161);">**plot bar graph**</span> del menú <span style="color: rgb(132, 63, 161);">**LED**</span>, mostraremos en la pantalla del mando una barra luminosa cada vez que se reciba un número desde el rover.

![Rover07.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover07.png)

Mediante la función de resta entre 10 y el distancia recibida desde el rover conseguimos que la barra muestre su altura máxima cuando la distancia a un obstáculo sea mínima. De igual forma, la barra tendrá un altura nula cuando no haya obstáculos cercanos.

<p class="callout info">Podemos conseguir un movimiento más preciso del rover reduciendo los tiempos de avance y giro, por ejemplo, a 250 ms y 125 ms. También podemos añadir la función de marcha atrás al pulsar el logo táctil.</p>