elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 66
71  Programación / Scripting / Recibir mensajes en: 28 Marzo 2021, 14:39 pm
Quiero recibir mensajes desde el puerto serie usando CMD de Windwos.

Creo un Script gracias a los compañeros de este foro en su día.
Código
  1.    @Echo OFF
  2.    title Arduino CMD y puerto serie
  3.  
  4.    CHCP 1252 >Nul
  5.    MODE.com COM4 BAUD=115200 PARITY=n DATA=8 STOP=1
  6.    :Menu
  7.        CLS
  8.        echo.
  9.        echo.
  10.        echo.                   1.- Luz  ON
  11.        echo.
  12.        echo.                   2.- Luz  OFF
  13.        echo.
  14.        echo.                   3.- Salir
  15.        echo.
  16.        echo.
  17.        echo.
  18.  
  19.        CHOICE.exe /C "123" /M "                   Escoge una opción "
  20.        echo.
  21.        echo.
  22.        echo.
  23.  
  24.        If %ErrorLevel% EQU 1 (
  25.            copy puerto_Luz_ON.txt  COM1:
  26.            echo Puerto COM1: B
  27.            timeout 5 >nul
  28.            goto Menu
  29.        )
  30.  
  31.        If %ErrorLevel% EQU 2 (
  32.            copy puerto_Luz_OFF.txt COM1:
  33.            echo Puerto COM1: X72
  34.            timeout 5 >nul
  35.            goto Menu
  36.        )
  37.  
  38.        Pause
  39.  
  40.        Exit /B

La cuestión es.

¿Cómo se recibe un mensaje desde el otro lado del puerto serie?

Saludos.
72  Programación / .NET (C#, VB.NET, ASP) / ¿Cómo listar solo unidades DVD y ver su información? en: 28 Marzo 2021, 12:12 pm
Quiero hacer un programa en consola C#, en el cual me muestre cuantas hay y su información. Solo quiero que me muestre unidades de discos DVD, aunque sean SATA, IDE o por USB.

Por ejemplo:
Citar
Unidad F:
     Etiqueta de volumen : 58 Fotos 2020 Tamaño total de la unidad: 4,26 GB.

Unidad G:
     Etiqueta de volumen : Visual Tamaño total de la unidad: 3,09 GB.

Quiero hacerlo así y ya está. El ejemplo que he visto te cuenta todas las unidades como indica abajo y no me interesa.
Código
  1. using System;
  2. using System.IO;
  3.  
  4. namespace Informacion_lector_Consola_01
  5. {
  6.    class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            #region Configuración ventana.
  11.            // Título de la ventana.
  12.            Console.Title = "Información lector.";
  13.  
  14.            // Tamaño de la ventana, x, y.
  15.            Console.SetWindowSize(80, 35);
  16.  
  17.            // Color de fondo.
  18.            Console.BackgroundColor = ConsoleColor.White;
  19.  
  20.            // Color de las letras.
  21.            Console.ForegroundColor = ConsoleColor.Black;
  22.  
  23.            // Limpiar pantalla y dejarlo todo en color de fondo.
  24.            Console.Clear();
  25.  
  26.            // Visible el cursor.
  27.            Console.CursorVisible = true;
  28.            #endregion
  29.  
  30.            DriveInfo[] allDrives = DriveInfo.GetDrives();
  31.  
  32.            foreach (DriveInfo d in allDrives)
  33.            {
  34.                Console.WriteLine("Unidad {0}", d.Name);
  35.                Console.WriteLine("  Tipo de unidad:                 {0}", d.DriveType);
  36.                if (d.IsReady == true)
  37.                {
  38.                    Console.WriteLine("  Etiqueta de volumen :       {0}", d.VolumeLabel);
  39.                    Console.WriteLine("  Sistema de archivo:         {0}", d.DriveFormat);
  40.                    Console.WriteLine(
  41.                        "  Espacio disponible para el usuario actual:{0, 15} bytes",
  42.                        d.AvailableFreeSpace);
  43.  
  44.                    Console.WriteLine(
  45.                        "  Espacio total disponible:                 {0, 15} bytes",
  46.                        d.TotalFreeSpace);
  47.  
  48.                    Console.WriteLine(
  49.                        "  Tamaño total de la unidad:                {0, 15} bytes ",
  50.                        d.TotalSize);
  51.                }
  52.            }
  53.  
  54.            // Pulse cualquier tecla para continuar.
  55.            Console.ReadKey();
  56.        }
  57.    }
  58. }

¿Alguna idea?

Saludos.
73  Informática / Hardware / Controlar DVD en: 28 Marzo 2021, 01:02 am
Buenas:

1) ¿Es posible controlar el encendido y apagado del Led que viene en el lector de un DVD como este de abajo?



2) Windows sabe cuando hay un disco en la lectora o no. ¿Windows sabe cuando el lector está abierto o cerrado?

Saludos.
74  Programación / Scripting / No me deja enviar mensaje en: 26 Marzo 2021, 22:21 pm
Hola:

Este Script se trata de que quiero enviar por ejemplo la letra B, o esto otro como X72. Si envío un comando o mensaje llamado B. Me tiene que llegar una respuesta. No hace nada.

Los datos son enviados al puerto serie.

Este es el código.
Código:
# Para comprobar los puertos series disponibles en el sistema:
[System.IO.Ports.SerialPort]::getportnames()
 
# O bien de una manera más exhaustiva:
Get-WMIObject Win32_SerialPort
 
# Establecer los parámetros básicos de conexión. Una tipica conexión 9600 bps, 8N1 sin control de flujo sería la siguiente:
$puertoCOM = "COM1"  # El puerto serie que se quiere emplear
$bps = 2400 # La tasa de baudios por segundo del puerto. Típicos valores entre 1200 (o incluso menos) y 115200 (o incluso más)
$paridad = [System.IO.Ports.Parity]::None # Paridad de datos. Puede ser Even (par), Odd (impar) o None (sin paridad) 
$dataBits = 8 # Bits de datos. Puede ser 7 u 8
$stopBits = [System.IO.Ports.StopBits]::one # Bits de parada. Puede ser one (1), onepointfive (1.5) o two (dos)
$puerto = New-Object System.IO.Ports.SerialPort $puertoCOM,$bps,$paridad,$dataBits,$stopBits   # Crea la nueva instancia
 
# Se pueden establecer otros parámetros, como la activación del control del flujo por RTS/CTS , DTR/DSR, Handshake, fijar el tamaño de los buffers de lectura y escritura o establecer los timeouts de lectura. Todos estos parámetros, así como el estado general del resto, se pueden consultar llamando al objeto:
$puerto
$puerto.ReadTimeout = 500   # Establece un timeout de lectura de 500 mseg
$puerto.WriteTimeout = 500 # Establece un timeout de escritura de 250 mseg
 
# Abre el puerto
$puerto.Open()
 
# Lectura del puerto
$mensaje=$puerto.ReadLine()
 
# Escritura del puerto
$mensaje="B"
$puerto.WriteLine($mensaje)
 
# Cierra el puerto
$puerto.Close()

Quiero saber que es lo que ocurre.

Gracias.
75  Programación / .NET (C#, VB.NET, ASP) / Añadir elementos al comboBox en: 25 Marzo 2021, 22:05 pm
Buenas:

Estoy todo el rato intentando que me lea todos los lectores que tenga en un Pc o ordenador sea IDE, SATA o un lector externo por USB de discos, DVD en este caso.

Mirando aquí he encontrado esto.
https://docs.microsoft.com/es-es/windows/win32/cimwin32prov/win32-cdromdrive

Quiero que me detecte las unidades y lo muestre en un comboBox.

Creo una función.
Código
  1.        private static void GetMyCPUInfo(string hwclass, string syntax)
  2.        {
  3.            ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwclass);
  4.            foreach (ManagementObject mj in mos.Get())
  5.            {
  6.                Console.WriteLine(Convert.ToString(mj[syntax]));
  7.            }
  8.        }

Con esto llamo una unidad.
Código
  1. GetMyCPUInfo("Win32_CDROMDrive", "Id");

Añado los datos en el comboBox así.
Código
  1. comboBox_Unidad.Items.Add(datos);

Pues no me sale.

¿Alguna idea?

Saludos.
76  Programación / .NET (C#, VB.NET, ASP) / Usar un buen delimitador en: 24 Marzo 2021, 23:17 pm
Hola:

Mirando este esquema que son comandos que se envían y recibe del puerto serie.


Ver imagen.

Como dice arriba, si pulso X72 más la tecla Enter <cr> en el terminal del puerto serie como indica abajo. Me muestra estos valores.


Ver imagen.

Me mostró esto.

#2000,1400,230,45.0,55.0,8.6

    The apparent power is 2000 VA.
    The active power is 1400 Watts.
    The factory default voltage of output is 230 Volts.
    The rating frecuency range is between 45.0 and 55.0 Hz.
    The rating current is 8.6 Amperes.

Ya puesto en español. En el formulario pongo todo este texto con los labels.

    La potencia aparente es 2000 VA.
    La potencia activa es de 1400 Watts.
    El voltaje de salida predeterminado de fábrica es de 230 voltios.
    El rango de frecuencia nominal está entre 45.0 y 55.0 Hz.
    La corriente nominal es de 8,6 amperios.

Supongamos que recibo el dato indicado arriba y lo vuelvo a mostrar abajo.

#2000,1400,230,45.0,55.0,8.6

Este dato lo guardo en una variable.

La cuestión.

¿Cómo lo paso a cada labels?

Son 5 label indicado arriba, solo cambia el valor en negrita, que son solo números.

¿Alguna idea?

Saludos.


Edito:
Buenas:

Lo he intentado así:
Código
  1. using System;
  2.  
  3. namespace Delimitador_consola_01
  4. {
  5.    class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.  
  10.            string phrase = "#2000,1400,230,45.0,55.0,8.6";
  11.            string[] words = phrase.Split('#', ',');
  12.  
  13.            foreach (var word in words)
  14.            {
  15.                Console.WriteLine($"<{word}>");
  16.            }
  17.  
  18.  
  19.  
  20.            // Pulse cualquier tecla para salir.
  21.            Console.ReadKey();
  22.        }
  23.    }
  24. }

¿Cómo hago que me lo muestre así?

La potencia aparente es 2000 VA.
La potencia activa es de 1400 Watts.
El voltaje de salida predeterminado de fábrica es de 230 voltios.
El rango de frecuencia nominal está entre 45.0 y 55.0 Hz.
La corriente nominal es de 8,6 amperios.
77  Programación / .NET (C#, VB.NET, ASP) / Detecta disco en el elctor en: 19 Marzo 2021, 14:51 pm
Hola:

Un programa que detecta el disco del lectro si está dentro o no. me lo muestra en forma de True o False.

No logro que me lo muestre que me diga esto:

Disco en el lector: Sí

Me lo muestra en True.


Ver imagen.

¿Qué se puede cambiar en este código?

Código
  1. using System;
  2. using System.Management;
  3.  
  4. namespace CPU_GPU_Hardware_informacion_consola_01
  5. {
  6.    class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            // Título de la ventana.
  11.            Console.Title = "Título de la ventana.";
  12.  
  13.            // Tamaño de la ventana, x, y.
  14.            Console.SetWindowSize(120, 63);
  15.  
  16.            // Color de fondo.
  17.            Console.BackgroundColor = ConsoleColor.Gray;
  18.  
  19.            // Color de las letras.
  20.            Console.ForegroundColor = ConsoleColor.Black;
  21.  
  22.            // Limpiar pantalla y dejarlo todo gris.
  23.            Console.Clear();
  24.  
  25.            // Visible el cursor.
  26.            Console.CursorVisible = true;
  27.  
  28.            // Nombre del procesador.
  29.            GetMyCPUInfo("Win32_Processor", "Name");
  30.  
  31.            // CD ROM.
  32.            GetMyCPUInfo("Win32_CDROMDrive", "Name");
  33.            Console.Write("Medio cargado: (Disco en el lector:) ");
  34.            GetMyCPUInfo("Win32_CDROMDrive", "MediaLoaded");
  35.  
  36.  
  37.            Console.ForegroundColor = ConsoleColor.Blue;
  38.            Console.WriteLine("FIN DEL PROGRAMA.");
  39.  
  40.            // Pulse cualquier tecla para salir.
  41.            Console.ReadKey();
  42.        }
  43.  
  44.        private static void GetMyCPUInfo(string hwclass, string syntax)
  45.        {
  46.            ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwclass);
  47.            foreach (ManagementObject mj in mos.Get())
  48.            {
  49.                Console.WriteLine(Convert.ToString(mj[syntax]));
  50.            }
  51.        }
  52.    }
  53. }

Cualquier información aquí.
https://docs.microsoft.com/es-es/windows/win32/cimwin32prov/win32-cdromdrive

Saludos.
78  Programación / .NET (C#, VB.NET, ASP) / No me funciona este código que debería en: 13 Marzo 2021, 17:24 pm
Buenas:

Hago algo mal. En esta captura se muestra unao Panel, que son 8 en total y debe cambiar de color de rojo oscuro o normal dependiendo de como muesves el trackBar.


Verr zoom.

Código:
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;

namespace _74xx595_Vumetro_01_Net5._0
{
    public partial class Form1 : Form
    {
        int valorADC = 1000;

        public Form1()
        {
            InitializeComponent();
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            // Variar valor con el tarackBar.
            valorADC = int.Parse("" + trackBar1.Value);
            this.Text = valorADC.ToString();

            switch (valorADC)
            {
                case 1000:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.Red;
                    panel6.BackColor = Color.Red;
                    panel7.BackColor = Color.Red;
                    panel8.BackColor = Color.Red;
                    break;

                case 900:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.Red;
                    panel6.BackColor = Color.Red;
                    panel7.BackColor = Color.Red;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 800:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.Red;
                    panel6.BackColor = Color.Red;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 700:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.Red;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 600:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.Red;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 500:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.Red;
                    panel4.BackColor = Color.DarkRed;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 400:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.Red;
                    panel3.BackColor = Color.DarkRed;
                    panel4.BackColor = Color.DarkRed;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 300:
                    panel1.BackColor = Color.Red;
                    panel2.BackColor = Color.DarkRed;
                    panel3.BackColor = Color.DarkRed;
                    panel4.BackColor = Color.DarkRed;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                case 200:
                    panel1.BackColor = Color.DarkRed;
                    panel2.BackColor = Color.DarkRed;
                    panel3.BackColor = Color.DarkRed;
                    panel4.BackColor = Color.DarkRed;
                    panel5.BackColor = Color.DarkRed;
                    panel6.BackColor = Color.DarkRed;
                    panel7.BackColor = Color.DarkRed;
                    panel8.BackColor = Color.DarkRed;
                    break;

                default:
                    this.Text = "Fuera de rango.";
                    break;
            }
        }
    }
}

¿Alguna idea?

Saludos.
79  Programación / .NET (C#, VB.NET, ASP) / Leer información de una SAI / UPS en: 11 Marzo 2021, 11:01 am
Buenas:

Dentro de poco me llega un SAI o UPS que tiene dos puertos, USB y el RS232. El que voy a sar es el RS232 o conocido como puerto serie de toda la vida y el PC nuevo también usa el RS232. Espero no usar el pin 4 DTR para controlar el puerto serie, ajajajaja.


Ver zoom.

Aquí abajo, muestra los mensajes de aviso y error. En el display de la UPS solo muestra códigos en el cual después para entender lo que me están hablando debo mirar esta tabla de abajo.


Ver zoom.

Como puedes ver arriba, por ejemplo: Código A64. Como no se que es el código A64 cuando la UPS directamente l muestra con su display, debo mirar esta table y dice:
A64 => Aviso sobrecarga.

Entonces con Arduino y el puerto RS232 debo extraer la información y que me lo muestre en textos en un LCD de Arduino así:

A64: Aviso de sobrecarga.

Sea con un display de 20x4 o otro que me quepa muchos comentarios o descripcioines de los avisos o fallos del UPS.

Según el fabricante, me dice que mire esta parte, que es la que estoy buscando, los Flags.


Ver zoom.

Antes de tocar Arduino, prefiero hacer una Interfaz con Visual Studio .Net. Directmente con el puerto RS232.

Solo lee los avisos o erroree mostrados desde la UPS hacia el PC. Solo toca interpretar lo que me cuenta este documento en PDF que lo dejo para que lo descarguen.

Si tiene alguna idea como extraer esa información me lo hacen saber y empiezo a programar. La parte que estoy haciendo ahora solo es preparar la interfaz, ya iré mostrando avances poco a poco, por supuesto, luego iré por Arduino al derecho y al revés, ejjejej.

Descarga PDF.

Sabiendo todo esta información.

Mi intención es crear una interfaz con Windows Form de C#. Usar el componente serialPort1 que lo arrastro al formulario y pongo un label.

La pregunta es:

¿Cómo muestro los datos de la UPS indicado en la tercera captura arriba o en el manual en C#?

Esa es la cuestión.

Que tengan buen día. A scar esto adelante. ;)

PD: Me cuesta creer que todavían saquen PC y UPS con comunicación con RS232 directamente. Es de agradecer.
80  Programación / .NET (C#, VB.NET, ASP) / Hacer funcionar simulador lavadora en: 6 Marzo 2021, 17:39 pm


Ver imagen.

Este proyecto ya es un reto para muchos, jajajja, aún así se puede intentar.

Aquí tengo un simulador de lavadora, puedes controlar el giro del tambor o motor, velocidad, nivel de agua. Es totalmente funcional.

Hay en este caso aunque si funciona, quiero ignorarlo para el próximo programa, Giro del motor.

La mejora o el próximo programa funciona desde el puerto serie sin usar ningún trackBar.

trackBar_Velocidad_motor funciona los valores como máximo a 100 y mínimo a 0.

trackBar_Nivel_de_agua funciona los valores como máximo a 90 y mínimo a -90.

Los sustitutos del trackBar son datos que llegan desde el puerto serie, algo así como esto, por ejemplo:

Código
  1. 50, 80

El ejemplo de arriba indica el número 50, que varía de 0 a 100, la velocidad. El 80 es el caso del 90 a -90 del nivel de agua.

Esos datos si quiero que esté. Puede recibir datos a 9600 baudios y por cada 1000 milisegundos, o lo que es lo mismo, a cada segundo.

El código completo de este programa con trackBar es este.
Código
  1. /*
  2.  Te explico la formula
  3.  
  4. float fDeltaAngulo = (((nRPM * 360) / (60 * 1000)) * timer.Interval) * ((float)trackBar_Velocidad_motor.Value / (float)trackBar_Velocidad_motor.Maximun)
  5.  
  6.    1. (nRPM * 360) -> Grados por minuto.
  7.    2. (60 * 1000) -> Milisegundos por minuto.
  8.    3. ((nRPM * 360) / (60 * 1000)) -> Grados por milisegundo.
  9.    4. (((nRPM * 360) / (60 * 1000)) * timer.Interval) -> Grados por tick del timer.
  10.    5.  ((float)trackBar_Velocidad_motor.Value / (float)trackBar_Velocidad_motor.Maximun) -> Porcentaje de la velocidad.
  11.    6. (((nRPM * 360) / (60 * 1000)) * timer.Interval) * ((float)trackBar_Velocidad_motor.Value / (float)trackBar_Velocidad_motor.Maximun) -> Calcula los grados por tick del timer aplicando un porcentaje.
  12.  
  13. Según esta formula, si el trackbar esta en 0, grados por tick * 0 = 0 (esta parado), si el trackbar esta al maximo, grados por tick * 1 = grados por tick (el angulo aumenta al máximo).
  14.  */
  15.  
  16. using System;
  17. using System.Collections.Generic;
  18. using System.ComponentModel;
  19. using System.Data;
  20. using System.Drawing;
  21. using System.Drawing.Drawing2D;
  22. using System.Linq;
  23. using System.Text;
  24. using System.Threading.Tasks;
  25. using System.Windows.Forms;
  26.  
  27. namespace Lavadora_05
  28. {
  29.    public partial class Form1 : Form
  30.    {
  31.        // Variables.
  32.        private Pen lápiz2;
  33.        private Pen lápiz3;
  34.        private Pen lápiz4;
  35.        private float angulo;
  36.        private SolidBrush agua;
  37.  
  38.        private GraphicsPath m_lavadora;
  39.        private GraphicsPath m_agua;
  40.  
  41.        public Form1()
  42.        {
  43.            InitializeComponent();
  44.        }
  45.  
  46.        private void Form1_Load(object sender, EventArgs e)
  47.        {
  48.            Text = "Simulador lavadora";
  49.            pictureBox1.Size = new Size(300, 300);
  50.            pictureBox1.BackColor = Color.LightGray;
  51.  
  52.            lápiz2 = new Pen(Color.DarkGray, 10);
  53.            lápiz2.StartCap = LineCap.ArrowAnchor;
  54.            lápiz2.EndCap = LineCap.RoundAnchor;
  55.  
  56.            lápiz3 = new Pen(Color.Black, 5);
  57.            lápiz4 = new Pen(Color.Gray, 10);
  58.  
  59.            angulo = 0;
  60.  
  61.            agua = new SolidBrush(Color.FromArgb(200, 0, 155, 219)); // Transparencia del agua 200.
  62.            trackBar_Nivel_de_agua.Value = -90; // Para que empiece sin agua.
  63.        }
  64.  
  65.        // Dibuja y colorea.
  66.        private void pictureBox1_Paint(object sender, PaintEventArgs e)
  67.        {
  68.            e.Graphics.DrawRectangle(lápiz3, 10, 10, pictureBox1.ClientSize.Width - 20, pictureBox1.ClientSize.Height - 20);
  69.            e.Graphics.DrawEllipse(lápiz4, 10, 10, pictureBox1.ClientSize.Height - 20, pictureBox1.ClientSize.Height - 20);
  70.  
  71.            e.Graphics.TranslateTransform(pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
  72.            e.Graphics.RotateTransform(angulo);
  73.            e.Graphics.TranslateTransform(-pictureBox1.ClientSize.Width / 2, -pictureBox1.ClientSize.Height / 2);
  74.            //e.Graphics.DrawLine(lápiz2, 20, pictureBox1.ClientSize.Height / 2, pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
  75.            e.Graphics.DrawPath(lápiz2, m_lavadora);
  76.            e.Graphics.ResetTransform();
  77.            e.Graphics.FillPath(agua, m_agua);
  78.        }
  79.  
  80.        // Refresca el valor actual.
  81.        private void trackBar_Giro_del_motor_ValueChanged(object sender, EventArgs e)
  82.        {
  83.            angulo = (float)trackBar_Giro_del_motor.Value;
  84.            pictureBox1.Refresh();
  85.        }
  86.  
  87.        // Cambia el tamaño del control.
  88.        private void pictureBox1_Resize(object sender, EventArgs e)
  89.        {
  90.            int ancho = pictureBox1.ClientSize.Width;
  91.            int alto = pictureBox1.ClientSize.Height;
  92.  
  93.            m_lavadora = new GraphicsPath();
  94.  
  95.            m_lavadora.AddEllipse(20, 20, ancho - 40, alto - 40);
  96.            m_lavadora.CloseFigure();
  97.            m_lavadora.AddLine(20, (alto / 2), ancho - 20, (alto / 2));
  98.            m_lavadora.CloseFigure();
  99.            m_lavadora.AddLine(ancho / 2, 20, ancho / 2, alto - 20);
  100.            m_lavadora.CloseFigure();
  101.  
  102.            m_agua = new GraphicsPath();
  103.  
  104.            m_agua.AddArc(20, 20, ancho - 40, alto - 40, trackBar_Nivel_de_agua.Value, 180 - 2 * trackBar_Nivel_de_agua.Value);
  105.            m_agua.CloseFigure();
  106.        }
  107.  
  108.        private void trackBar_Nivel_de_agua_ValueChanged(object sender, EventArgs e)
  109.        {
  110.            m_agua = new GraphicsPath();
  111.  
  112.            m_agua.AddArc(20, 20, pictureBox1.ClientSize.Width - 40, pictureBox1.ClientSize.Height - 40, -trackBar_Nivel_de_agua.Value, 180 - 2 * -trackBar_Nivel_de_agua.Value);
  113.            m_agua.CloseFigure();
  114.            pictureBox1.Refresh();
  115.        }
  116.  
  117.        private void timer1_Tick(object sender, EventArgs e)
  118.        {
  119.            //60 vueltas por minuto
  120.            float nRPM = 60;
  121.  
  122.            float fDeltaAngulo = (((nRPM * 360) / (60 * 1000)) * (float)timer1.Interval) * ((float)trackBar_Velocidad_motor.Value / (float)trackBar_Velocidad_motor.Maximum);
  123.            float track = (float)trackBar_Velocidad_motor.Value;
  124.            angulo += fDeltaAngulo;
  125.            label_angulo.Text = "angulo " + angulo.ToString();
  126.            label_fDeltaAngulo.Text = "fDeltaAngulo " + fDeltaAngulo.ToString();
  127.            pictureBox1.Refresh();
  128.  
  129.        }
  130.  
  131.        private void button_Empezar_Click(object sender, EventArgs e)
  132.        {
  133.            timer1.Start();
  134.            //timer1.Enabled = true; // También válido.
  135.        }
  136.  
  137.        private void button_parar_Click(object sender, EventArgs e)
  138.        {
  139.            timer1.Stop();
  140.            //timer1.Enabled = false; // También válido.
  141.        }
  142.    }
  143. }

El código que he intentado es este pero no funciona ni una parte y está incompleto.

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.IO.Ports;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12.  
  13. namespace Lavadora_07
  14. {
  15.    public partial class Form1 : Form
  16.    {
  17.        // Utilizaremos un string-builder como búfer auxiliar.
  18.        // La trama llegará fragmentada.
  19.        StringBuilder sb;
  20.  
  21.        // Nuestro delegado recibe como argumento el string con la trama.
  22.        readonly Action<string> NuevaTrama;
  23.  
  24.        // Variables.
  25.        private Pen lápiz2;
  26.        private Pen lápiz3;
  27.        private Pen lápiz4;
  28.        private float angulo;
  29.        private SolidBrush agua;
  30.  
  31.        private GraphicsPath m_lavadora;
  32.        private GraphicsPath m_agua;
  33.  
  34.        // Variables sustituto del trackBar.
  35.        private int trackBar_Nivel_de_agua = 0;
  36.        private int trackBar_Velocidad_motor = 0;
  37.  
  38.        public Form1()
  39.        {
  40.            InitializeComponent();
  41.  
  42.            sb = new StringBuilder();
  43.            NuevaTrama = Actualizar;
  44.        }
  45.        private void Form1_Load(object sender, EventArgs e)
  46.        {
  47.            // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al comboBox_Puerto.
  48.            try
  49.            {
  50.                comboBox_Puerto.DataSource = SerialPort.GetPortNames();
  51.            }
  52.  
  53.            catch
  54.            {
  55.                MessageBox.Show("No encuentra ningún puerto físico ni virtual.", "Aviso:",
  56.                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
  57.            }
  58.  
  59.            // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al comboBox_Puerto.
  60.            comboBox_Puerto.DataSource = SerialPort.GetPortNames();
  61.  
  62.            // // Añade puertos disponibles físicos  y virtuales.
  63.            serialPort1.PortName = comboBox_Puerto.Text.ToString();
  64.  
  65.            serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
  66.  
  67.            // Dibujo tambor lavadora.
  68.            pictureBox1.Size = new Size(300, 300);
  69.            pictureBox1.BackColor = Color.LightGray;
  70.  
  71.            lápiz2 = new Pen(Color.DarkGray, 10);
  72.            lápiz2.StartCap = LineCap.ArrowAnchor;
  73.            lápiz2.EndCap = LineCap.RoundAnchor;
  74.  
  75.            lápiz3 = new Pen(Color.Black, 5);
  76.            lápiz4 = new Pen(Color.Gray, 10);
  77.  
  78.            angulo = 0;
  79.  
  80.            agua = new SolidBrush(Color.FromArgb(200, 0, 155, 219)); // Transparencia del agua 200.
  81.            trackBar_Nivel_de_agua = -90; // Para que empiece sin agua.
  82.        }
  83.  
  84.        // Detecta USB o puerto serie virtual cuando lo conecta y desconecta del cable.
  85.        protected override void WndProc(ref Message USB)
  86.        {
  87.            if (USB.Msg == 0x219)
  88.            {
  89.                comboBox_Puerto.DataSource = SerialPort.GetPortNames();
  90.            }
  91.  
  92.            base.WndProc(ref USB); // Detecta si hay cambios en el usb y si los hay los refleja.
  93.        }
  94.  
  95.        // Dibuja y colorea.
  96.        private void pictureBox1_Paint(object sender, PaintEventArgs e)
  97.        {
  98.            e.Graphics.DrawRectangle(lápiz3, 10, 10, pictureBox1.ClientSize.Width - 20, pictureBox1.ClientSize.Height - 20);
  99.            e.Graphics.DrawEllipse(lápiz4, 10, 10, pictureBox1.ClientSize.Height - 20, pictureBox1.ClientSize.Height - 20);
  100.  
  101.            e.Graphics.TranslateTransform(pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
  102.            e.Graphics.RotateTransform(angulo);
  103.            e.Graphics.TranslateTransform(-pictureBox1.ClientSize.Width / 2, -pictureBox1.ClientSize.Height / 2);
  104.            //e.Graphics.DrawLine(lápiz2, 20, pictureBox1.ClientSize.Height / 2, pictureBox1.ClientSize.Width / 2, pictureBox1.ClientSize.Height / 2);
  105.            e.Graphics.DrawPath(lápiz2, m_lavadora);
  106.            e.Graphics.ResetTransform();
  107.            e.Graphics.FillPath(agua, m_agua);
  108.        }
  109.  
  110.        // Cambia el tamaño del control.
  111.        private void pictureBox1_Resize(object sender, EventArgs e)
  112.        {
  113.            int ancho = pictureBox1.ClientSize.Width;
  114.            int alto = pictureBox1.ClientSize.Height;
  115.  
  116.            m_lavadora = new GraphicsPath();
  117.  
  118.            m_lavadora.AddEllipse(20, 20, ancho - 40, alto - 40);
  119.            m_lavadora.CloseFigure();
  120.            m_lavadora.AddLine(20, (alto / 2), ancho - 20, (alto / 2));
  121.            m_lavadora.CloseFigure();
  122.            m_lavadora.AddLine(ancho / 2, 20, ancho / 2, alto - 20);
  123.            m_lavadora.CloseFigure();
  124.  
  125.            m_agua = new GraphicsPath();
  126.  
  127.            m_agua.AddArc(20, 20, ancho - 40, alto - 40, trackBar_Nivel_de_agua, 180 - 2 * trackBar_Nivel_de_agua);
  128.            m_agua.CloseFigure();
  129.        }
  130.  
  131.        // Conectar comunicación con el puerto serie.
  132.        private void button_Conectar_Click(object sender, EventArgs e)
  133.        {
  134.            try
  135.            {
  136.                serialPort1.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente.
  137.                serialPort1.BaudRate = Convert.ToInt32(comboBox_Baudios.Text); // Baudios.
  138.                serialPort1.Open(); // Abrir puerto.
  139.                comboBox_Puerto.Enabled = false;
  140.                comboBox_Baudios.Enabled = false;
  141.                button_Conectar.Enabled = false;
  142.                button_Desconectar.Enabled = true;
  143.            }
  144.            catch
  145.            {
  146.                MessageBox.Show("El puerto no existe.", "Aviso:",
  147.                MessageBoxButtons.OK, MessageBoxIcon.Warning);
  148.            }
  149.        }
  150.  
  151.        // Desconectar comunicación con el puerto serie.
  152.        private void button_Desconectar_Click(object sender, EventArgs e)
  153.        {
  154.            try
  155.            {
  156.                serialPort1.Close(); // Cerrar puerto.
  157.                comboBox_Puerto.Enabled = true;
  158.                comboBox_Baudios.Enabled = true;
  159.                button_Conectar.Enabled = true;
  160.                button_Desconectar.Enabled = false;
  161.            }
  162.  
  163.            catch (Exception error)
  164.            {
  165.                MessageBox.Show(error.Message, "Aviso:",
  166.                MessageBoxButtons.OK, MessageBoxIcon.Warning);
  167.            }
  168.        }
  169.  
  170.        // Al cerrar el formulario, antes cierra el puerto si está abierto.
  171.        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  172.        {
  173.            try
  174.            {
  175.                serialPort1.Close(); // Cerrar puerto.
  176.            }
  177.  
  178.            catch (Exception error)
  179.            {
  180.                MessageBox.Show(error.Message, "Aviso:",
  181.                MessageBoxButtons.OK, MessageBoxIcon.Warning);
  182.            }
  183.        }
  184.  
  185.        // Recibe datos por el puerto serie.
  186.        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  187.        {
  188.            // Caracter/es disponible/s desde la última vez.
  189.            string recibidos = serialPort1.ReadExisting();
  190.  
  191.            // analizamos cada caracter recibido
  192.            foreach (char item in recibidos)
  193.            {
  194.                switch (item)
  195.                {
  196.                    // Ignoramos el \u000D
  197.                    case '\r':
  198.                        break;
  199.  
  200.                    // Aquí detectamos el final de la trama \u000A
  201.                    case '\n':
  202.                        // y la enviamos al control.
  203.                        Invoke(NuevaTrama, sb.ToString());
  204.  
  205.                        // Luego limpiamos el búfer.
  206.                        sb.Clear();
  207.                        break;
  208.  
  209.                    // Cualquier otro caracter recibido, lo agregamos al búfer.
  210.                    default:
  211.                        sb.Append(item);
  212.                        break;
  213.                }
  214.            }
  215.        }
  216.  
  217.        private void Actualizar(string trama)
  218.        {
  219.            // Delimitador. Ignoramos las comas.
  220.            string[] datosArray = trama.Split(',');
  221.  
  222.            // Compara si dos datos del array es igual a la cantidad total que en este
  223.            // caso son 2. Si es igual a 2, entonces ejecuta todo el código dentro del if.
  224.            if (datosArray.Length == 2)
  225.            {
  226.                // Mostrar datos.
  227.                label_Entrada_analogica_A1.Text = "Entrada Analógica A1: " + datosArray[0];
  228.                label_Entrada_analogica_A2.Text = "Entrada Analógica A2: " + datosArray[1];
  229.            }
  230.        }
  231.  
  232.        private void trackBar_Nivel_de_agua_ValueChanged(object sender, EventArgs e)
  233.        {
  234.            m_agua = new GraphicsPath();
  235.  
  236.            m_agua.AddArc(20, 20, pictureBox1.ClientSize.Width - 40, pictureBox1.ClientSize.Height - 40, -trackBar_Nivel_de_agua, 180 - 2 * -trackBar_Nivel_de_agua);
  237.            m_agua.CloseFigure();
  238.            pictureBox1.Refresh();
  239.        }
  240.    }
  241. }

¿Alguna idea de este proyectado tipo reto?

Un cordial saludos camaradas.
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 66
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines