Una vez visto el sistema para enviar fácilmente datos desde el Arduino al PC, pasemos a la función inversa que también puede realizar este mismo programa.
Observemos que en el montaje efectuado sobre la Protoboard además de la placa del Arduino y dos botones, hay también dos LED's, uno verde, que llamaremos LED-1, y otro rojo que llamaremos LED-2. Pues estos dos LED's los encenderemos y apagaremos desde el ordenador.

El monitor serie del programa IDE de Arduino es capaz de recibir datos de éste vía USB e imprimirlos, esto ya lo hemos visto, pero si introducimos un carácter en la línea superior y damos Enter, también es capaz de enviarlo al Arduino, el cual, para recibirlo debe disponer de las órdenes correspondientes...
En este caso las órdenes son las siguientes:
=================================
int dato=Serial.read(); // mientras tanto lee un byte enviado desde el ordenador
if (dato!=-1) // -1 indica que no hay datos que leer
{} // aquí se puede intercalar una monitorización del valor ASCII de los caracteres entrados "Serial.println(dato);"
if (dato==49) // valor ASCII que corresponde al carácter "1"
{
digitalWrite(2, HIGH); // enciende el LED-1 conectado al pin 2
}
if (dato==50) // valor ASCII que corresponde al carácter "2"
{
digitalWrite(2, LOW); // apaga el LED-1 conectado al pin 2
}
..............
..............
=================================
La orden "Serial.read()" lee, esto es evidente, pero a diferencia de la "Serial.print()" que es capaz de enviar una cadena completa, sólo lee un carácter cada vez, con lo cual, si deseamos leer una secuencia de ellos (como una frase), la orden deberá estar metida en un bucle que repita una y otra vez la lectura y sume cada carácter al anterior. En este caso, sólo debemos leer el carácter único que hemos escrito y asignar su valor ASCII (que puede encontrarse en cualquier tabla ASCII), a la variable llamada "dato". Seguidamente, una serie de órdenes condicionales if() seleccionarán la función a efectuar dependiendo del carácter enviado.

...En este caso, vamos a encender el LED-1 verde al pulsar la tecla "1" del ordenador y lo apagaremos con la tecla "2". En la tabla ASCII encontramos que a dichos caracteres corresponden valores de 49 para el "1", y de 50 para el "2".
...Pues bien, cuando el programa no recibe nada del ordenador, el valor de "dato" es siempre -1, pero al nosotros pulsar la tecla "1" se recibirá el valor 49, y en consecuencia, a través de su if() selectivo se activará la orden "digital.Write(2, HIGH)", que pondrá a valor alto la pata 2 de la placa Arduino y por tanto encenderá el LED-1 verde conectado a ella a través de una resistencia delimitadora.

...De igual forma, al pulsar la tecla "2" y recibir el valor 50, se activará la orden "digital.Write(2, LOW)", que pondrá a valor bajo el mismo pin y por tanto apagará el LED
En el programa publicado en mensajes anteriores, también hay las órdenes para hacer lo mismo con el LED-2 rojo, pulsando respectivamente las teclas 3 (encender) y 4 (apagar), pero no las he repetido en este resumen porque son de idéntica estructura que las anteriores.

Mediante este procedimiento, desde el ordenador podríamos encender y apagar luces de la casa, controlar la calefacción, motores, robots, alarmas y demás, así como enviar órdenes para leer valores de temperatura, presión o cualquier otra variable y enviarlas de vuelta al ordenador para su almacenamiento.
Un saludo a todos