Hola:
Centrándome en el .cmd, o lo que es lo mismio, el .bat, no funciona el código:
@Echo OFF & (CHCP 1252)1>Nul
MODE.com COM4 BAUD=115200 PARITY=n DATA=8 STOP=1
CHOICE.exe /C "12" /M "Escoge una opción..."
If %ErrorLevel% EQU 1 (
Echo:Luz_ON>COM4
)
If %ErrorLevel% EQU 2 (
Echo:Luz_OFF>COM4
)
Pause&Exit
Lo que he hecho es hacer guardar hacer dos archivos, uno llamado
puerto_Luz_ON.txt y el otro llamado
puerto_Luz_OFF.txt. En el puerto_Luz_ON.txt tiene solo el texto Luz_ON y el otro Luz_OFF de los txt.
Luego en el cmd puse:
copy puerto_Luz_ON.txt COM4:
Ya me funciona, he enviado Luz_ON que está en el interior del archivo puerto_Luz_ON.txt.
Modificando el Scrip.cmd de arriba lo he hecho funcionar así:
@Echo OFF & (CHCP 1252)1>Nul
MODE.com COM4 BAUD=115200 PARITY=n DATA=8 STOP=1
CHOICE.exe /C "12" /M "Escoge una opción..."
If %ErrorLevel% EQU 1 (
copy puerto_Luz_ON.txt COM4:
)
If %ErrorLevel% EQU 2 (
copy puerto_Luz_OFF.txt COM4:
)
Pause&Exit
Lo que no me hace gracia es que tengo que crear dos archivos .txt al lado del Script.cmd. La idea es tener todo en un solo archivo .cmd. Para eso se podría que no se si se puede, el Script.cmd crear los dos archivos .txt y su contenido Luz_ON y Luz_OFF. Poco a poco va tomando forma.
Datos de interés, el modo más rápido y abreviado frente a este:
MODE.com COM4 BAUD=115200 PARITY=n DATA=8 STOP=1
Es este:
MODE COM4:115200,n,8,1
En cuanto hacer el control del puerto serie con F#, no tiene que ver con C#, su codigo en C# si lo tengo hecho.
using System;
using System.IO.Ports;
using System.Text;
namespace Arduino_Consola_cs
{
class Program
{
static void Main(string[] args)
{
// Título de la ventana.
Console.Title = "Arduino Consola C#";
// Tamaño ventana consola.
Console.WindowWidth = 55; // X. Ancho.
Console.WindowHeight = 18; // Y. Alto.
// Cree un nuevo objeto SerialPort con la configuración predeterminada.
SerialPort Puerto_serie
= new SerialPort
("COM4");
Puerto_serie.BaudRate = 115200;
Puerto_serie.Parity = Parity.None;
Puerto_serie.StopBits = StopBits.One;
Puerto_serie.DataBits = 8;
Puerto_serie.Handshake = Handshake.None;
Puerto_serie.RtsEnable = true;
// Establecer los tiempos de espera de lectura / escritura.
Puerto_serie.ReadTimeout = 500; // Milisegundos.
Puerto_serie.WriteTimeout = 500;
// Detecta cualquier dato recibido.
Puerto_serie
.DataReceived += new SerialDataReceivedEventHandler
(DataReceivedHandler
);
Puerto_serie.Open(); // Abrir puerto.
ConsoleKey tecla;
Console.WriteLine("Pulse tecla 1 para encender y 2 para apagar:");
do
{
tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.
switch (tecla)
{
case ConsoleKey.D1: // Tecla 1 del teclado estandar.
case ConsoleKey.NumPad1: // Tecla 1 del número del pad.
byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length); // Envía los datos del buffer todo su contenido.
Console.WriteLine("Comando \"Luz_ON\" enviado."); // Muestra en pantalla comandos enviado.
break;
case ConsoleKey.D2:
case ConsoleKey.NumPad2:
byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
Console.WriteLine("Comando \"Luz_OFF\" enviado.");
break;
default:
Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");
break;
}
} while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.
Console.WriteLine("Presione cualquier tecla para terminar...");
Console.WriteLine();
Console.ReadKey(); // Espera pulsar una tecla cualquiera.
Puerto_serie.Close(); // Cierra el puerto serie.
}
// Detecta cualquier dato entrante.
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
Console.WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.
}
}
}
Si C# ayuda hacer lo mismo en F#, lo tengo crudo porque apenas conozco sus cosas.
Como curiosidad de una noticia nueva del CMD de Windows.
www.muycomputer.com/2017/08/04/consola-de-windows-color/Saludos.