|
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
1
« 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#: 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
« 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#: 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
« 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: 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=0Como 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
« 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. 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
« 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
« 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
« 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
« 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. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; // No olvidar estos using. //http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/86149304-c26f-4dcf-b003-198a8879decf namespace RS232_a { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button_Abrir_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog1.FileName; } } private void button_Enviar_Click(object sender, EventArgs e) { serialPort1.Open(); byte[] mBuffer = Encoding.ASCII.GetBytes(textBox1.Text); serialPort1.Write(mBuffer, 0, mBuffer.Length); serialPort1.Close(); MessageBox.Show("Enviado."); } } }
Saludo.
9
« 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.pdfDescarga: (Código fuente y esquema Proteus). https://sites.google.com/site/metaconta ... ects=0&d=1Felices fiestas 2010.
10
« en: Jueves 28 de Octubre de 2010, 15:50 »
Hola: Viendo este ejercicio. Ver ejercicioNo se si he interpretado bien lo que me pide y siguiendo los ejemplos del PDF he modificado este código. cadena = raw_input('Escribe una frase: ') while cadena != '': cambios = 0 for i in range(1, len(cadena)): if cadena[i] == ' ' and cadena[i-1] != ' ': cambios = cambios + 1 if cadena[-1] == ' ': cambios = cambios - 1 palabras = cambios + 1 print 'Palabras:', palabras, 'palabras y', i, 'carácteres.' cadena = raw_input('Escribe una frase: ')
Su resultado es este. Escribe una frase: Vale más una imagen, que mil palabras. Palabras: 7 palabras y 38 carácteres. Escribe una frase: ¿Qué opinas?
11
« en: Miércoles 20 de Octubre de 2010, 13:22 »
Hola: http://www.subeimagenes.com/img/129-130-4950.gifnum = int(raw_input('Agrega un número: ')) creo_que_es_primo = True divisor = 2 while divisor < num and creo_que_es_primo: if num % divisor == 0: creo_que_es_primo = False divisor += 1 if creo_que_es_primo: print 'El número', num, 'es primo' else: print 'El número', num, 'no es primo'
Hice algo de esto pero no se si tiene que ver. num = int(raw_input('Agrega un número: ')) num_2 = int(raw_input('Agrega otro número: ')) creo_que_es_primo = True divisor = 2 while divisor < num and creo_que_es_primo: if num % divisor == 0: creo_que_es_primo = False divisor += 1 if creo_que_es_primo: print 'El número', num, 'es primo' else: print 'El número', num, 'no es primo' creo_que_es_primo_2 = True divisor_2 = 1 while divisor_2 < num_2 and creo_que_es_primo_2: if num_2 % divisor_2 == 0: creo_que_es_primo_2 = False divisor_2 += 1 if creo_que_es_primo_2: print 'El número', num_2, 'es primo' else: print 'El número', num_2, 'no es primo' # Como dice que los divida, me imagino que se refiere a esto. n = num / num_2 print n
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_divisorEstos 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.pdfSaludo.
12
« 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? from math import acos, pi, sqrt opcion = '' while opcion <= 'a' or opcion >= 'i': #while opcion in 'abcdefghi': print '''Selecciona una opción: a) Introducir el primer vector. b) Introducir el segundo vector. c) Calcular la suma. d) Calcular la diferencia. e) Calcular el producto escalar. f) Calcular el producto vectorial. g) Calcular el ángulo (en gastos) entre ellos. h) Calcular la longitud. i) Finalizar. ''' opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ') # Primer vector. if opcion == 'a': x1 = float(raw_input('Introduce valor x1: ')) y1 = float(raw_input('Introduce valor y1: ')) z1 = float(raw_input('Introduce valor z1: ')) print 'Haz ingresado estos valores', x1, y1, z1, 'del primer vector.' # Segundo vector. elif opcion == 'b': x2 = float(raw_input('Introduce valor x2: ')) y2 = float(raw_input('Introduce valor y2: ')) z2 = float(raw_input('Introduce valor z2: ')) print 'Haz ingresado estos valores', x2, y2, z2, 'del segundo vector.' # Suma. elif opcion == 'c': suma = (x1 + x2, y1 + y2, z1 + z2) print suma # Diferencia. elif opcion == 'd': diferencia = (x1 - x2, y1 - y2, z1 - z2) print diferencia # Producto escalar. elif opcion == 'e': producto = (x1 * x2 + y1 * y2 + z1 * z2) print producto # Producto vectorial. elif opcion == 'f': vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2) print vectorial # Ángulo. elif opcion == 'g': angulo = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2)) print angulo # Longitud. elif opcion == 'h': x = float(raw_input('Introduce valor x: ')) y = float(raw_input('Introduce valor y: ')) z = float(raw_input('Introduce valor z: ')) longitud = sqrt(x**2+y**2+z**2) print longitud elif opcion == 'i': print 'Gracias por usar el programa.' break else: print 'Puedes teclear estas siguientes opciones: a, b, c, d, e, f, g, h o i. Usted haz tecleado', opcion
13
« 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. # Introducir datos a la variable. E = int(raw_input('Ingresar Capital: ')) # Variables Billetes. a = 500 b = 200 c = 100 d = 50 e = 20 f = 10 g = 5 # Variables Monedas. h = 2 i = 1 #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) #print R if (E / a) == 0: a1 = E print a1 if (a1 / b) == 0: a2 = a1 print a2 etc. print '%d billetes de 500 €uros.' % a1 print '%d billetes de 200 €uros.' % a2 print '%d billetes de 100 €uros.' % a3 print '%d billetes de 50 €uros.' % a4 print '%d billetes de 20 €uros.' % a5 print '%d billetes de 10 €uros.' % a6 print '%d billetes de 5 €uros.' % a7 print '%d monedas de 2 €uros.' % a8 print '%d monedas de 1 €uros.' % a9
14
« 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: a = raw_input(' Introduce un número par o impar: ')
(Ejemplo: 14 es el doble de 7, que es impar.) Saludo.
15
« 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? ; ZONA DE DATOS ********************************************************************** TITLE "LCD Sensor PS2" SUBTITLE "Revisión 1.00" LIST P=16F886 INCLUDE <P16F886.INC> __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V CBLOCK 0x20 CONTADOR ENDC #DEFINE RESET_RC0 PORTC,0 #DEFINE EJECT_RC1 PORTC,1 #DEFINE OPEN_RC2 PORTC,2 #DEFINE CLOSE_RC3 PORTC,3 #DEFINE GREEN_RC4 PORTC,4 #DEFINE RED_RC5 PORTC,5 #DEFINE Auxiliar_6 PORTC,6 #DEFINE Auxiliar_7 PORTC,7 ; ZONA DE CÓDIGOS ******************************************************************** ORG 0 ; El programa comienza en la dirección 0. Inicio call LCD_Inicializa BANKSEL TRISC ; Banco 1. bsf RESET_RC0 ; Se configura como entradas. bsf EJECT_RC1 bsf OPEN_RC2 bsf CLOSE_RC3 bsf GREEN_RC4 bsf RED_RC5 bsf Auxiliar_6 bsf Auxiliar_7 BANKSEL PORTC ; Banco 0. clrw Principal movf PORTC,W ; Lee los sensores. andlw b'00111111' ; Máscara para quedarse con el valor de los sensores. addwf PCL,F ; Salta a la configuración adecuada. goto Configuracion0 ; 0 0 0 0 0 0 goto Configuracion1 ; 0 0 0 0 0 1 goto Configuracion2 ; 0 0 0 0 1 0 goto Configuracion3 ; 0 0 0 0 1 1 goto Configuracion4 ; 0 0 0 1 0 0 goto Configuracion5 ; 0 0 0 1 0 1 goto Configuracion6 ; 0 0 0 1 1 0 goto Configuracion7 ; 0 0 0 1 1 1 goto Configuracion8 ; 0 0 1 0 0 0 goto Configuracion9 ; 0 0 1 0 0 1 goto Configuracion10 ; 0 0 1 0 1 0 goto Configuracion11 ; 0 0 1 0 1 1 goto Configuracion12 ; 0 0 1 1 0 0 goto Configuracion13 ; 0 0 1 1 0 1 goto Configuracion14 ; 0 0 1 1 1 0 goto Configuracion15 ; 0 0 1 1 1 1 goto Configuracion16 ; 0 1 0 0 0 0 goto Configuracion17 ; 0 1 0 0 0 1 goto Configuracion18 ; 0 1 0 0 1 0 goto Configuracion19 ; 0 1 0 0 1 1 goto Configuracion20 ; 0 1 0 1 0 0 goto Configuracion21 ; 0 1 0 1 0 1 goto Configuracion22 ; 0 1 0 1 1 0 goto Configuracion23 ; 0 1 0 1 1 1 goto Configuracion24 ; 0 1 1 0 0 0 goto Configuracion25 ; 0 1 1 0 0 1 goto Configuracion26 ; 0 1 1 0 1 0 goto Configuracion27 ; 0 1 1 0 1 1 goto Configuracion28 ; 0 1 1 1 0 0 goto Configuracion29 ; 0 1 1 1 0 1 goto Configuracion30 ; 0 1 1 1 1 0 goto Configuracion31 ; 0 1 1 1 1 1 goto Configuracion32 goto Configuracion33 goto Configuracion34 goto Configuracion35 goto Configuracion36 goto Configuracion37 goto Configuracion38 goto Configuracion39 goto Configuracion40 goto Configuracion41 goto Configuracion42 goto Configuracion43 goto Configuracion44 goto Configuracion45 goto Configuracion46 goto Configuracion47 goto Configuracion48 goto Configuracion49 goto Configuracion50 goto Configuracion51 goto Configuracion52 goto Configuracion53 goto Configuracion54 goto Configuracion55 goto Configuracion56 goto Configuracion57 goto Configuracion58 goto Configuracion59 goto Configuracion60 goto Configuracion61 goto Configuracion62 goto Configuracion63 Configuracion0 goto ActivaSalida Configuracion1 goto ActivaSalida Configuracion2 goto ActivaSalida Configuracion3 goto ActivaSalida Configuracion4 goto ActivaSalida Configuracion5 goto ActivaSalida Configuracion6 goto ActivaSalida Configuracion7 goto ActivaSalida Configuracion8 goto ActivaSalida Configuracion9 goto ActivaSalida Configuracion10 goto ActivaSalida Configuracion11 goto ActivaSalida Configuracion12 goto ActivaSalida Configuracion13 goto ActivaSalida Configuracion14 goto ActivaSalida Configuracion15 goto ActivaSalida Configuracion16 goto ActivaSalida Configuracion17 goto ActivaSalida Configuracion18 goto ActivaSalida Configuracion19 goto ActivaSalida Configuracion20 goto ActivaSalida Configuracion21 goto ActivaSalida Configuracion22 goto ActivaSalida Configuracion23 goto ActivaSalida Configuracion24 goto ActivaSalida Configuracion25 goto ActivaSalida Configuracion26 goto ActivaSalida Configuracion27 goto ActivaSalida Configuracion28 goto ActivaSalida Configuracion29 goto ActivaSalida Configuracion30 goto ActivaSalida Configuracion31 goto ActivaSalida Configuracion32 goto ActivaSalida Configuracion33 goto ActivaSalida Configuracion34 goto ActivaSalida Configuracion35 goto ActivaSalida Configuracion36 goto ActivaSalida Configuracion37 goto ActivaSalida Configuracion38 goto ActivaSalida Configuracion39 goto ActivaSalida Configuracion40 goto ActivaSalida Configuracion41 goto ActivaSalida Configuracion42 goto ActivaSalida Configuracion43 goto ActivaSalida Configuracion44 goto ActivaSalida Configuracion45 goto ActivaSalida Configuracion46 goto ActivaSalida Configuracion47 goto ActivaSalida Configuracion48 goto ActivaSalida Configuracion49 goto ActivaSalida Configuracion50 goto ActivaSalida Configuracion51 goto ActivaSalida Configuracion52 goto ActivaSalida Configuracion53 goto ActivaSalida Configuracion54 goto ActivaSalida Configuracion55 goto ActivaSalida Configuracion56 goto ActivaSalida Configuracion57 goto ActivaSalida Configuracion58 goto ActivaSalida Configuracion59 goto ActivaSalida Configuracion60 goto ActivaSalida Configuracion61 goto ActivaSalida Configuracion62 goto ActivaSalida Configuracion63 goto ActivaSalida ActivaSalida ; movwf PORTB goto Principal ; ; "Mensajes" ---------------------------------------------------------------------------- ; Mensajes addwf PCL,F Mensaje1 DT " STAND BY ", 0x00 Mensaje2 DT "MEnsaje 1.", 0x00 Mensaje3 DT "Mensaje 2 ", 0x00 Mensaje4 DT "Mensaje 3 ", 0x00 Mensaje5 DT " Msm ", 0x00 Mensaje6 DT "Motor girando...", 0x00 Mensaje7 DT "marca", 0x00 Mensaje8 DT "Mensaje 4-2 ", 0x00 FinTabla ;MensajeAnuncio ; DT " anuncio--- ", 0x00 IF (FinTabla > 0xFF) ERROR "¡CUIDADO!: La tabla ha superado el tamaño de la página de los" MESSG "primeros 256 bytes de memoria ROM. NO funcionará correctamente." ENDIF INCLUDE <LCD_4BIT.INC> INCLUDE <LCD_MENS.INC> INCLUDE <RETARDOS.INC> END
Saludo.
16
« 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? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; // No olvidar aqui. namespace Puerto_paralelo { class PortInterop { [DllImport("inpout32.dll", EntryPoint = "Out32")] public static extern void Output(int adress, int value); [DllImport("inpout32.dll", EntryPoint = "Inp32")] public static extern int Input(int adress); } }
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
« 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
« 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.htmSi 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.htmUn cordial saludo.
19
« 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ÓDIGOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ORG 0 Inicio bsf STATUS,RP0 ; Accede al Banco 1. clrf PORTA ; Puerto A como salidas. movlw b'11111111' ; Las 8 líneas del puerto B se configura como entradas. movwf PORTB bcf STATUS,RP0 ; Accede al Banco 0. clrf PORTA ; Supuestamente la lámpara y Led apagadas.
20
« 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 Senpirsobre todo me interesa la parte del __CONGIG que quiero dejarlo lo más parecido al 16F84A. 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 16F84A16F88Un cordial saludo.
21
« 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? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; // No olvidar desde aquí. namespace CMD_Serie { class Program { private const string FILE_NAME = "Archivo.txt"; static void Main(string[] args) { if (File.Exists(FILE_NAME)) { Console.WriteLine("{0} ya existe.", FILE_NAME); Console.ReadKey(); return; } using (StreamWriter sw = File.CreateText(FILE_NAME)) { for (long i = 1; i <= 999999999999999999; i++) { Console.WriteLine(i); sw.WriteLine(i); //sw.Close(); } } } } }
Saludo.
22
« 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
« 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
« 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
« en: Sábado 5 de Diciembre de 2009, 23:10 »
Hola: Teniendo este código: private void button_b_Click(object sender, EventArgs e) { byte[] mBuffer = new byte[11]; mBuffer[0] = 0x48; //ASCII letra "H". mBuffer[0] = 0x6F; //ASCII letra "o". mBuffer[0] = 0x6C; //ASCII letra "l". mBuffer[0] = 0x61; //ASCII letra "a". mBuffer[0] = 0x20; //ASCII letra " ". mBuffer[0] = 0x6D; //ASCII letra "m". mBuffer[0] = 0x75; //ASCII letra "u". mBuffer[0] = 0x6E; //ASCII letra "n". mBuffer[0] = 0x64; //ASCII letra "d". mBuffer[0] = 0x6F; //ASCII letra "o". mBuffer[0] = 0x2E; //ASCII letra ".". serialPort1.Write(mBuffer, 0, mBuffer.Length); }
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.
|
|
|