Controlar Led 13 de Arduino desde email

Hola:

Hice un código con C# de la consola en el cual puedes apagar y encender el famoso y popular Led 13. Uso el LCD Keypad Shield para ver en pantalla los mensajes a parte desde el PC.

El código es una versión alfa pero funcional. Puede recibir códigos desde un correo electrónico pero no puede ejecutar comandos desde el teclado ni directamente desde Arduino, voy por parte.

Les dejo el código para que hagan pruebas y comente sus impresiones sobre lo que he hecho para mejorarlo. Si, está en modo consola, má adelante se hará con Windows Form y WPF, a parte de C#, también con Visual Basic .net y Visual C++.

Puedes enviar con tu movil (o celular) en cualquier parte y enviar comandos.

Dejo claroue tiene sistema de filtros de los email, solo acepta comandos de los email que hayas filtrado, de lo contrario cualquiera te puede cerrar o bajar las persianas de tu casa, ajjajajajjaja.

Recuerdo que la aplicación es alfa, falta codear que de respuesta desde el P hacia el movil el estado de las persianas, ventiladores o luces de la casa como están y si realmente se ha ejecutado dicha orden.

A descargar si no lo tienen, Visual Studio Community gratuito.

Código Arduino:

#include <LiquidCrystal.h>

// Inicializa la librería con sus pines indicados.
// RS, RW, Enable, D4, D5, D6, D7.
LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);
// LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// Pin 10 para saber que es luz de fondo.
const byte LuzFondo = 10;
 
const byte Led = 13;   // Declaramos la variable pin del Led.
char caracter;
String comando;

void setup()
{
  pinMode(Led, OUTPUT);  // Inicializa el pin del LED como salida:
  Serial.begin(115200);     // Puerto serie 115200 baudios.
  lcd.begin(16, 2);         // Formato de pantalla.
  lcd.clear();      // Borra la pantalla y su posición superior izquierda.
  lcd.print("    Arduino     ");
  delay(1000);
}

void loop()
{
  /*
    Voy leyendo carácter a carácter lo que se recibe por el canal serie
    (mientras llegue algún dato allí), y los voy concatenando uno tras otro
    en una cadena. En la práctica, si usamos el "Serial monitor" el bucle while
    acabará cuando pulsamos Enter. El delay es conveniente para no saturar el
    canal serie y que la concatenación se haga de forma ordenada.
  */
  while (Serial.available() > 0)
  {
    caracter = Serial.read();
    comando.concat(caracter);
    delay(10);
  }

  /*
    Una vez ya tengo la cadena "acabada", compruebo su valor y hago que
    la placa Arduino reacciones según sea este. Aquí podríamos hacer lo
    que quisiéramos: si el comando es "tal", enciende un Led, si es cual,
    mueve un motor... y así.
  */

  // Si los carácteres es recibido y verdadero.
  if (comando.equals("Luz_ON") == true)
  {
    digitalWrite(Led, HIGH); // Enciende el Led 13.
    Serial.write("ON - Led encendido.");    // Envía este mensaje al PC.
    lcd.setCursor(0, 1);
    lcd.print("Luz ON.         "); // Mostrar en el LCD.
  }


  if (comando.equals("Luz_OFF") == true)
  {
    digitalWrite(Led, LOW); // Apaga el Led 13.
    Serial.write("OFF - Led apagado. ");  // Envía este mensaje al PC.
    lcd.setCursor(0, 1);
    lcd.print("Luz OFF.        "); // Mostrar en el LCD.
  }

  // Limpiamos la cadena para volver a recibir el siguiente comando.
  comando = "";
}

Sigue un tema más abajo.

Luz_OFF // Apaga el Led de Arduino.

Luz_ON // Enciende el Led de Arduino.

Salir. // Sale del programa C# o se cierra.

Son solo tres comandos. Esos comandos indicado arriba solo lo pones en el email en Asuntos y lo detecta. En mensaje no tienes que poner nada, los lee y muestra en pantalla pero nada más.

Código C#:
Como no cabe en la web, lo pongo como descarga.

Los que los prueben, espero cualquier impresión.

Saludos.

Program.txt (11.3 KB)

No logre descubrir tu consulta.

Mas bien me sorprendió:

// RS, RW, Enable, D4, D5, D6, D7.
LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);

La documentación de la librería menciona que el pin RW = GND.

Hola:

No te preocupe, usas el típico.

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

Les dejo un aimagen que tengo por ahora.

Ver imagen.

Saludos.