• Miércoles 8 de Diciembre de 2021, 13:59

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Meta

Páginas: [1] 2 3 4
1
C# / Que aparezca el mensaje en pantalla
« en: Martes 11 de Junio de 2019, 21:38 »
Buenas:

En la consola C# me aparece el asunto a la hora de leer el último email del, pero no aparece el mensaje. Quiero que me aparezca en pantalla tanto el asunto y el mensaje.

No se su código del pop3 para leer mensajes, si me envian un mensaje nuevo y luego ejecuto el programa, me apecere así sin mensaje porque no se como programarlo.


Ver zoom.

Código C#:
Código: [Seleccionar]
using System;
using System.Collections.Generic;
using OpenPop.Pop3;

namespace Recibir_email_Consola_01
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Recibir e-mail con Consola C#";

            // Tamaño ventana consola.
            Console.WindowWidth = 80; // X. Ancho.
            Console.WindowHeight = 40; // Y. Alto.

            // Cursor invisible.
            Console.CursorVisible = false;

            // Título del programa.
            Console.WriteLine("\t\t----------------------------------------");
            Console.WriteLine("\t\t\tRecibir Correo Electrónico");
            Console.WriteLine("\t\t----------------------------------------");

            try
            {
                ConnectPop3 oC = new ConnectPop3();

                List<OpenPop.Mime.Message> lstMessages = oC.GetMessages();


                if (lstMessages != null)
                {

                    foreach (var oMessage in lstMessages)
                    {
                        Console.WriteLine("ASUNTO:  " + oMessage.Headers.Subject + "\n"); // Asunto.
                                                //Console.WriteLine();
                        Console.WriteLine("MENSAJE: "); // Aquí se pone código del mensaje que no se cual es.
                    }
                }
                Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
                Console.WriteLine();
                Console.WriteLine("FIN DEL PROGRAMA.");
                Console.ReadKey(); // Pulse cualquier tecla para salir.
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }

    public class ConnectPop3
    {
        public string email = "celltium@gmail.com";
        public string contraseña = "g0923490xgh0945g450Xj4025g"; // Ficticio.
        public int puerto = 995;
        public bool usarSLL = true;
        public string Hostame = "pop.gmail.com";

        public List<OpenPop.Mime.Message> GetMessages()
        {
            using (Pop3Client oClient = new Pop3Client())
            {
                oClient.Connect(Hostame, puerto, usarSLL);
                oClient.Authenticate(email, contraseña);

                int messageCount = oClient.GetMessageCount();
                List<OpenPop.Mime.Message> lstMessages = new List<OpenPop.Mime.Message>(messageCount);

                for (int i = messageCount; i > 0; i--)
                {
                    lstMessages.Add(oClient.GetMessage(i));
                }

                return lstMessages;
            }
        }
    }
}

Lo que si le logrado es poner email, fecha y algunos más datos, precisamente el que más quiero que es el mensaje no se como hacerlo o como buscarlo.

¿Alguna idea?

Saludos.

2
C# / ¿Cómo entrar en las opciones del menú?
« en: Martes 5 de Febrero de 2019, 20:36 »
Hola:

Usando el modo consola de C# 2017. Hice un mini menú de opciones gracias a los compañeros de este foro. Puedo seleccionar con los botones arriba y abajo las opciones.

Se usa formato de la pantalla 16x2.

En este caso lo que hace es seleccionar opciones en el menú, pero no hace nada más. Las opciones en el menú se llama.

Menú ▲▼

1. UNO
2. DOS
3. TRES
4. CUATRO
5. ESC - SALIR

Por ejemplo, seleccionamos el 3. TRES. Pulse Enter y justo una línea de abajo dice:

3. TRES ▲▼

Después de pulsar Enter, se sustituye el texto 3. TRES ▲▼ por otro abajo.

Alum. ●●●●●●○○

En el cual podemos hacer cosas, estando ya en la subopción indicado arriba. Si pulsamos Enter, de Alum. ●●●●●●○○ vuelve al menú principal en este caso donde estaba, llamdo 3. TRES ▲▼. Si etás todavía en Alum. ●●●●●●○○, puedes pulsar la teclas arriba y abajo para mover las opciones indicadas de esta manera mostrada abajo.

Son 8 puntos. Lo que hace es alumbrar el brillo de una luz, el brillo más débil es de esta manera. Alum. ○○○○○○○○. El brillo máximo es de otra manera, Alum. ●●●●●●●●. Con las flechas del teclado arriba y abajo, seleccionamos un punto, de 1 hasta 8. La mitad sería así: Alum. ●●●●○○○○. Pulsa enter, guarda la configuración en una variable para que la recuerde y sale al menú principal.

Espero que se entienda lo que quiero hacer.

Dejo el código base, solo selecciona opciones pero al pulsar Enter tiene que hacer al menos el 3. TRES.

Código consola C#:
Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Menu_consola_09_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Menú de opciones";

            // Tamaño ventana consola.
            // X anchura.
            Console.WindowWidth = 16;

            // Y altura.
            Console.WindowHeight = 2;

            // Oculto el cursor.
            Console.CursorVisible = false;

            // Contador de teclas y navegador.
            int contador = 0;

            // Capturar tecla para luego validar.
            ConsoleKey tecla;

            do
            {

                //******************************************************************
                // Dibujo el menú.
               
                // Rellenar fondo verde.
                Console.BackgroundColor = ConsoleColor.Green;

                // Letras negras.
                Console.ForegroundColor = ConsoleColor.Black;
               
                // Limpiar pantalla.
                Console.Clear();

                if (contador == 0)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.Write("MENú ▲▼");
                }

                if (contador == 1)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("1.   UNO");
                }

                if (contador == 2)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("2.   DOS");
                }

                if (contador == 3)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("3.   TRES");
                }

                if (contador == 4)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("4.  CUATRO");
                }

                if (contador == 5)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("5. ESC = SALIR");
                }

                // Fin de pintar el menú.
                //******************************************************************

                // Leer tecla ingresada por el usuario.
                tecla = Console.ReadKey(true).Key;

                //validar el tipo de tecla
                if (tecla == ConsoleKey.DownArrow)
                {
                    contador += 1;
                }

                if (tecla == ConsoleKey.UpArrow)
                {
                    contador -= 1;
                }

                // Si está en la última opción, salta a la primera.
                if (contador > 5)
                {
                    contador = 0;
                }

                // Si está en la primera posición, salta a la última.
                if (contador < 0)
                {
                    contador = 5;
                }

                // Uso la tecla escape como salida.
            } while (tecla != ConsoleKey.Escape);
        }
    }
}

Captura:


Una cosa a tener en cuenta. En vez de aparecer

MENú ▲▼

En pantalla, lo primero que debe aparecer en el programa en HOLA. Si pulsas Enter, entonces ya aparece el Menú. Si pulsa salir apareces en HOLA. Luego hacer lo demás con el 3. TRES indicado arriba.

¿Alguna ayuda?

Saludos.

3
Visual Basic para principiantes / Recibir datos desde el puerto serie VB6
« en: Domingo 5 de Abril de 2015, 20:40 »
Hola a todos y a todas:

Gracias a muchos sitios he logrado enviar comandos o datos al puerto serie para que Arduino lo entienda, ya se puede apagar y encender un Led.

En estos momentos me falta lograr que desde el puerto serie con VB 6 me lleguen los datos y se muestre en el componente Text como indica esta imagen.



Su código es hecho hasta el momento es:
Código: [Seleccionar]
Private Sub Form_Load()
    With Me.ComboBoxCOM
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
               
                Dim nCom%   ' Buscamos el número del puerto:
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
   
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
               
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub

Aquí dejo un enlace temporal de un tutorial en pdf para novatos de como hacer su propia interfaz con VB 6.
https://www.dropbox.com/s/4s6txlfkit9d1xv/Tutorial%20VB6%20puertoCOM.pdf?dl=0

Como dije antes, necesito una ayudita sobre recibir datos desde el puerto serie para completas este tutorial.

¿Estás dispuesto a ayudar?

Un cordial saludo.

PD: Tengo otro  con VB .net, C++, C# y Java de lo mismo en PDF, el que lo quiera lo hace saber y pongo unenlace temporal aquí mismo.

PD2: Dejo claro que el tutorial está aún incompelto, sobre todo me falta la parte de la electrónica y en tutorial de VB 6 será colocado dentro del mismo pdf que los demás lenguajes.

4
C# / No consigo slocuionar estos errores en C# 2013
« en: Lunes 30 de Marzo de 2015, 17:14 »
Hola:

Estoy creando un menú sobre puerto serie.
Debe aparecer el menú principal al iniciar el programa.


Si lograse ejecutarlo, pulsa la tecla número 2 del teclado y tienes que configurar el puerto serie como quieras o lo dejas predeterminado.

Código y errores.
Código: [Seleccionar]
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 PuertoCOM_CS_PRUEBA
{
    class Program
    {
        static void Main(string[] args)
        {
            new Program().Modal();
        }

        void Modal()
        {
            for (; ; )
            {
                Console.Title = "Interfaz puerto serie - v 0.04"; // Mostrar título en la ventana de la consola.

                string Menu_Principal = @"
╔═════════════════════════════════════════════════════════════════════════════╗
║                               MENÚ PRINCIPAL                                ║
╠═════════════════════════════════════════════════════════════════════════════╣
║                                                                             ║
║                                                                             ║
║                                                                             ║
║                                                                             ║
║                                                                             ║
║                            0. Salir.                                        ║
║                            1. Interfaz.                                     ║
║                            2. Configuración.                                ║
║                            3. Guardar configuración.                        ║
║                            4. Información desde el dispositivo.             ║
║                            5. Ayuda.                                        ║
║                            6. Acerca de ...                                 ║
║                                                                             ║
║                                                                             ║
║                                                                             ║
║                                                                             ║
║                                                                             ║
║                                                                             ║
║                                                                             ║
║                                                                             ║
╚═════════════════════════════════════════════════════════════════════════════╝
";
                Console.CursorVisible = false; // Ocultar cursor.
                Console.Clear(); // Limpiar pantalla.
                Console.Write(Menu_Principal); // Mostrar menú principal.
                ConsoleKeyInfo switchExpression = Console.ReadKey(); // Detactar una tecla del teclado.

                switch (switchExpression.KeyChar)
                {
                    case '0':
                        return;

                    case '1':
                        new Interfaz().Modal_Interfaz();
                        break;

                    case '2':
                        new Configuracion().Modal_Configuracion();
                        break;

                    case '3':
                        new Guardar_Configuracion().Modal_Guardar_Configuracion();
                        break;

                    case '4':
                        new Informacion().Modal_Informacion();
                        break;

                    case '5':
                        new Ayuda().Modal_Ayuda();
                        break;

                    case '6':
                        new Acerca_de().Modal_Acerca_de();
                        break;

                    default:
                        Console.WriteLine("No has elegido ninguna opción. Vuelva teclear del 0 al 68.");
                        break;
                }
            }

        }
    }

    class Interfaz
    {
        public void Modal_Interfaz()
        {
            for (; ; )
            {
                Console.Clear();
                Console.WriteLine("===== INTERFAZ =====");
                Console.WriteLine("Pulse 0 para vovler al menú principal.");

                ConsoleKeyInfo op = Console.ReadKey();

                switch (op.KeyChar)
                {
                    case '0':
                        return;

                    default:
                        break;
                }
            }
        }
    }



    class Configuracion
    {
        public void Modal_Configuracion()
        {
            for (; ; )
            {
                Console.Clear();
                Console.WriteLine(@"
┌─────────────────────────────────────────────────────────────────────────────┐
│                               CONFIGURACIÓN                                 │
└─────────────────────────────────────────────────────────────────────────────┘

");
                //Console.WriteLine("Pulse 0 para vovler al menú principal.");


                Puerto_serie();


                ConsoleKeyInfo op = Console.ReadKey();

                switch (op.KeyChar)
                {
                    case '0':
                        return;

                    default:
                        break;
                }
            }
        }


        private void Puerto_serie()
        {
             bool _continue;
             SerialPort _serialPort;

            string name;
            string message;

            StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
            Thread readThread = new Thread(Read);


            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
            _serialPort = new SerialPort();

            // Permitir al usuario configurar las propiedades adecuadas.
            _serialPort.PortName = SetPortName(_serialPort.PortName);
            _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
            _serialPort.Parity = SetPortParity(_serialPort.Parity);
            _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
            _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
            _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

            // Establecer los tiempos de espera de lectura / escritura.
            _serialPort.ReadTimeout = 500;
            _serialPort.WriteTimeout = 500;

            _serialPort.Open();
            _continue = true;
            readThread.Start();

            Console.Write("Name: ");
            name = Console.ReadLine();

            Console.WriteLine("Type QUIT to exit");

            while (_continue)
            {
                message = Console.ReadLine();

                if (stringComparer.Equals("quit", message))
                {
                    _continue = false;
                }
                else
                {
                    _serialPort.WriteLine(
                        String.Format("<{0}>: {1}", name, message));
                }
            }

            readThread.Join();
            _serialPort.Close();
        }



        public static void Read()
        {
            while (_continue)
            {
                try
                {
                    string message = _serialPort.ReadLine();
                    Console.WriteLine(message);
                }
                catch (TimeoutException) { }
            }
        }

        // Mostrar los valores de puerto y pedirle al usuario entrar en un puerto.
        public static string SetPortName(string defaultPortName)
        {
            string portName;

            Console.WriteLine("Puertos disponibles:");
            foreach (string s in SerialPort.GetPortNames())
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("Introducir el valor de puerto COM (Predeterminado: {0}): ", defaultPortName);
            portName = Console.ReadLine();

            if (portName == "" || !(portName.ToLower()).StartsWith("com"))
            {
                portName = defaultPortName;
            }
            return portName;
        }
        // Visualizar valores BaudRate y pedirle al usuario introducir un valor.
        public static int SetPortBaudRate(int defaultPortBaudRate)
        {
            string baudRate;

            Console.Write("Velocidad en baudios(predeterminado:{0}): ", defaultPortBaudRate);
            baudRate = Console.ReadLine();

            if (baudRate == "")
            {
                baudRate = defaultPortBaudRate.ToString();
            }

            return int.Parse(baudRate);
        }

        // Valores PortParity pantalla y pedirle al usuario que introduzca un valor.
        public static Parity SetPortParity(Parity defaultPortParity)
        {
            string parity;

            Console.WriteLine("Opciones de paridad disponibles:");
            foreach (string s in Enum.GetNames(typeof(Parity)))
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("Introducir el valor de paridad (Predeterminado: {0}):", defaultPortParity.ToString(), true);
            parity = Console.ReadLine();

            if (parity == "")
            {
                parity = defaultPortParity.ToString();
            }

            return (Parity)Enum.Parse(typeof(Parity), parity, true);
        }
        // Mostrar DataBits valores y pedirle al usuario que introduzca un valor.
        public static int SetPortDataBits(int defaultPortDataBits)
        {
            string dataBits;

            Console.Write("Introducir el valor de DataBits (Predeterminado: {0}): ", defaultPortDataBits);
            dataBits = Console.ReadLine();

            if (dataBits == "")
            {
                dataBits = defaultPortDataBits.ToString();
            }

            return int.Parse(dataBits.ToUpperInvariant());
        }

        // Mostrar StopBits valores y pedirle al usuario que introduzca un valor.
        public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
        {
            string stopBits;

            Console.WriteLine("Opciones StopBits disponibles:");
            foreach (string s in Enum.GetNames(typeof(StopBits)))
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("Introducir el valor de StopBits (None (Ninguno) no es compatible y \n" +
             "plantea una ArgumentOutOfRangeException. \n (Default: {0}):", defaultPortStopBits.ToString());
            stopBits = Console.ReadLine();

            if (stopBits == "")
            {
                stopBits = defaultPortStopBits.ToString();
            }

            return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true);
        }
        public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
        {
            string handshake;

            Console.WriteLine("Opciones de toma de contacto disponibles:");
            foreach (string s in Enum.GetNames(typeof(Handshake)))
            {
                Console.WriteLine("   {0}", s);
            }

            Console.Write("Terminar valor Handshake (Predeterminado: {0}):", defaultPortHandshake.ToString());
            handshake = Console.ReadLine();

            if (handshake == "")
            {
                handshake = defaultPortHandshake.ToString();
            }

            return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);
        }
    }

    class Guardar_Configuracion
    {
        public void Modal_Guardar_Configuracion()
        {
            for (; ; )
            {
                Console.Clear();
                Console.WriteLine("===== GUARDAR CONFIGURACIÓN =====");
                Console.WriteLine("Pulse 0 para vovler al menú principal.");

                ConsoleKeyInfo op = Console.ReadKey();

                switch (op.KeyChar)
                {
                    case '0':
                        return;

                    default:
                        break;
                }
            }
        }
    }

    class Informacion
    {
        public void Modal_Informacion()
        {
            for (; ; )
            {
                Console.Clear();
                Console.WriteLine("===== INFORMACION =====");
                Console.WriteLine("Pulse 0 para vovler al menú principal.");

                ConsoleKeyInfo op = Console.ReadKey();

                switch (op.KeyChar)
                {
                    case '0':
                        return;

                    default:
                        break;
                }
            }
        }
    }

    class Ayuda
    {
        public void Modal_Ayuda()
        {
            for (; ; )
            {
                Console.Clear();
                Console.WriteLine("===== AYUDA =====");
                Console.WriteLine("Pulse 0 para vovler al menú principal.");

                ConsoleKeyInfo op = Console.ReadKey();

                switch (op.KeyChar)
                {
                    case '0':
                        return;

                    default:
                        break;
                }
            }
        }
    }

    class Acerca_de
    {
        public void Modal_Acerca_de()
        {
            for (; ; )
            {
                Console.Clear();
                Console.WriteLine("===== ACERCA DE ... =====");
                Console.WriteLine("Pulse 0 para vovler al menú principal.");

                ConsoleKeyInfo op = Console.ReadKey();

                switch (op.KeyChar)
                {
                    case '0':
                        return;

                    default:
                        break;
                }
            }
        }
    }
}

Error   1   El nombre '_continue' no existe en el contexto actual   C:\Users\Usuario\Documents\Visual Studio 2013\Projects\PuertoCOM_CS_PRUEBA\PuertoCOM_CS_PRUEBA\Program.cs   212   20   PuertoCOM_CS_PRUEBA



Error   2   El nombre '_serialPort' no existe en el contexto actual   C:\Users\Meta\Documents\Visual Studio 2013\Projects\PuertoCOM_CS_PRUEBA\PuertoCOM_CS_PRUEBA\Program.cs   216   38   PuertoCOM_CS_PRUEBA


Un cordial saludo.

5
C# / Leer variables de un proceso
« en: Lunes 17 de Marzo de 2014, 21:19 »
Hola:

Si abro una aplicación, con Cheat Engine puede buscar las variables de un juego. Son 3, se llaman Vida, Balas y Maná. Al menos quiero centrarme en la variable Vida, cuya dirección se puede ver abajo en "2. VIDA" ya encontrada.



Usando el lenguaje C# en modo consola, preferiblemente con Windows Form, el más que les guste, quiero lograr leer esas variables de ese proceso y mostrarlo C# en tiempo real, es decir, si el juego tiene 100 Vidas, en tu aplicación C# debe aprecer también 100, si de repente tienes 95 en el juego o proceso, también debe aparecer 95 en tu aplicación.

Hace un tiempo estuve con ello bajo C++ 2013 y que va, me pego media vida y encima creando dll.

Al menos si alguien es capaz de enseñar como se hace realmente. O algún ejemplo si es posible y entendible.

Saludo.

6
C# / Saber que ejecutable o lenguaje es.
« en: Miércoles 9 de Febrero de 2011, 02:39 »
Hola:

Haciendo un ejemplo tonto cualquiera sea con el VB .net o el C# 2010 Express. Creo un botón con un mensaje. Dentro del Form agrego un label y un botón que al pulsarlo muestre Hola mundo por poner un ejemplo sencillo.

¿Hay alguna forma de examinar con cual lenguaje se ha programado ese ejecutable .exe?

Se que puedo cambiar los textos con un editor hexadecimal, también puedo cambiar la versión y nombre de los botones y versiones del programa, cosas así. No se si habrá programa ya hechos para modificar o entender que se ha hecho con ese .exe o al menos hacer un programa nosotros mismo muy sencillo para detectar abrir un .exe y que sepa de qué lenguaje es, otro ejemplo, poner una imagen en el centro de un form1, cosas así.

¿Es posible?

Saludo.

7
Programación de Aplicaciones para Dispositivos / Bloquear PIC adrede
« en: Jueves 23 de Diciembre de 2010, 19:01 »
Hola:

Me han llamado algunos conocidos que dicen pagarme por hacerle un trabajo al PIC. Les comenté que depende de lo laborioso y majadero lo hago o no. Quieren que les de todo completo, los esquemas ya lo tienen ellos. Se me ocurre hacer una parte del código aprovechando la EEPROM interna que al usarlo una determinadas de veces el PIC quede bloqueado, hasta que no me paguen sabrán que la única forma es reprogramarlo. Ya me la han querido jugar.

La otra opción es buscarse la vida o ir a por otro siempre que no estén apurado.

Otra técnica que hay que hacer es si el PIC que me dan para programarlo no tiene EEPROM. Lo que puedo hacer es guardar un valor en la RAM, cuando haga una serie de funciones determinatas, por ejemplo, si haz pulsado el mismo botón 5 veces, el PIC se bloquea porque lo pongo a modo goto $, o le hago un desbordamiento de pila. Si te descuidas tienen un truco, que si pulsa Reset vuelve a empezar y les funciona. Lo bueno del 16F88 que puede desactivar el Reset y no les funcionará.

Si conocen alguna técnica más las pueden contar por aquí.

Felices fiestas 2010.

8
C# / Programar un IC por puerto serie
« en: Domingo 19 de Diciembre de 2010, 17:23 »
Hola:

He estado mirando programas de este tipo como ic-prog y winpic800. Siento curiosidad como hacen para enviar un archivo a los PIC por puerto serie. Se enviar tramas de bytes y texto pero no logro que un archivo .hex de los PIC se meta dentro.

 Uso el TE20:


Quiero hacer una interfaz sencilla, con tal de enviar el .hex y leerlo desde el TE20x. El código fuente que he hecho hasta ahora no me funciona.

Código: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. using System.IO.Ports; // No olvidar estos using.
  11.  
  12. //http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/86149304-c26f-4dcf-b003-198a8879decf
  13.  
  14. namespace RS232_a
  15. {
  16.     public partial class Form1 : Form
  17.     {
  18.         public Form1()
  19.         {
  20.             InitializeComponent();
  21.         }
  22.  
  23.         private void button_Abrir_Click(object sender, EventArgs e)
  24.         {
  25.             if (openFileDialog1.ShowDialog() == DialogResult.OK)
  26.                 {
  27.                     textBox1.Text = openFileDialog1.FileName;
  28.                 }
  29.  
  30.         }
  31.  
  32.         private void button_Enviar_Click(object sender, EventArgs e)
  33.         {
  34.             serialPort1.Open();
  35.             byte[] mBuffer = Encoding.ASCII.GetBytes(textBox1.Text);
  36.             serialPort1.Write(mBuffer, 0, mBuffer.Length);
  37.             serialPort1.Close();
  38.             MessageBox.Show("Enviado.");
  39.         }
  40.     }
  41. }
  42.  
  43.  

Saludo.

9
Microcontroladores / Cambiar de un código a otro de PIC. Temprorizador.
« en: Sábado 18 de Diciembre de 2010, 14:32 »
Hola:

Estoy pasando si es posible todos los ejercicios poco a poco del 16F84A al 16F88. Cuando acabe todos los subo con esquemas de Proteus incluidos.

Precisamente no logro hacer funcionar el temporizador con el 16F88. Antes que nada, he modificado los tiempos que tenías del 16F84A como máximo 4:15 desde el LCD y ahora se puede hacer hasta 99:99. Te paso un adjunto de lo que he hecho hasta el momento. Funciona la parte cuando pulsa el botón modo, pones al menos 15 segundos y vuelves a poner modos, cuando quieres activar la cuenta atrás no se activa, a partir de ahí no te responde nada. He intentado por varios medios y he logrado lo que he logrado, hasta ahí no paso.

DataSheet:
PIC16F88
http://ww1.microchip.com/downloads/en/d ... 30487c.pdf

Descarga: (Código fuente y esquema Proteus).
https://sites.google.com/site/metaconta ... ects=0&d=1

Felices fiestas 2010.

10
Python / Las constante K.
« en: Jueves 28 de Octubre de 2010, 15:50 »
Hola:

Viendo este ejercicio.
Ver ejercicio

No se si he interpretado bien lo que me pide y siguiendo los ejemplos del PDF he modificado este código.

Código: Python
  1. cadena = raw_input('Escribe una frase: ')
  2. while cadena != '':
  3.     cambios = 0
  4.     for i in range(1, len(cadena)):
  5.         if cadena[i] == ' ' and cadena[i-1] != ' ':
  6.             cambios = cambios + 1
  7.  
  8.     if cadena[-1] == ' ':
  9.         cambios = cambios - 1
  10.  
  11.     palabras = cambios + 1
  12.     print 'Palabras:', palabras, 'palabras y', i, 'carácteres.'
  13.  
  14.     cadena = raw_input('Escribe una frase: ')
  15.  

Su resultado es este.
Citar
Escribe una frase: Vale más una imagen, que mil palabras.
Palabras: 7 palabras y 38 carácteres.
Escribe una frase:

¿Qué opinas?

;)

11
Python / [Python] - mdc
« en: Miércoles 20 de Octubre de 2010, 13:22 »
Hola:

http://www.subeimagenes.com/img/129-130-4950.gif

Código: Python
  1. num = int(raw_input('Agrega un número: '))
  2.  
  3. creo_que_es_primo = True
  4. divisor = 2
  5. while divisor < num and creo_que_es_primo:
  6.     if num % divisor == 0:
  7.         creo_que_es_primo = False
  8.     divisor += 1
  9.  
  10. if creo_que_es_primo:
  11.     print 'El número', num, 'es primo'
  12. else:
  13.     print 'El número', num, 'no es primo'
  14.  


Hice algo de esto pero no se si tiene que ver.

Código: Python
  1. num = int(raw_input('Agrega un número: '))
  2. num_2 = int(raw_input('Agrega otro número: '))
  3.  
  4. creo_que_es_primo = True
  5. divisor = 2
  6. while divisor < num and creo_que_es_primo:
  7.     if num % divisor == 0:
  8.         creo_que_es_primo = False
  9.     divisor += 1
  10.  
  11.     if creo_que_es_primo:
  12.         print 'El número', num, 'es primo'
  13.     else:
  14.         print 'El número', num, 'no es primo'
  15.  
  16. creo_que_es_primo_2 = True
  17. divisor_2 = 1
  18. while divisor_2 < num_2 and creo_que_es_primo_2:
  19.     if num_2 % divisor_2 == 0:
  20.         creo_que_es_primo_2 = False
  21.     divisor_2 += 1
  22.  
  23.     if creo_que_es_primo_2:
  24.         print 'El número', num_2, 'es primo'
  25.     else:
  26.         print 'El número', num_2, 'no es primo'
  27.  
  28. # Como dice que los divida, me imagino que se refiere a esto.
  29. n = num / num_2
  30. print n
  31.  


Estamos tratando del ejercicio sólo por ahora el 129.

Aquí hay algo que no se si realmente viene al cuento.
http://es.wikipedia.org/wiki/M%C3%A1xim ... An_divisor

Estos ejercicios que me estoy aprendiendo y parecen interesantes lo he encontrado en esta guía de Python que puedes leer aquí.
http://marmota.act.uji.es/mtp/pdf/python.pdf

Saludo.

12
Python / Hacer menú.
« en: Domingo 17 de Octubre de 2010, 08:29 »
Estoy haciendo un buen menú con Python pero no me sale.

Cuando pulso la opción a) para introducir datos, me vuelve al menú principal, lo mismo para las demás opciones excepto la i) que es para finalizar programa es cuando se acaba y te preguntará este mensaje print 'Gracias por usar el programa.'.

Hay solcuión para ello, cada vez que introduzco los datos de la opción b), el menú principal no vuelve, parece que el programa se ha acabado o se bloqueó.

¿Hay solución?




Código: Python
  1. from math import acos, pi, sqrt
  2.  
  3. opcion = ''
  4. while opcion <= 'a' or opcion >= 'i':
  5. #while opcion in 'abcdefghi':
  6.     print '''Selecciona una opción:
  7.            a) Introducir el primer vector.
  8.            b) Introducir el segundo vector.
  9.            c) Calcular la suma.
  10.            d) Calcular la diferencia.
  11.            e) Calcular el producto escalar.
  12.            f) Calcular el producto vectorial.
  13.            g) Calcular el ángulo (en gastos) entre ellos.
  14.            h) Calcular la longitud.
  15.            i) Finalizar. '''
  16.            
  17.     opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ')
  18.    
  19.     # Primer vector.
  20.     if  opcion == 'a':
  21.         x1 = float(raw_input('Introduce valor x1: '))
  22.         y1 = float(raw_input('Introduce valor y1: '))
  23.         z1 = float(raw_input('Introduce valor z1: '))
  24.         print 'Haz ingresado estos valores', x1, y1, z1, 'del primer vector.'
  25.  
  26.     # Segundo vector.
  27.     elif opcion == 'b':
  28.         x2 = float(raw_input('Introduce valor x2: '))
  29.         y2 = float(raw_input('Introduce valor y2: '))
  30.         z2 = float(raw_input('Introduce valor z2: '))
  31.         print 'Haz ingresado estos valores', x2, y2, z2, 'del segundo vector.'
  32.  
  33.     # Suma.
  34.     elif opcion == 'c':
  35.  
  36.             suma = (x1 + x2, y1 + y2, z1 + z2)
  37.             print suma
  38.  
  39.     # Diferencia.
  40.     elif opcion == 'd':
  41.  
  42.             diferencia = (x1 - x2, y1 - y2, z1 - z2)
  43.             print diferencia
  44.  
  45.     # Producto escalar.
  46.     elif opcion == 'e':
  47.  
  48.             producto = (x1 * x2 + y1 * y2 + z1 * z2)
  49.             print producto
  50.  
  51.      # Producto vectorial.
  52.     elif opcion == 'f':
  53.  
  54.             vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)
  55.             print vectorial
  56.  
  57.     # Ángulo.
  58.     elif opcion == 'g':
  59.             angulo  = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2))
  60.             print angulo
  61.  
  62.     # Longitud.
  63.     elif opcion == 'h':
  64.  
  65.             x = float(raw_input('Introduce valor x: '))
  66.             y = float(raw_input('Introduce valor y: '))
  67.             z = float(raw_input('Introduce valor z: '))
  68.  
  69.             longitud = sqrt(x**2+y**2+z**2)
  70.             print longitud
  71.  
  72.     elif opcion == 'i':
  73.             print 'Gracias por usar el programa.'
  74.             break
  75.     else:
  76.             print 'Puedes teclear estas siguientes opciones: a, b, c, d, e, f, g, h o i. Usted haz tecleado', opcion
  77.  

13
Python / Calcular billetes
« en: Lunes 4 de Octubre de 2010, 02:24 »
Hay un programa que se me resiste.

un programa que calcule el desglose en billetes y monedas de una cantidad exacta de euros. Hay billetes de 500, 200, 100, 50, 20, 10 y 5 euros y monedas de 2 y 1 euros. Por ejemplo, si deseamos conocer el desglose de 434 euros, el programa mostrará por pantalla el siguiente resultado:
2 billetes de 200 euros.
1 billete de 20 euros.
1 billete de 10 euros.
2 monedas de 2 euros.
(¿Que cómo se efectúa el desglose? Muy fácil. Empieza por calcular la división entera entre la cantidad y 500 (el valor de la mayor moneda): 434 entre 500 da 0, así que no hay billetes de 500 euros en el desglose; divide a continuación la cantidad 434 entre 200, cabe a 2 y sobran 34, así
que en el desglose hay 2 billetes de 200 euros; dividimos a continuación 34 entre 100 y vemos que no hay ningún billete de 100 euros en el desglose (cabe a 0); como el resto de la última división es 34, pasamos a dividir 34 entre 20 y vemos que el desglose incluye un billete de 20 euros y aún nos faltan 14 euros por desglosar. . . )


He guardado todos los billetes y moneda en cada variable. He intentado y sigo con ello usando los if-else con sus operadores ==, !=, <=, and, or, etc, etc, etc.

Este tipo de ejercicio es mucho para mi. Aún así sigo para aprender aunque sea un tocho de código que haga y ustedes muy pequeño. Sigo experimentando pero necesito ideas.

Código: Python
  1. # Introducir datos a la variable.
  2. E = int(raw_input('Ingresar Capital: '))
  3.  
  4. # Variables Billetes.
  5. a = 500
  6. b = 200
  7. c = 100
  8. d = 50
  9. e = 20
  10. f = 10
  11. g = 5
  12.  
  13. # Variables Monedas.
  14. h = 2
  15. i = 1
  16.  
  17. #R = (a / 500 != 0) or (b / 200 != 0) or (c / 100 != 0) or (d / 50 != 0) or (e / 20 != 0) or (f / 10 != 0) or (g / 5 != 0) or (h / 2 != 0) or (i / 1 != 0)
  18.  
  19. #print R
  20.  
  21. if (E / a) == 0:
  22.     a1 = E
  23.     print a1
  24. if (a1 / b) == 0:
  25.     a2 = a1
  26.     print a2
  27.    
  28.     etc.
  29.  
  30.  
  31. print '%d billetes de 500 €uros.' % a1
  32. print '%d billetes de 200 €uros.' % a2
  33. print '%d billetes de 100 €uros.' % a3
  34. print '%d billetes de 50 €uros.' % a4
  35. print '%d billetes de 20 €uros.' % a5
  36. print '%d billetes de 10 €uros.' % a6
  37. print '%d billetes de 5 €uros.' % a7
  38. print '%d monedas de 2 €uros.' % a8
  39. print '%d monedas de 1 €uros.' % a9
  40.    
  41.  
  42.  

14
Python / Detectar cuando es impar.
« en: Sábado 2 de Octubre de 2010, 14:38 »
Hola:

¿Cómo hago con Python 2.6, al introducir un número, determine si éste es el doble de un número impar. ?

Debo poner esto para que me pida un número:

Código: Python
  1. a = raw_input(' Introduce un número par o impar: ')
  2.  

(Ejemplo: 14 es el doble de 7, que es impar.)

Saludo.

15
Microcontroladores / Resolver problemas con tablas 6 bits.
« en: Viernes 3 de Septiembre de 2010, 09:52 »
Hola:

Quiero hacer la tabla de 6 bits y me parece el error de los 256 bits usados. ¿Hay alguna manera de resolverlo?

Otra opción es usar una memoria EEPROM Externa como el 24LC256. ¿Valdrá la pena?

Código: Text
  1.  
  2.  
  3. ; ZONA DE DATOS **********************************************************************
  4.  
  5.     TITLE        "LCD Sensor PS2"
  6.     SUBTITLE    "Revisión 1.00"
  7.     LIST        P=16F886
  8.     INCLUDE        <P16F886.INC>
  9.     __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
  10.     __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V
  11.  
  12.     CBLOCK    0x20
  13.     CONTADOR
  14.     ENDC
  15.  
  16. #DEFINE        RESET_RC0    PORTC,0
  17. #DEFINE        EJECT_RC1    PORTC,1
  18. #DEFINE        OPEN_RC2    PORTC,2
  19. #DEFINE        CLOSE_RC3    PORTC,3
  20. #DEFINE        GREEN_RC4    PORTC,4
  21. #DEFINE        RED_RC5        PORTC,5
  22. #DEFINE        Auxiliar_6    PORTC,6
  23. #DEFINE        Auxiliar_7    PORTC,7
  24.  
  25. ; ZONA DE CÓDIGOS ********************************************************************
  26.  
  27.     ORG     0                        ; El programa comienza en la dirección 0.
  28.  
  29. Inicio
  30.     call    LCD_Inicializa
  31.     BANKSEL    TRISC                    ; Banco 1.
  32.     bsf        RESET_RC0                    ; Se configura como entradas.
  33.     bsf        EJECT_RC1
  34.     bsf        OPEN_RC2
  35.     bsf        CLOSE_RC3                    
  36.     bsf        GREEN_RC4
  37.     bsf        RED_RC5
  38.     bsf        Auxiliar_6
  39.     bsf        Auxiliar_7
  40.     BANKSEL    PORTC                    ; Banco 0.
  41.     clrw
  42.  
  43. Principal
  44.     movf    PORTC,W                ; Lee los sensores.
  45.     andlw    b'00111111'            ; Máscara para quedarse con el valor de los sensores.
  46.     addwf    PCL,F                ; Salta a la configuración adecuada.
  47.     goto    Configuracion0        ; 0 0 0 0 0 0
  48.     goto    Configuracion1        ; 0 0 0 0 0 1
  49.     goto    Configuracion2        ; 0 0 0 0 1 0
  50.     goto    Configuracion3        ; 0 0 0 0 1 1
  51.     goto    Configuracion4        ; 0 0 0 1 0 0
  52.     goto    Configuracion5        ; 0 0 0 1 0 1
  53.     goto    Configuracion6        ; 0 0 0 1 1 0
  54.     goto    Configuracion7        ; 0 0 0 1 1 1
  55.     goto    Configuracion8        ; 0 0 1 0 0 0
  56.     goto    Configuracion9        ; 0 0 1 0 0 1
  57.     goto    Configuracion10        ; 0 0 1 0 1 0
  58.     goto    Configuracion11        ; 0 0 1 0 1 1
  59.     goto    Configuracion12        ; 0 0 1 1 0 0
  60.     goto    Configuracion13        ; 0 0 1 1 0 1
  61.     goto    Configuracion14        ; 0 0 1 1 1 0
  62.     goto    Configuracion15        ; 0 0 1 1 1 1
  63.     goto    Configuracion16        ; 0 1 0 0 0 0
  64.     goto    Configuracion17        ; 0 1 0 0 0 1
  65.     goto    Configuracion18        ; 0 1 0 0 1 0
  66.     goto    Configuracion19        ; 0 1 0 0 1 1
  67.     goto    Configuracion20        ; 0 1 0 1 0 0
  68.     goto    Configuracion21        ; 0 1 0 1 0 1
  69.     goto    Configuracion22        ; 0 1 0 1 1 0
  70.     goto    Configuracion23        ; 0 1 0 1 1 1
  71.     goto    Configuracion24        ; 0 1 1 0 0 0
  72.     goto    Configuracion25        ; 0 1 1 0 0 1
  73.     goto    Configuracion26        ; 0 1 1 0 1 0
  74.     goto    Configuracion27        ; 0 1 1 0 1 1
  75.     goto    Configuracion28        ; 0 1 1 1 0 0
  76.     goto    Configuracion29        ; 0 1 1 1 0 1
  77.     goto    Configuracion30        ; 0 1 1 1 1 0
  78.     goto    Configuracion31        ; 0 1 1 1 1 1
  79.     goto    Configuracion32
  80.     goto    Configuracion33
  81.     goto    Configuracion34
  82.     goto    Configuracion35
  83.     goto    Configuracion36
  84.     goto    Configuracion37
  85.     goto    Configuracion38
  86.     goto    Configuracion39
  87.     goto    Configuracion40
  88.     goto    Configuracion41
  89.     goto    Configuracion42
  90.     goto    Configuracion43
  91.     goto    Configuracion44
  92.     goto    Configuracion45
  93.     goto    Configuracion46
  94.     goto    Configuracion47
  95.     goto    Configuracion48
  96.     goto    Configuracion49
  97.     goto    Configuracion50
  98.     goto    Configuracion51
  99.     goto    Configuracion52
  100.     goto    Configuracion53
  101.     goto    Configuracion54
  102.     goto    Configuracion55
  103.     goto    Configuracion56
  104.     goto    Configuracion57
  105.     goto    Configuracion58
  106.     goto    Configuracion59
  107.     goto    Configuracion60
  108.     goto    Configuracion61
  109.     goto    Configuracion62
  110.     goto    Configuracion63
  111. Configuracion0                        
  112.     goto    ActivaSalida
  113. Configuracion1                        
  114.     goto    ActivaSalida
  115. Configuracion2                    
  116.     goto    ActivaSalida
  117. Configuracion3                    
  118.     goto    ActivaSalida
  119. Configuracion4
  120.     goto    ActivaSalida
  121. Configuracion5
  122.     goto    ActivaSalida
  123. Configuracion6
  124.     goto    ActivaSalida
  125. Configuracion7
  126.     goto    ActivaSalida
  127. Configuracion8
  128.     goto    ActivaSalida
  129. Configuracion9
  130.     goto    ActivaSalida
  131. Configuracion10
  132.     goto    ActivaSalida
  133. Configuracion11
  134.     goto    ActivaSalida
  135. Configuracion12
  136.     goto    ActivaSalida
  137. Configuracion13
  138.     goto    ActivaSalida
  139. Configuracion14
  140.     goto    ActivaSalida
  141. Configuracion15
  142.     goto    ActivaSalida
  143. Configuracion16
  144.     goto    ActivaSalida
  145. Configuracion17
  146.     goto    ActivaSalida
  147. Configuracion18
  148.     goto    ActivaSalida
  149. Configuracion19
  150.     goto    ActivaSalida
  151. Configuracion20
  152.     goto    ActivaSalida
  153. Configuracion21
  154.     goto    ActivaSalida
  155. Configuracion22
  156.     goto    ActivaSalida
  157. Configuracion23
  158.     goto    ActivaSalida
  159. Configuracion24
  160.     goto    ActivaSalida
  161. Configuracion25
  162.     goto    ActivaSalida
  163. Configuracion26
  164.     goto    ActivaSalida
  165. Configuracion27
  166.     goto    ActivaSalida
  167. Configuracion28
  168.     goto    ActivaSalida
  169. Configuracion29
  170.     goto    ActivaSalida
  171. Configuracion30
  172.     goto    ActivaSalida
  173. Configuracion31
  174.     goto    ActivaSalida
  175. Configuracion32
  176.     goto    ActivaSalida
  177. Configuracion33
  178.     goto    ActivaSalida
  179. Configuracion34
  180.     goto    ActivaSalida
  181. Configuracion35
  182.     goto    ActivaSalida
  183. Configuracion36
  184.     goto    ActivaSalida
  185. Configuracion37
  186.     goto    ActivaSalida
  187. Configuracion38
  188.     goto    ActivaSalida
  189. Configuracion39
  190.     goto    ActivaSalida
  191. Configuracion40
  192.     goto    ActivaSalida
  193. Configuracion41
  194.     goto    ActivaSalida
  195. Configuracion42
  196.     goto    ActivaSalida
  197. Configuracion43
  198.     goto    ActivaSalida
  199. Configuracion44
  200.     goto    ActivaSalida
  201. Configuracion45
  202.     goto    ActivaSalida
  203. Configuracion46
  204.     goto    ActivaSalida
  205. Configuracion47
  206.     goto    ActivaSalida
  207. Configuracion48
  208.     goto    ActivaSalida
  209. Configuracion49
  210.     goto    ActivaSalida
  211. Configuracion50
  212.     goto    ActivaSalida
  213. Configuracion51
  214.     goto    ActivaSalida
  215. Configuracion52
  216.     goto    ActivaSalida
  217. Configuracion53
  218.     goto    ActivaSalida
  219. Configuracion54
  220.     goto    ActivaSalida
  221. Configuracion55
  222.     goto    ActivaSalida
  223. Configuracion56
  224.     goto    ActivaSalida
  225. Configuracion57
  226.     goto    ActivaSalida
  227. Configuracion58
  228.     goto    ActivaSalida
  229. Configuracion59
  230.     goto    ActivaSalida
  231. Configuracion60
  232.     goto    ActivaSalida
  233. Configuracion61
  234.     goto    ActivaSalida
  235. Configuracion62
  236.     goto    ActivaSalida
  237. Configuracion63
  238.     goto    ActivaSalida
  239. ActivaSalida
  240. ;    movwf    PORTB                
  241.     goto     Principal
  242.  
  243. ;
  244. ; "Mensajes" ----------------------------------------------------------------------------
  245. ;
  246. Mensajes
  247.     addwf    PCL,F
  248. Mensaje1
  249.     DT    "      STAND BY      ", 0x00
  250. Mensaje2
  251.     DT    "MEnsaje             1.", 0x00
  252. Mensaje3
  253.     DT     "Mensaje 2            ", 0x00
  254. Mensaje4
  255.     DT    "Mensaje 3             ", 0x00
  256. Mensaje5
  257.     DT     "     Msm             ", 0x00
  258. Mensaje6
  259.     DT    "Motor girando...", 0x00
  260. Mensaje7
  261.     DT     "marca", 0x00
  262. Mensaje8
  263.     DT    "Mensaje 4-2     ", 0x00
  264. FinTabla
  265. ;MensajeAnuncio
  266. ;    DT " anuncio---       ", 0x00    
  267.  
  268.     IF (FinTabla > 0xFF)
  269.         ERROR    "¡CUIDADO!: La tabla ha superado el tamaño de la página de los"
  270.         MESSG    "primeros 256 bytes de memoria ROM. NO funcionará correctamente."
  271.     ENDIF
  272.  
  273.     INCLUDE  <LCD_4BIT.INC>
  274.     INCLUDE  <LCD_MENS.INC>
  275.     INCLUDE  <RETARDOS.INC>
  276.     END
  277.  
Saludo.

16
Otros CLR / Código a C++
« en: Miércoles 9 de Junio de 2010, 17:02 »
Buenas:

Quiero pasar este pedazo de código de C# a C++ 2010. ¿Cómo es?

Código: Text
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. using System.Runtime.InteropServices; // No olvidar aqui.
  8.  
  9. namespace Puerto_paralelo
  10. {
  11.     class PortInterop
  12.     {
  13.         [DllImport("inpout32.dll", EntryPoint = "Out32")]
  14.         public static extern void Output(int adress, int value);
  15.         [DllImport("inpout32.dll", EntryPoint = "Inp32")]
  16.         public static extern int Input(int adress);
  17.     }
  18. }
  19.  
  20.  

He creado una clase como indica abajo.







A partir de aquí se me crearon el .h y el .cpp. Por aquí estoy perdido y no se como pasarlo de C# a C++ con Visual C++ 2010.





Saludo.

17
Microcontroladores / Pila desbordada.
« en: Sábado 29 de Mayo de 2010, 09:46 »
uenas:

Tengo las 8 pilas usadas del PIC16F887 y me sale este mensaje.

CORE-E0001: Stack over flow error occurred from instruction at 0x000324

¿Cómo corrigo ese error?

Un abrazo.

PD: A ver si sacan al mercado los nuevos PIC que tienen 16 niveles de Stack.
http://www.microchip.com/stellent/idcpl ... s=enhanced

18
Microcontroladores / Hacer un capturador de datos (Data Logger) con PIC
« en: Jueves 7 de Enero de 2010, 23:41 »
Hola:

Llevo un tiempo en diseñar un Data Logger. Tengo intención de hacerlo capturar señales del puerto serie asíncrona de la normativa RS232. Primero buscar información como este que cuenta algo.

http://pipelara20.tripod.com/txserial.htm

Si hicieras o serías capaz de hacer un Data Logger. ¿Cómo lo diseñarías? Es decir...

1) ¿Qué datos o protocolo quieres capturar, RS232 asíncrona o síncrona, I2C, SPI, USB o todos en modo selección? (Mejor centrarse en uno primero).

2) ¿Le interesa capturar los datos con un PIC y guarfarlo en una EEPROM externa? (Puedes poner 4 24LC1025 como si fuera una, ya serían 4 Mbit).

3) ¿Con cuál microcontrolador? (Depende de los patillajes a usar, memoria programa, EERPOM y RAM).

4) ¿Estás dispuesto a colaborar? (Colaborar en sentido de mostrar información para ayudar, ideas, consejos, etc, no tiene porqué saber de microcontroladores pero, podrás hacer un Data Logger cuando lo acabe el hardWare y un fantastico manual paso a paso cargado de detalles como puedes ver este ejemplo que hice hace tiempo).

Ver ejemplo.

5) Si alguien quiere diseñar un programa interfaz del PC para ver valores lo haré con C# (más adelante también con C++ y VB .net).

6) Preguntarse a si mismo. ¿Realmente quiero un Data Logger?

Hay Data Logger de capturar muestras de temperatura com puedes ver abajo.
http://www.xbot.es/microplans/regtemp.htm

Un cordial saludo.

19
Microcontroladores / Fuente de 16F84A pasarlo al 16F88
« en: Miércoles 30 de Diciembre de 2009, 22:57 »
Hola:

Teniendo este código del 16F84A. Ahora quiero pasarlo al 16F88, claro que tengo entendido que debe ser el F88 a digitales plos puertos A y B, no se hacerlo.
Código: ASM
  1.  
  2. ; CÓDIGOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
  3.  
  4.     ORG     0
  5. Inicio
  6.     bsf     STATUS,RP0              ; Accede al Banco 1.
  7.     clrf    PORTA                   ; Puerto A como salidas.
  8.     movlw   b'11111111'             ; Las 8 líneas del puerto B se configura como entradas.
  9.     movwf   PORTB
  10.     bcf     STATUS,RP0              ; Accede al Banco 0.
  11.     clrf    PORTA                   ; Supuestamente la lámpara y Led apagadas. 
  12.  

20
Microcontroladores / Poco a poco me paso del F84 al F88.
« en: Miércoles 30 de Diciembre de 2009, 17:46 »
Hola:

Viendo que en los locales cada vez se vende menos PIC 16F84A y más el 16F628A, me cuentan que el sustituto directo del famoso y popular 16F84 es el 16F88 en definitica. Antes no se creía que podría del el 16F628A, veo que no.

Por si acaso que dejen de fabricar el 16F84A como ocurre con los 16F876A/877A desde la Web del fabricante no los vende, ahora son los 16F886/887 con mejores prestaciones.

La idea es aprender a pasar de 16F84A al 16F88 que me llegarán a principios de Enero 2010. En este caso se utilizará el cristal de cuarzo externo a 4 MHz como el 16F84 aunqu el 16F88 aguante a 20 MHz. Quiero hacer el código fuente de este circuito del detector por movimiento y luz del F84 al F88 a ver si no es tan complicado como parece.



Ver: Luz por detector de movimiento y crepuscular Senpir


sobre todo me interesa la parte del __CONGIG que quiero dejarlo lo más parecido al 16F84A.

   




Citar
   LIST    P=16F84A            ; Procesador.
    INCLUDE <P16F84A.INC>

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC



En el 16F88 lo he dejado así, no se si será el correcto.




Viendo el archivo P16F88.INC que me viene en el MPLAB v8.43 parece que me puedo guiar y adivinar los del __CONFIG.

Lo veo complicado y no quiero equivocarme. Al menos quiero ser como se hace el __CONFIG más adecuado. Ya me encargaré de pasar los bankos de memoria o actualizrlos en cada librería que encuentre con el PIC.

Data Sheet
16F84A
16F88

Un cordial saludo.

21
C# / Archivos de broma con C#
« en: Sábado 12 de Diciembre de 2009, 00:43 »
Hola:

Me ha enviado un archivo en CMD de broma que me llena los PenDrive de 8 GB a tope. En mi caso le quiero devolver la jugada en plan broma y lo único que se me ocurre es esto. Tarda en escribirse, pero él lo hacía más rapido  que mi método. ¿Alguien le sale mejor?

Código: C#
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. using System.IO; // No olvidar desde aquí.
  8.  
  9. namespace CMD_Serie
  10. {
  11.     class Program
  12.     {
  13.         private const string FILE_NAME = "Archivo.txt";
  14.  
  15.         static void Main(string[] args)
  16.         {
  17.             if (File.Exists(FILE_NAME))
  18.             {
  19.                 Console.WriteLine("{0} ya existe.", FILE_NAME);
  20.                 Console.ReadKey();
  21.                 return;
  22.             }
  23.             using (StreamWriter sw = File.CreateText(FILE_NAME))
  24.             {
  25.                 for (long i = 1; i <= 999999999999999999; i++)
  26.                 {
  27.                     Console.WriteLine(i);
  28.                     sw.WriteLine(i);
  29.                     //sw.Close();
  30.                 }
  31.             }
  32.         }
  33.     }
  34. }
  35.  
  36.  

Saludo.
Código: ASM
  1.  
  2.  

22
C# / Hacer log con richTextBox
« en: Jueves 10 de Diciembre de 2009, 02:10 »
Hola:

Tengo un Form1, en él un richTextBox, un textBox y un buttton llamado "Cambiar". El programa se trata de lograr una auditoría, es decir, guardar los datos recibidos en el RichTextBox en un documento de texto con extención .log o .txt, me da igual.

El botón Cambiar debo seleccionar un componente para que se abra llamado SaveFileDialog, no lo se, solo creo.

El programa debe aparecer que al pulsar botón cambiar abre un cuadro donde guardar un archivo de texto .txt o .log en el directorio que quiera.

En el TextBox de al lado, aparece la dirección completa donde se están guardando los datos.

En el RichTextBox, lee los datos recibidos y los guarda en el .txt si se ha seleccionado.

¿Cómo se puede hacer?

Un cordial saludo.

23
C# / Lograr que funcione bien un richTextBox
« en: Domingo 6 de Diciembre de 2009, 19:27 »
Hola:

Si se fijan bien, en el HyperTerminal de Windows a la hora de mostrar datos o mensajes de textos en pantalla fila hacia abajo. Por mucho que se rellene siempre funciona y los datos actuales se ve siempre en primera fila, quiero decir, en pantalla.

Miren este ejemplo con el HyperTerminal como se muestra los datos, siempre visibles.

Ver vídeo.


Intentando hacer lo mismo con Visual C# Express, no me sale. Siempre los datos se muestra hacia abajo sin poder ver las nuevas actualizaciones. Como que se quedan escondida. Aquí muestro un ejemplo pero con un textBox , en realidad hay que usar un richTextBox que queda mejor.

Bajar código fuente de ejemplo.

Contraseña = D.P.E.




¿Hay alguna solución? Llevo un año intentándolo  pero no lo consigo, me cansé y vulvo a la carga por si algien descubre la manera de hacerlo. La única manera para ver los datos que se están actualizando es mover la barra de la derecha hacia abajo, al igual que lees una página Web poco a poco hacia abajo.



Como pueden ver en la imagen .gif, la barra lateral se nota que los datos entran pero no se mantiene como el HyperTerminal de Windows. Por lo que veo, acada dato que entra, la barra debe estar abajo al igual que los datos, quizá así se puede hacer pero no se como.

Si no entiendes lo que quiero explicar, lo intentaré de otra manera.

Saludo.

24
C# / Curiosidad sobre optimización de memoria
« en: Domingo 6 de Diciembre de 2009, 12:47 »
Hola:

Hace años, para que funcionace bien un programa, había que buscar la manera de que quepa en la memoria RAM. Hoy en día, ya nadie le importa, hay tanta RAM que ni se preocupan de estos recursos.

Antes ponía un integer así:

string saludo = "Hola. ¿Cómo están todos?"; // Así no optimizas la memoria, más bien la desperdicia.

Como resultado de salida muestra: Hola. ¿Cómo están todos?
Si te fijas hay 24 bytes y sobran muchos, ya que un int reserva mucha más memoria y es un tremendo desperdicio.


Hay que ponerlo así:

string saludo[3] = "Hola. ¿Cómo están todos?"; // Su salida cuenta del 0 al 3, es decir, de la H a la a. Con lo cual, sólo muestra la palabra Hola. Para que se vea completo hay que usar...

string saludo[23] = "Hola. ¿Cómo están todos?"; // Aquí ya se muestra la frase completa.

Lo que puse arriba es un ejemplo. Normalmente se hace con int.

En C#. ¿Cómo se hace la optimización de memoria?

Vale la pena optimizar memoria, ya que en programas grandes se nota la velocidad.

Saludo.

25
C# / Código más simple si es posible
« en: Sábado 5 de Diciembre de 2009, 23:10 »
Hola:

Teniendo este código:

Código: C#
  1. private void button_b_Click(object sender, EventArgs e)
  2.         {
  3.             byte[] mBuffer = new byte[11];
  4.             mBuffer[0] = 0x48; //ASCII letra "H".
  5.             mBuffer[0] = 0x6F; //ASCII letra "o".
  6.             mBuffer[0] = 0x6C; //ASCII letra "l".
  7.             mBuffer[0] = 0x61; //ASCII letra "a".
  8.             mBuffer[0] = 0x20; //ASCII letra " ".
  9.             mBuffer[0] = 0x6D; //ASCII letra "m".
  10.             mBuffer[0] = 0x75; //ASCII letra "u".
  11.             mBuffer[0] = 0x6E; //ASCII letra "n".
  12.             mBuffer[0] = 0x64; //ASCII letra "d".
  13.             mBuffer[0] = 0x6F; //ASCII letra "o".
  14.             mBuffer[0] = 0x2E; //ASCII letra ".".
  15.             serialPort1.Write(mBuffer, 0, mBuffer.Length);
  16.         }
  17.  
  18.  

En este caso son 11 byte para enviar por puerto serie. Si fueran 50 sería una lista muy grande hacia abajo. ¿Hay alguna forma diferente hacerlo más simplificado con el mismo resultado?

Saludo.

Páginas: [1] 2 3 4