En el MFC de Visual Studio, hay que incluir dos botones y un richTextBox.
Imagen, Arduino debe recibir datos desde el puerto serie y enviar que ha sido recibido.
Solo quiero que con MFC sea capaz de apagar y encender un Led, tal como lo hago con otro lenguaje, C#, Visual Basic pero este MFC de C++ me cuesta muchísimo.
Si les pica la curiosidad, el código de Arduino es este.
Código
/*
* Electrónica PIC.
*
* Ejemplo:
* Encender y apagar un Led con Arduino y Visual Studio 2015.
*/
int pinLed =13;// Declaramos la variable pin del Led.
char caracter;
String comando;
void setup()
{
Serial.begin(9600);
}
void loop()
{
pinMode(pinLed, OUTPUT);// Inicializa el pin del Led 1 como salida.
/* Voy leyendo carácter a carácter lo que se recibe por el canal
* serie (mientras llegue algún dato allí), y los voy concatenando
* uno tras otro en una cadena. En la práctica, si usamos el
* "Serial monitor" el bucle while acabará cuando pulsemos Enter.
* El delay es conveniente para no saturar el canal serie y que la
* concatenación se haga de forma ordenada.
*/
while(Serial.available()>0)
{
caracter= Serial.read();
comando.concat(caracter);
delay(10);
}
/* Unavez ya tengo la cadena "acabada", compruebo su valor y hago
* que la placa Arduino reaccione según sea este. Aquí podríamos
* hacer lo que quiesiéramos: si el comando es "tal", enciende
* un Led, si es cual, mueve un motor... y así.
*/
if(comando.equals("ON")==true)// Led_ON.
{
digitalWrite(pinLed, HIGH);// Enciende el Led.
Serial.println("Led 13 encendido.");
}
if(comando.equals("OFF")==true)// Led_OFF.
{
digitalWrite(pinLed, LOW);// Apaga el Led.
Serial.println("Led 13 apagado.");
}
// Limpiamos la cadena para volver a recibir el siguiente comando.
comando="";
}
En resumen, a partir del código de C++ para consola, adaptarlo a modo Visual MFC C++, solo enviar ON y OFF y recibir datos de respuesta.
Espero resolver este problema de una vez. C++ me vuelve loco.
' Desde que cierres el programa, cierra el puerto.
PrivateSub Form_Principal_Closing(sender AsObject, e As ComponentModel.CancelEventArgs)Handles Form_Principal.Closing
If serialPort1.IsOpenThen' ¿El puerto está abierto?
serialPort1.Close()' Cerrar puerto.
EndIf
EndSub
EndClass
Gravedad Código Descripción Proyecto Archivo Línea 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. Entrada_Arduino_WPF_1_VB C:\Users\Usuario\Documents\Visual Studio 2015\Projects\Entrada_Arduino_WPF_1_VB\Entrada_Arduino_WPF_1_VB\MainWindow.xaml.vb 28
Gravedad Código Descripción Proyecto Archivo Línea Error BC30455 No se especificó un argumento para el parámetro 'e' de 'Private Sub Recepcion(sender As Object, e As SerialDataReceivedEventArgs)'. Entrada_Arduino_WPF_1_VB C:\Users\Usuario\Documents\Visual Studio 2015\Projects\Entrada_Arduino_WPF_1_VB\Entrada_Arduino_WPF_1_VB\MainWindow.xaml.vb 28
El programa completo se trada de recibir tramas de bytes por el puerto serie.
// Inserte un guión después de cada bocado, a menos que estemos al final de la dirección.
if(i != bytes.Length-1)
{
Console.Write("-");
}
}
Console.WriteLine();
}
// Guarda el nombre del hostname en la variable Nombre_HostName.
Nombre_HostName = Propiedades_PC.HostName;
// Guarda el nombre del dominio si lo tiene.
Nombre_Dominio = Propiedades_PC.DomainName;
// Guarda la MAC recibida con sus - en la varible MAC.
MAC = Encoding.UTF8.GetString(bytes);
Console.WriteLine();
Console.WriteLine(@"Nombre del HostName: {0}", Nombre_HostName);
Console.WriteLine(@"Nombre del domninio: {0}", Nombre_Dominio);
Console.WriteLine(@"MAC es: {0}", MAC);
Console.ReadKey();// Pulsa cualquier tecla y sale.
}
}
}
Citar
Gravedad Código Descripción Proyecto Archivo Línea Error CS0103 El nombre 'bytes' no existe en el contexto actual Leer_MAC C:\Users\Usuario\Documents\Visual Studio 2015\Projects\Leer_MAC\Leer_MAC\Program.cs 65
He hecho ejecutables a clientes en el cual al final no paga y se van, eso si, por Internet.
Mi idea, se que hay muchas y mejores de las que voy a contar, el mio es simple, no de hacer pero si de explicar.
Si hoy es día 15-01-2016 hora 15:30. Le entrego un ejecutable hecho con Visual C#, el que sea, simple como el propio Form1 con un botón que al pulsar dice Hola mundo. Si el día 29-01-2016 a la misma hora o la que sea, desde que ejecutes la aplicación haga lo siguiente.
Que borre el propio ejecutable.
Antes de eso, hace otra cosa, por ejemplo, el ejectubale se lo envio en .zip o .rar. ¿Qué hacer? Que se ponga a buscar primero en el área local para que borre dichos archivos llamado nombre.zip o nombre.rar. Si no lo encuentra, acto seguido borra el nombre.exe.
Parece complicado a la hora de programar. Me conformo que se borre el propio ejecutable.
Se puede sugerir mejores métodos, eso si, tampoco quiero complicarme la vida.
Estoy indignado de una cosa con este proyecto de pruebas, se me bajaron las palancas de la casa y no me fucniona el relé K2, pesnaba que era el transistor, pero no, porque me enciende el Led rojo pero no activa el relé, rompí el diodo D2 para sustituirlo, no es el diodo, probé el relé directamente y funciona, solo el relé, claro. Así que tiene que ser el optoacoplador.
Por mucho que encienda el Led D2, opté por el relé K3 del INT 3, al rato de apagarse y encender la bombilla, se vuelve a bajar las palancas de mi casa, el magnetotérmico, no el digerencial, sin chispas o estampido de algo.
El optoacoplador le pasó lo mismo del INT 3 que al INT 2, se acabó máspruebas. Dentro de un rato pongo mis experiencias en mi blog sobre este proyecto. Deja ver si venden estos optoacopladores a parte en mi local habitual. En este mismo momento me quedan unos minutos para subir un vídeo qu esubiré aquí para que vean la idea del proyecto.
Dejo claro que aún no he puesto el motor, primero uan bombilla de 100 W a 230 VAC 50 Hz en España. A lo mejor de apagar y encender la bolbilla cada dos segundos, se bajaron las palancas, aunque no entiendo, porqué se fastidian los optoacopladores.
Estoy un poco desmotivado por tonterías como estas.
Se está trabajando con Arduino UNO r3.
Se hará poco a poco un buen código de lo que pretendo hacer, como ven, no se recomienda usar delay, como este es un ejemplo, es para hacer pruebas rápidas.
Esquema:
Código de Arduino:
Código:
// include el código de la librería. #include
// Inicializa la librería con sus pines indicados. // RS, RW, Enable, D4, D5, D6, D7. LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);
unsigned long inicio, fin, transcurrido; long Veces = 0;
int LuzFondo = 10; // Pin 10 para saber que es luz de fondo.
/* delay(2000); lcd.setCursor(0,0); lcd.print("Cambio de giro "); lcd.setCursor(0,1); lcd.print("motor lavadora. "); delay(2000); lcd.clear(); // Limpia la pantalla. lcd.setCursor(0,0); // En el primer carácter y primera fila. */
// Cuando llegue aquí, tiene que pararse el motor siempre. // No se que instrucciones darle para que lo haga. }
Imágen:
Vídeo:
A la próxima probaré una bombilla de bajo consumo haber si esta vez no se me bajan las palancas. A parte de eso, detallar un poco más con una tabla, paso por paso lo que tiene que hacer Arduino con los relés.
Sigue las actualizaciones en el proyecto principal de crear una placa de lavadora.
Quiero saber cual es la forma de guardar datos fijos de un byte y otros de varios bytes. Estos datos son enviados al puerto serie. No se envían todos al mismo tiempo, sino cuando de la orden cuando quiera.
Por ejemplo, tengo datos guardados en enumeraciones como puedes ver abajo.
En este código muestra los nombres de la configuración. Teniendo el código completo hecho, quiero que muestre un resumen en el componente statusStrip como muestra abajo.
Se tiene que mostrar como indica abajo.
Pongo el código funcional de la configuración del puerto serie, solo falta que muestra la información en el statusStrip que no se hacerlo, siempre con fallos y llevo tres días.
Antes que nada, disculpen si esto no va aquí. Llevo un tiempo averguando como se controla el famoso y popular de la época de piedra el DexDrive con Visual Studio. Es un dispositivo que lee y guarda los datos de la Memory Card de la PlayStation 1 en el PC por puerto serie, lo que se usaba mucho en la época de antes.
Lo he desarmado.
Tiene un Led verde, cuando envia o recibe datos, se cambia a naranja, todo esto con el puerto COM1. Si no ejecutas su aplicación llamado DeXplorer 2.0.920, no funciona nada aunque lo tengas alimentado, me refiero el Led. Sospecho que usa RTS, CTS, DTR, etc. A parte de los Rx, Tx y GND.
Aquí encontré una aplicación o código fuente que no entiendo ni papa y quiero adaptarlo a Visual C#, más bien hacer una interfaz como el DexPlorer, al menos más moderno. Lo curioso que DeXplorer sabe cuando está conectado el dispositivo DexDrive, si tiene la Memory Card insertada o no.
Esos códigos quiero de C, que por eso lo he puesto aquí, pasarlo a Visual C#. El diseño lo tengo hecho, solo el diseño, no la programación.
He intentado hacer caso esta parte en Visual C#.
Citar
COMMANDS --------
For all commands specifying a (16-bit) frame number, <lsb> and <msb> are, respectively, its least and most significant bytes. Make sure to pay close attention to the order, as it varies between commands.
Note that the Nintendo 64 DexDrive will get stuck if it is sent an incomplete command. At that point, the only solution is to unplug it completely, and plug it back (power first, then serial).
0x00 INIT
Args: <17 bytes> Reply: ID
Initializes the DexDrive; see the POUTING section below.
The contents of the 17 bytes does not appear to have any significance, except for determining the contents of the "weird" byte in the ID reply. See the WEIRD FORMULA section below for more details.
InterAct's DexPlorer software uses the following hard-coded string:
10 29 23 be 84 e1 6c d6 ae 52 90 49 f1 f1 bb e9 eb