He creado un evento. Se trata de usar el código correcto para que al recibir datos por el puerto serie, lo detecte y lo muestre en patalla.
Uso la ibrería https://github.com/Gmatarrubia/LibreriasTutoriales
El evento generado es este:
Código
void CMFC_ArduinoDlg::OnEnUpdateEditMensajeDesdeArduino() { }
Introduje este código. Lo que debe hacer es, al detectar el puerto serie, se guarde en la variable lectura. Lo que tenga guardado en la variable lectura, lo uestra en el componente Rich del formulario.
Código
void CMFC_ArduinoDlg::OnEnUpdateEditMensajeDesdeArduino() { // TODO: Si éste es un control RICHEDIT, el control no // enviará esta notificación a menos que se invalide CDialogEx::OnInitDialog() // función para enviar el mensaje EM_SETEVENTMASK al control // con la marca ENM_UPDATE ORed en la máscara lParam. // TODO: Agregue aquí el controlador de notificación de controles. int n = Puerto->ReadData(lectura, 49); if (n > 0) { lectura[n + 1] = '\0'; IDC_EDIT_MENSAJE_DESDE_ARDUINO->text = lectura; } }
Al compilar me da dos erroes.
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error (activo) E0044 la expresión debe tener un tipo de puntero MFC_Arduino c:\Users\usuario\Documents\Visual Studio 2017\Projects\MFC_Arduino\MFC_Arduino\MFC_ArduinoDlg.cpp 155
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error C2227 el operando izquierdo de '->text' debe señalar al tipo class/struct/union/generic MFC_Arduino c:\users\meta\documents\visual studio 2017\projects\mfc_arduino\mfc_arduino\mfc_arduinodlg.cpp 155
¿Alguna solución?
Saludos.
MOD: imagen adaptada a lo permitido.
Edito 3:
Hola de nuevo:
Si me deja escribir por aquí. Leyendo y leyendo por internet, hasta en ruso, encontré este enlace.
SetDlgItemText
En C# sería algo así cmo indiqué arriba, pero no lo es:
Código
Rich.txt = Lectura.toString();
Se usa así:
Código
SetDlgItemText(IDC_EDIT_MENSAJE_DESDE_ARDUINO, lectura); // Mostrar texto.
En parte me ha funcionado, solo en parte, es decir. Si pulso el botón ON o OFF, no pasa nada. Si escribo una letra en el Rich, aparece ya los textos desde el puerto serie. Vuelvo a pulsar el botón ON o el OFF, no pasa nada, si escribo otra letra en el Rich que se llama IDC_EDIT_MENSAJE_DESDE_ARDUINO, vuelve aparecer nuevos datos desde el puerto serie. Esto ocurre así porque he usado este evento que puedes ver aquí. No encuentro otro evento que valga la pena.
Código de este evento:
Código
void CMFC_ArduinoDlg::OnEnUpdateEditMensajeDesdeArduino() { int n = Puerto->ReadData(lectura, 49); if (n > 0) { lectura[n + 1] = '\0'; SetDlgItemText(IDC_EDIT_MENSAJE_DESDE_ARDUINO, lectura); } }
Si escribo una letra, en el Rich, me aparece por fin el mensaje, solo si escribe una letra, lo que sea con tal de detectar algo. Por lo que se ve, este método no es el adecuado.
Hice otro truco a ver si cuela, pero tampoco funciona como quiero. Puede el código en cada botón, el ON y OFF, usando el mismo código, y sin usar el void para reutilización de código, no quería perder el tiempo.
Código
void CMFC_ArduinoDlg::OnBnClickedButton1() { Puerto->WriteData(Luz_OFF, sizeof(Luz_OFF) - 1); int n = Puerto->ReadData(lectura, 49); if (n > 0) { lectura[n + 1] = '\0'; SetDlgItemText(IDC_EDIT_MENSAJE_DESDE_ARDUINO, lectura); } }
Tiene comportamiento no deseado. Si uso ON, luego pulso OFF, me aparece el mensaje del ON, si vuelvo a pulsar OFF, me aparece el mensaje del OFF por fin, pero, debo pulsar dos veces el mismo botón para que me aparezca el mensaje adecuado. A parte de esto, si desde el puerto serie me aparece una entrada de texto sin yo solicitarlo desde el ordenador o PC, nunca me aparece el texto en pantalla.
La forma ideal es, desde que me llegue datos al puerto serie, desde que detecte algo, algún carácter, lo muestra en pantalla. Hay que buscar un evento o una función que cumpla esos requisitos.
Ahí no tengo idea, al menos he logrado que se muestre algo, porque desde hace meses no me comía una rosca, y desde los foros oficiales de Microsoft tanto en español como en Inglés, no tienen idea del tema de los puertos series y Arduino.
Sólo falta saber una buena función que detecte las entradas de datos en el Rich y asunto resuelto.
Saludos.