|
231
|
Programación / .NET (C#, VB.NET, ASP) / Mostrar nombre de los puertos
|
en: 26 Diciembre 2015, 14:18 pm
|
Hola Hice un ejemplo muy pequeño, que detecta los puertos COM físico y virtuales en el ComboBox, en el cual solo muestra COM1 y COM4 a seas. Como se puede ver en el Administrador de dispositivos. ¿Cómo puedo hacer que se muestre el nomrbre del dispositivo detectado por el comboBox que muestre el nombre? El código de lo que he hecho es este. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; // No olvidar. namespace Nombre_COM { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al combo try { comboBox_Puerto.DataSource = SerialPort.GetPortNames(); } catch { MessageBox.Show("No encuentra ningún puerto físico ni virtual.", "Aviso:", MessageBoxButtons.OK, MessageBoxIcon.Warning); } // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al combo comboBox_Puerto.DataSource = SerialPort.GetPortNames(); // // Añade puertos disponibles físicos y virtuales. serialPort1.PortName = comboBox_Puerto.Text.ToString(); } // Detecta USB o puerto serie virtual cuando lo conecta y desconecta del cable. protected override void WndProc(ref Message USB) { if (USB.Msg == 0x219) { comboBox_Puerto.DataSource = SerialPort.GetPortNames(); } base.WndProc(ref USB); // Detecta si hay cambios en el usb y si los hay los refleja. } private void button_Conectar_Click(object sender, EventArgs e) { try { serialPort1.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente. serialPort1.Open(); // Abrir puerto. comboBox_Puerto.Enabled = false; button_Conectar.Enabled = false; button_Desconectar.Enabled = true; } catch { MessageBox.Show("El puerto no existe.", "Aviso:", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } private void button_Desconectar_Click(object sender, EventArgs e) { serialPort1.Close(); // Cerrar puerto. comboBox_Puerto.Enabled = true; button_Conectar.Enabled = true; button_Desconectar.Enabled = false; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (serialPort1.IsOpen) // ¿El puerto está abierto? { serialPort1.Close(); // Cerrar puerto. } } } }
Felices fiestas 2.015.
|
|
|
232
|
Programación / .NET (C#, VB.NET, ASP) / Quiero controlar el DexDrive
|
en: 23 Diciembre 2015, 12:48 pm
|
Hola: Antes que nada, disculpen si esto no va aquí. Llevo un tiempo averguando como se controla el famoso y popular de la época de piedra el DexDrive con Visual Studio. Es un dispositivo que lee y guarda los datos de la Memory Card de la PlayStation 1 en el PC por puerto serie, lo que se usaba mucho en la época de antes. Lo he desarmado. Tiene un Led verde, cuando envia o recibe datos, se cambia a naranja, todo esto con el puerto COM1. Si no ejecutas su aplicación llamado DeXplorer 2.0.920, no funciona nada aunque lo tengas alimentado, me refiero el Led. Sospecho que usa RTS, CTS, DTR, etc. A parte de los Rx, Tx y GND. Aquí encontré una aplicación o código fuente que no entiendo ni papa y quiero adaptarlo a Visual C#, más bien hacer una interfaz como el DexPlorer, al menos más moderno. Lo curioso que DeXplorer sabe cuando está conectado el dispositivo DexDrive, si tiene la Memory Card insertada o no. Tal vez aquí me indique como hacerlo. https://github.com/fbriere/linux-dexdrive/blob/master/protocol.txtEsos códigos quiero de C, que por eso lo he puesto aquí, pasarlo a Visual C#. El diseño lo tengo hecho, solo el diseño, no la programación. He intentado hacer caso esta parte en Visual C#. COMMANDS --------
For all commands specifying a (16-bit) frame number, <lsb> and <msb> are, respectively, its least and most significant bytes. Make sure to pay close attention to the order, as it varies between commands.
Note that the Nintendo 64 DexDrive will get stuck if it is sent an incomplete command. At that point, the only solution is to unplug it completely, and plug it back (power first, then serial).
0x00 INIT
Args: <17 bytes> Reply: ID
Initializes the DexDrive; see the POUTING section below.
The contents of the 17 bytes does not appear to have any significance, except for determining the contents of the "weird" byte in the ID reply. See the WEIRD FORMULA section below for more details.
InterAct's DexPlorer software uses the following hard-coded string:
10 29 23 be 84 e1 6c d6 ae 52 90 49 f1 f1 bb e9 eb Enviar esos 17 bytes pero no pasa nada. private void button6_Click(object sender, EventArgs e) { byte[] mBuffer = new byte[17]; mBuffer[0] = 0x10; mBuffer[1] = 0x29; mBuffer[2] = 0x23; mBuffer[3] = 0xBE; mBuffer[4] = 0x84; mBuffer[5] = 0xE1; mBuffer[6] = 0x6C; mBuffer[7] = 0xD6; mBuffer[8] = 0xAE; mBuffer[9] = 0x52; mBuffer[10] = 0x90; mBuffer[11] = 0x49; mBuffer[12] = 0xF1; mBuffer[13] = 0xF1; mBuffer[14] = 0xBB; mBuffer[15] = 0xE9; mBuffer[16] = 0xEB; serialPort1.Write(mBuffer, 0, mBuffer.Length); } Ni una respuesta. Creo y no estoy seguro, que los baudios son 38400. Boceto que hice con Visual C#,sin programarlo aún. Saludos.
|
|
|
233
|
Programación / .NET (C#, VB.NET, ASP) / Intentar hacer scroll bar
|
en: 23 Diciembre 2015, 01:53 am
|
Hola: El componente richTextBox en la aplicación WPF, al introducir datos, se crea el auto scroll, luego se va viendo lo lúltimo recibido abajo. El código es este. // Asignar el valor de la trama al richTextBox. richTextBox1.Text = Recibidos + "\n"; // Selecciona la posición final para leer los mensajes entrantes. richTextBox1.SelectionStart = richTextBox1.Text.Length; // Mantiene el scroll en la entrada de cada mensaje. richTextBox1.ScrollToCaret();
El problema es usarlo con WPF, no hace ningún tipo de scrollbar. ¿Cuál es su equivalencia para WPF? Un cordial saludos. PD: Uso Visual Studio Community 2015.
|
|
|
234
|
Programación / .NET (C#, VB.NET, ASP) / Temporizador C#
|
en: 23 Diciembre 2015, 00:16 am
|
Hola: En el formulario tengo un label y dos buttons. En el label muestra 00:00:00, que son horas, minutos, segundos. El primer botón empieza llamado Start el contador, el otro botón llamado Stop es detener el temporizador y se pone a 00:00:00 y se queda detenido. ¿Cómo se hace en C#? Por ahora he hecho esto. public class form1{ private Timer _timer = null; public void Form_Load(...){ _timer.Interval = 1000; // 1seg _timer.tick += timer_Tick; } private void btnIniciar_Click(...){ _timer.Start(); } private void btnIniciar_Click(...){ _timer.Stop(); } private void timer_Tick(...){ label.Text = DateTime.Now.ToString("HH:mm:ss") } }
La salida muestra la hora, quiero que muestre 00:00:00 cuando está en Stop, que empieze a contar el tiempo, cuando le de desconectar, se pone a 00:00:00. El problema que me muestra la hora actual, y no deseo eso. Saludos.
|
|
|
235
|
Programación / .NET (C#, VB.NET, ASP) / Mejorar este código
|
en: 11 Diciembre 2015, 12:19 pm
|
Hola: Antes que nada, ya que es modo consola, lo pongo en español bien español. Enviar datos:1. Configuración del puerto serie. 2. Abrir puerto. 3. La consola espera que introduza datos. 4. Al introducir datos, lo guarda en una variable string, da igual lo que escribas, letras, números o símbolos. 5. Si pulsas Enter envía datos al puerto serie. Recibir datos:1. La Consola está en espera de recibir algún dato. 2. Lo guarda en una variable string. 3. La Consola muestra en pantalla los datos recibidos. 4. Si cierra la consola o palicación, cierra el puerto. El código de enviar datos que he hecho paso a paso es este. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO.Ports; // No olvidar. using System.Threading; namespace Puerto_serie_consola_CS { class Program { static void Main(string[] args) { Console.Title = "Puerto serie C#"; string Enviar_datos = ""; SerialPort Puerto_serie; // Crear un nuevo objeto SerialPort con la configuración predeterminada. Puerto_serie = new SerialPort (); // Configuración. Puerto_serie.PortName = "COM4"; // Número del puerto serie. Puerto_serie.BaudRate = 115200; // Baudios. Puerto_serie.Parity = Parity.None; // Paridad. Puerto_serie.DataBits = 8; // Bits de datos. Puerto_serie.StopBits = StopBits.Two; // Bits de parada. Puerto_serie.Handshake = Handshake.None; // Control de flujo. // Establecer la lectura / escritura de los tiempos de espera. Puerto_serie.ReadTimeout = 500; Puerto_serie.WriteTimeout = 500; while (true) { Console.WriteLine("Introduce comandos:"); // Muestra texto en pantalla. Enviar_datos = Console.ReadLine(); // Almacena los datos introducidos en consola a la variable. switch (Enviar_datos) { case "Led_ON": Puerto_serie.Open(); // Abrir puerto serie. byte[] miBuffer = Encoding.ASCII.GetBytes(Enviar_datos); // Guarda un array los datos y codificado en ASCII. Puerto_serie.Write(miBuffer, 0, miBuffer.Length); // Envía al puerto el array almacenado del buffer. Console.WriteLine(); // Salto de línea. //Puerto_serie.Write(Enviar_datos); // Con solo esta línea también vale pero no está codificado. Puerto_serie.Close(); // Cerrar puerto serie. break; case "Led_OFF": Puerto_serie.Open(); // Abrir puerto serie. byte[] miBuffer2 = Encoding.ASCII.GetBytes(Enviar_datos); // Guarda un array los datos y codificado en ASCII. Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length); // Envía al puerto el array almacenado del buffer. Console.WriteLine(); // Salto de línea. //Puerto_serie.Write(Enviar_datos); // Con solo esta línea también vale pero no está codificado. Puerto_serie.Close(); // Cerrar puerto serie. break; } } } } }
Este código de enviar datos lo he probado en Arduino, funciona de maravilla. Antes de continuar con la parte de recibir datos, quiero saber si la forma que lo he programado es suficiente o lo tengo al estilo chapuza. Si alguien sabe mejorarlo de mejor manera, mejor que mejor. Luego me centro en la parte de enviar datos. Un cordial salduo.
|
|
|
236
|
Seguridad Informática / Hacking / Información de los ordenadores a distancia
|
en: 10 Diciembre 2015, 15:57 pm
|
Hola: Si navego desde Linux, mando correo electrónico y más cosas desde una Raspberry Pi 2. La gente que sabe, puede saber qué Sistema Operativo uso, como si es Linux por ejemplo, Windows, e incluso RISC OS para Raspberry Pi, un SO queno es Linux ni Unix. ¿Qué datos puede saber si estás con Raspberry Pi y como lo consiguen? Saludos.
|
|
|
237
|
Informática / Hardware / ¿Tienes uynm grabador Blu-Ray de PC?
|
en: 10 Diciembre 2015, 15:39 pm
|
Hola: Estoy buscando a personas con experiencias sobre grabador de Blu-ray, tengo tantas fotos y vídeos de calida alta que no me cabe en el disco duro y no quiero borrarlos, cada vez que salgo de senderismo, me ocupa la tarjeta de unos 4 GB a 8 GB entre tanta foros y víedos a 1080p. Cada viaje un DVD. Estab a pensando en saltar al blu-ray sea el de 25 GB o el de 50 GB el disco. Cuando vi el precio aquí, de los disco a casi 100 € casi se me parte el alma. A parte de esto. ¿Alguien tiene un grabador de BD-ROM en el PC de sobremesa? Quiero que cuente sus experiencia de ello, si tiene algún problema, te tumba mucho discos, su velocidad o algo que deba saber. Lo pregunto porque no conozco a nadie que lo tenga, nadie me habla de ello, si los DVD-ROM de siempre, hasta CD-ROM. Saludos.
|
|
|
240
|
Programación / .NET (C#, VB.NET, ASP) / Puerto serie con F#
|
en: 8 Diciembre 2015, 00:42 am
|
Hola: Antes que nada, quiero saber si F# se puede usar el puerto serie. Mirando en este enlace se puede ver un ejemplo de C#, VB y C++. https://msdn.microsoft.com/es-es/library/system.io.ports.serialport.datareceived%28v=vs.110%29.aspxCuando le doy a F# para ver el código no aparece, es decir, que no tiene. using System; using System.IO.Ports; class PortDataReceived { public static void Main() { SerialPort mySerialPort = new SerialPort ("COM1"); mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; mySerialPort.RtsEnable = true; mySerialPort .DataReceived += new SerialDataReceivedEventHandler (DataReceivedHandler ); mySerialPort.Open(); Console.WriteLine("Press any key to continue..."); Console.WriteLine(); Console.ReadKey(); mySerialPort.Close(); } private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); Console.WriteLine("Data Received:"); Console.Write(indata); } }
Quiero saber si existe la posibilidad de mostrar el código o saber si se puede usar el puerto serie en F#. Gracias.
|
|
|
|
|
|
|