Tengo el código en C# de esta manera. Este código solo recibe datos por el puerto serie.
Código
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; // No olvidar. using System.Threading; namespace Entrada_Arduino_AWF_1_CS { public partial class Form1 : Form { // Utilizaremos un string como buffer de recepción. string Recibidos; public Form1() { InitializeComponent(); if (!serialPort1.IsOpen) { try { serialPort1.Open(); } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); } } } // Al recibir datos. private void Recepcion(object sender, SerialDataReceivedEventArgs e) { // Acumula los caracteres recibidos a nuestro 'buffer' (string). Recibidos += serialPort1.ReadExisting(); // Invocar o llamar al proceso de tramas. } // Procesar los datos recibidos en el bufer y extraer tramas completas. private void Actualizar(object sender, EventArgs e) { switch (Recibidos) { case "ON": panel1.BackColor = Color.Green; label_Lectura.Text = "Activado"; pictureBox_Dibujo.Image = Properties.Resources.Led_rojo_encendido; Recibidos = ""; break; case "OFF": panel1.BackColor = Color.Red; label_Lectura.Text = "Desactivado"; pictureBox_Dibujo.Image = Properties.Resources.Led_rojo_apagado; Recibidos = ""; break; } } // Cuando cierre la aplicación. private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (serialPort1.IsOpen) // ¿El puerto está abierto? { serialPort1.Close(); // Cerrar puerto. } } } }
He intentado imigar el código de C# a C++/CLR. Pero que va.
Código
#pragma once namespace Entrada_Arduino_CPP_CLR_1 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::IO::Ports; // No olvidar. /// <summary> /// Resumen de Form_Principal /// </summary> public ref class Form_Principal : public System::Windows::Forms::Form { // Utilizaremos un string como buffer de recepción. String^ Recibidos; public: Form_Principal(void) { InitializeComponent(); // //TODO: agregar código de constructor aquí // if (!serialPort1->IsOpen) { try { serialPort1->Open(); } catch (Exception ^ex) { MessageBox::Show(ex->ToString()); } serialPort1->DataReceived += new SerialDataReceivedEventHandler(Recepcion); } } // Al recibir datos. private void Recepcion(object sender, SerialDataReceivedEventArgs e) { // Acumula los caracteres recibidos a nuestro 'buffer' (string). Recibidos += serialPort1->ReadExisting(); // Invocar o llamar al proceso de tramas. Invoke(new EventHandler(Actualizar)); } // Procesar los datos recibidos en el bufer y extraer tramas completas. private void Actualizar(object sender, EventArgs e) { switch (Recibidos) { case "ON": panel1->BackColor = Color::Green; label_Lectura->Text = "Activado"; pictureBox_Dibujo->Image = Properties::Resources::Led_rojo_encendido; Recibidos = ""; break; case "OFF": panel1->BackColor = Color::Red; label_Lectura->Text = "Desactivado"; pictureBox_Dibujo->Image = Properties::Resources::Led_rojo_apagado; Recibidos = ""; break; } } protected: /// <summary> /// Limpiar los recursos que se estén usando. /// </summary> ~Form_Principal() { if (components) { delete components; } } private: System::Windows::Forms::Label^ label_titulo; protected: private: System::Windows::Forms::Panel^ panel1; private: System::Windows::Forms::Label^ label_Lectura; private: System::Windows::Forms::PictureBox^ pictureBox_Dibujo; private: System::IO::Ports::SerialPort^ serialPort1; private: System::Windows::Forms::Label^ label1; private: System::ComponentModel::IContainer^ components; private: /// <summary> /// Variable del diseñador necesaria. /// </summary> #pragma region Windows Form Designer generated code /// <summary> /// Método necesario para admitir el Diseñador. No se puede modificar /// el contenido de este método con el editor de código. /// </summary> void InitializeComponent(void) { this->components = (gcnew System::ComponentModel::Container()); System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form_Principal::typeid)); this->label_titulo = (gcnew System::Windows::Forms::Label()); this->panel1 = (gcnew System::Windows::Forms::Panel()); this->label_Lectura = (gcnew System::Windows::Forms::Label()); this->pictureBox_Dibujo = (gcnew System::Windows::Forms::PictureBox()); this->serialPort1 = (gcnew System::IO::Ports::SerialPort(this->components)); this->label1 = (gcnew System::Windows::Forms::Label()); (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox_Dibujo))->BeginInit(); this->SuspendLayout(); // // label_titulo // this->label_titulo->AutoSize = true; this->label_titulo->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 36, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0))); this->label_titulo->Location = System::Drawing::Point(29, 26); this->label_titulo->Name = L"label_titulo"; this->label_titulo->Size = System::Drawing::Size(382, 55); this->label_titulo->TabIndex = 0; this->label_titulo->Text = L"Visual C++ CLR"; // // panel1 // this->panel1->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle; this->panel1->Location = System::Drawing::Point(23, 97); this->panel1->Name = L"panel1"; this->panel1->Size = System::Drawing::Size(100, 100); this->panel1->TabIndex = 1; // // label_Lectura // this->label_Lectura->AutoSize = true; this->label_Lectura->Location = System::Drawing::Point(183, 138); this->label_Lectura->Name = L"label_Lectura"; this->label_Lectura->Size = System::Drawing::Size(48, 13); this->label_Lectura->TabIndex = 2; this->label_Lectura->Text = L"Leyendo"; // // pictureBox_Dibujo // this->pictureBox_Dibujo->Image = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"pictureBox_Dibujo.Image"))); this->pictureBox_Dibujo->Location = System::Drawing::Point(311, 97); this->pictureBox_Dibujo->Name = L"pictureBox_Dibujo"; this->pictureBox_Dibujo->Size = System::Drawing::Size(100, 100); this->pictureBox_Dibujo->SizeMode = System::Windows::Forms::PictureBoxSizeMode::StretchImage; this->pictureBox_Dibujo->TabIndex = 3; this->pictureBox_Dibujo->TabStop = false; // // serialPort1 // this->serialPort1->BaudRate = 115200; this->serialPort1->PortName = L"COM4"; this->serialPort1->StopBits = System::IO::Ports::StopBits::Two; // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(349, 200); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(25, 13); this->label1->TabIndex = 4; this->label1->Text = L"Led"; // // Form_Principal // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(436, 262); this->Controls->Add(this->label1); this->Controls->Add(this->pictureBox_Dibujo); this->Controls->Add(this->label_Lectura); this->Controls->Add(this->panel1); this->Controls->Add(this->label_titulo); this->Name = L"Form_Principal"; this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; this->Text = L"Electrónica PIC - C++ 2015"; (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox_Dibujo))->EndInit(); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion }; }
¿Alguna ayuda?
Muchas gracias.