Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - Meta

#421
Hola:

¿Por qué asm en Windwos a estas alturas de la vida?
Si es para temas de hadcer driver lo entiendo.

He estado buscando, no encuentro ejemplo, solo documentos sobre asm.
http://personals.ac.upc.edu/guerrero/fo/asm.pdf

https://es.answers.yahoo.com/question/index?qid=20080427172053AAJ4KWm

[youtube=640,360]https://www.youtube.com/watch?v=ofG8OD7Jbpg[/youtube]

Saludos.
#422
Hola:

A pesar de tener más experiencia con C#, con la idea de pasarlo a C++, he hecho esto.

Código C#:
Código (csharp) [Seleccionar]
using System;
using System.Text;
using System.IO.Ports;

namespace Envio_y_recepcion_puerto_serie_cs
{
   class Program
   {
       static void Main(string[] args)
       {
           // Título de la ventana.
           Console.Title = "Recibir datos desde Arduino con C#";

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

           // Cree un nuevo objeto SerialPort con la configuración predeterminada.
           SerialPort Puerto_serie = new SerialPort("COM4");

           Puerto_serie.BaudRate = 115200;
           Puerto_serie.Parity = Parity.None;
           Puerto_serie.StopBits = StopBits.One;
           Puerto_serie.DataBits = 8;
           Puerto_serie.Handshake = Handshake.None;
           Puerto_serie.RtsEnable = true;

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

           // Detecta cualquier dato recibido.
           Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

           Puerto_serie.Open(); // Abrir puerto.

           ConsoleKey tecla;
           Console.WriteLine("Pulse tecla 1 para encender y 2 para apagar:");

           do
           {
               tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.

               switch (tecla)
               {
                   case ConsoleKey.D1: // Tecla 1 del teclado estandar.
                   case ConsoleKey.NumPad1: // Tecla 1 del número del pad.
                       byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
                       Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length); // Envía los datos del buffer todo su contenido.
                       Console.WriteLine("Enviado: {0}", miBuffer1); // Muestra en pantala el mensaje enviado, en este caso, Luz_ON.
                       break;

                   case ConsoleKey.D2:
                   case ConsoleKey.NumPad2:
                       byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
                       Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
                       //Console.WriteLine("Enviado: {0}", miBuffer2);
                       break;

                   default:
                       Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");
                       break;
               }
           }

           // Pulsa Escape para salir del menú.
           while (tecla != ConsoleKey.Escape);

           Console.WriteLine("Presione cualquier tecla para continuar...");
           Console.WriteLine();
           Console.ReadKey(); // Espera pulsar una tecla cualquiera.
           Puerto_serie.Close(); // Cierra el puerto serie.
       }

   // Detecta cualquier dato entrante.
   private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
       {
           SerialPort sp = (SerialPort)sender;
           string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
           Console.WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.
       }
   }
}


Es este último código que me funciona mejor, también he intentado que me muestre el valor enviado y me diga en pantalla:

Enviado: Luz_ON


He usado esto para que muestre lo que envía:
Código (csharp) [Seleccionar]
Console.WriteLine("Enviado: {0}", miBuffer1);

Su resultado fue este:
Enviado: system.Byte[]

¿Pero qué es esto?

Concretamente aquí:
Código (csharp,5) [Seleccionar]
                   case ConsoleKey.D1:
                   case ConsoleKey.NumPad1:
                       byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON");
                       Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length);
                       Console.WriteLine("Enviado: {0}", miBuffer1);
                       break;


Lo bueno que también ya recibo el ON y OFF si pulso el pulsador dede Arduino directamente. Funciona todo menos lo indicado justo arriba.

Debe aparecer de esta manera: Luz_ON

Aparece en hexadecimales. ;)

Código (csharp) [Seleccionar]
Console.WriteLine("Enviado: {0}", BitConverter.ToString(miBuffer1));
Cuando esté listo todo C#, ya se podrá hacer el C++ de una vez por todas, jaaaj ajajajja. Eso espero y se las debo a todos. ;)

PD: No me había dado cuenta que tienes un blog, no sabía que eres un profesional de C++.
#423
La cosa rara que hace es  no volver a la opción principal si no pones un 1 o un 2, desde que pongas otra cosa, no sale de ahí.

La cuestión es como se hace.

Sigo investigando...
#424
El Management está incuido, el using Types; nada de nada.
#425
Hola:

He intentado hacer el último código en C# y como que no.


Parece que ese código es muy antiguo y no hay manera de hecharlo a andar.

Gracias de todas formas. Y mira que lo he intentado.
#426
Hola:

Parece que va cogiendo forma, aún así hay dos errores que no me deja en paz.

Código (vbnet) [Seleccionar]
AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived

Concretamente el Me.
https://msdn.microsoft.com/es-es/library/20fy88e0.aspx

CitarGravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   BC30043   'Me' solo es válido en un método de instancia.   Recibir_archivo_desde_Arduino_consola_VB   C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb   49   Activo

Otro error es este:
Código (vbnet) [Seleccionar]
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error BC30420 No se encontró 'Sub Main' en 'Recibir_archivo_desde_Arduino_consola_VB.Module1'. Recibir_archivo_desde_Arduino_consola_VB C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\vbc 1 Activo


Llevo tiempo traquiniando y no lo campto.
#427
Este tipo de cosas está muy protegido por google, muy protegido precisamente para evitar visitas falsas y llamar la atención cuando en realidad no debe haberla. A parte de esto, par no ganar dinero por visitas fantasmas.
#428
Hola:

Viendo lo visto, no he digo capaz, al menos por ahora, hacer un menú con fundamento para que me salga en C#, sigo con ello en paralelo ha este por si acaso. Me centraré en que si pulsas una tecla, directamente envía datos al puerto serie.

Código (cpp) [Seleccionar]
// Para crear conexión con los puertos COM1 - COM9.
// Serial* Arduino = new Serial("COM7");

// Para crear conexión con los puertos COM10 en adelante.
// Serial* Arduino = new Serial("\\\\.\\COM10");

#include <iostream>
#include <fstream>
#include <Windows.h>
#include "SerialClass.h"
using namespace std;

void main()
{
// Título de la ventana
SetConsoleTitle("Control Led Arduino.");

// Puerto serie.
Serial* Puerto = new Serial("COM4");

// Comandos para Arduino.
char Luz_ON[] = "Luz_ON"; // Envía "Luz_ON" al puerto serie.
char Luz_OFF[] = "Luz_OFF";
char lectura[50] = "\0"; // Guardan datos de entrada del puerto.

int opc; // Guarda un 1 o 2 tipo entero queintroduces desde la consola.

while (Puerto->IsConnected())
{
cout << endl; // Dejamos un retorno.
cout << "Introduzca la opcion deseada: " << endl << endl; // Muestra texto en pantalla.

cin >> opc; // Aquí introduces un número, el 1 o el 2.

switch (opc) // Espera recibir un 1 o un 2.
{
case 1:
// Encener luz.
cout << "Enviando: " << Luz_ON << endl; // Muestra en pantalla textos.
Puerto->WriteData(Luz_ON, sizeof(Luz_ON) - 1); // Envía al puerto el texto "Luz_ON".
break;

case 2:
// Apagar luz.
cout << "Enviando: " << Luz_OFF << endl;
Puerto->WriteData(Luz_OFF, sizeof(Luz_OFF) - 1);
break;

default: // Si haz pulsado otro número distinto del 1 y 2, muestra
cout << "Puse del 1 al 2."; // este mensaje.
}


while (true) {
int n = Puerto->ReadData(lectura, 49);
if (n > 0) {
lectura[n + 1] = '\0';
break;
}
Sleep(1);
}
cout << "Recibido: " << lectura << endl;
cout << "-------------------" << endl;
}
}


Habías comentado algo así:
Código (cpp) [Seleccionar]
// Tecla 'B' pulsada
if (GetAsyncKeyState('B') & 0x8000)
{
// Apagar luz.
cout << "Enviando: " << Luz_OFF << endl;
Puerto->WriteData(Luz_OFF, sizeof(Luz_OFF) - 1);
}


Pero no funcionaba, daba cosas raras.

Me conformo lo de enviar datos al puerto serie y acto seguido responde desde Arduino, hasta ahí bien, solo falta pulsar una tecla, desde que detecta la tecla, a enviar datos, no que primero pulse una tecla, luego Enter para enviar datos como hasta ahora.

;)
#429
Hola:

¿Lo que quieres es esto?


Este tipo de cosas recuerdo hacr un ejemplo de la serpiente, un juego ya viejo, que tienes que usar matrices.

Tutorial matrices.
https://msdn.microsoft.com/es-es/library/aa288453%28v=vs.71%29.aspx?f=255&MSPPError=-2147217396

En tu caso son muchas matrices. Solo tienes que indicar la coordenada para moverte dentro de la matriz y cambiar sus valores automáticamente con el teclado.

Saludos.
#430
Hola:

Se me había pasado de que la función devuelve vaor y el método no.
http://es.stackoverflow.com/questions/7403/diferencias-entre-m%C3%A9todos-procedimiento-funci%C3%B3n-para-que-sirven-cada-uno-y-co
https://asm86.wordpress.com/2012/05/19/proceso-subrutina-funcion-y-metodo-son-cosas-diferentes/

Funciona así por lo que veo.

Código (vbnet) [Seleccionar]
Public Shared Sub Mensaje1()
           Console.WriteLine()
           Console.WriteLine("Creando archivo al disco duro...")
       End Sub


Esta parte y ano me da problemas.

He probado muchos convertidores y ninguno saca algo al 100 %. Gracias por la propuesta.  Ahora te toca convertir estas líneas que no lo hace bien.
http://converter.telerik.com/
http://www.mundoprogramacion.com/NET/WebServices/deCSaVB_web.aspx

El código es muy grande y no traduce bien todo. Voy partes por partes como este y este no convierte.
Código (vbnet) [Seleccionar]
Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)

CitarGravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   BC32022   'Public Event DataReceived As SerialDataReceivedEventHandler' es un evento y no se puede llamar directamente. Use una instrucción 'RaiseEvent' para generar un evento.   Recibir_archivo_desde_Arduino_consola_VB   C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb   48   Activo

Hay otra parte del código que traduce bien en teoría, pero hay muchos peros, da errores en VB .net.
De C#:
Código (csharp) [Seleccionar]
               SerialPort sp = (SerialPort)sender;
               string indata = sp.ReadExisting();
               string[] data = indata.Split('A');
               cantidadBytes = int.Parse(data[0]);


               switch (data[1].ToString())
               {
                   case "1":
                       Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
                       Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: JPG");
                       break;

                   case "2":
                       Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
                       Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: PNG.");
                       break;

                   default:
                       Console.WriteLine("Cosas raras en 'data': " + data.ToString()); // Por si hal algún error.
                       break;
               }

Código (csharp,3) [Seleccionar]

Dim sp As SerialPort = DirectCast(sender, SerialPort)
Dim indata As String = sp.ReadExisting()
Dim data As String() = indata.Split("A"C)
cantidadBytes = Integer.Parse(data(0))


Select Case data(1).ToString()
Case "1"
Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.")
Console.WriteLine("Foto: " + data(1) + ". Tipo de archivo: JPG")
Exit Select

Case "2"
Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.")
Console.WriteLine("Foto: " + data(1) + ". Tipo de archivo: PNG.")
Exit Select
Case Else

Console.WriteLine("Cosas raras en 'data': " + data.ToString())
' Por si hal algún error.
Exit Select
End Select




El código es muy largo, si quieren lo pongo, pero no intenten traducirlo de golpe todo porque no funcionará.

Gracias.