elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Temas
Páginas: 1 ... 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [23] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ... 66
221  Programación / .NET (C#, VB.NET, ASP) / Pasar de C# a C++ CLR. en: 8 Febrero 2016, 13:14 pm
Hola:

Tengo el código en C# de esta manera. Este código solo recibe datos por el puerto serie.
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. using System.IO.Ports; // No olvidar.
  12. using System.Threading;
  13.  
  14. namespace Entrada_Arduino_AWF_1_CS
  15. {
  16.    public partial class Form1 : Form
  17.    {
  18.        // Utilizaremos un string como buffer de recepción.
  19.        string Recibidos;
  20.  
  21.        public Form1()
  22.        {
  23.            InitializeComponent();
  24.  
  25.            if (!serialPort1.IsOpen)
  26.            {
  27.                try
  28.                {
  29.                    serialPort1.Open();
  30.                }
  31.                catch (System.Exception ex)
  32.                {
  33.                    MessageBox.Show(ex.ToString());
  34.                }
  35.  
  36.                serialPort1.DataReceived += new SerialDataReceivedEventHandler(Recepcion);
  37.            }
  38.        }
  39.  
  40.        // Al recibir datos.
  41.        private void Recepcion(object sender, SerialDataReceivedEventArgs e)
  42.        {
  43.            // Acumula los caracteres recibidos a nuestro 'buffer' (string).
  44.            Recibidos += serialPort1.ReadExisting();
  45.  
  46.            // Invocar o llamar al proceso de tramas.
  47.            Invoke(new EventHandler(Actualizar));
  48.        }
  49.  
  50.        // Procesar los datos recibidos en el bufer y extraer tramas completas.
  51.        private void Actualizar(object sender, EventArgs e)
  52.        {
  53.  
  54.            switch (Recibidos)
  55.            {
  56.                case "ON":
  57.                    panel1.BackColor = Color.Green;
  58.                    label_Lectura.Text = "Activado";
  59.                    pictureBox_Dibujo.Image = Properties.Resources.Led_rojo_encendido;
  60.                    Recibidos = "";
  61.                    break;
  62.  
  63.                case "OFF":
  64.                    panel1.BackColor = Color.Red;
  65.                    label_Lectura.Text = "Desactivado";
  66.                    pictureBox_Dibujo.Image = Properties.Resources.Led_rojo_apagado;
  67.                    Recibidos = "";
  68.                    break;
  69.            }
  70.        }
  71.  
  72.        // Cuando cierre la aplicación.
  73.        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  74.        {
  75.            if (serialPort1.IsOpen) // ¿El puerto está abierto?
  76.            {
  77.                serialPort1.Close(); // Cerrar puerto.
  78.            }
  79.        }
  80.    }
  81. }

He intentado imigar el código de C# a C++/CLR. Pero que va.
Código
  1. #pragma once
  2.  
  3. namespace Entrada_Arduino_CPP_CLR_1 {
  4.  
  5. using namespace System;
  6. using namespace System::ComponentModel;
  7. using namespace System::Collections;
  8. using namespace System::Windows::Forms;
  9. using namespace System::Data;
  10. using namespace System::Drawing;
  11.  
  12. using namespace System::IO::Ports; // No olvidar.
  13.  
  14. /// <summary>
  15. /// Resumen de Form_Principal
  16. /// </summary>
  17. public ref class Form_Principal : public System::Windows::Forms::Form
  18. {
  19. // Utilizaremos un string como buffer de recepción.
  20. String^ Recibidos;
  21.  
  22. public:
  23. Form_Principal(void)
  24. {
  25. InitializeComponent();
  26. //
  27. //TODO: agregar código de constructor aquí
  28. //
  29.  
  30. if (!serialPort1->IsOpen)
  31. {
  32. try
  33. {
  34. serialPort1->Open();
  35. }
  36. catch (Exception ^ex)
  37. {
  38. MessageBox::Show(ex->ToString());
  39. }
  40.  
  41. serialPort1->DataReceived += new SerialDataReceivedEventHandler(Recepcion);
  42. }
  43. }
  44.  
  45. // Al recibir datos.
  46. private void Recepcion(object sender, SerialDataReceivedEventArgs e)
  47. {
  48. // Acumula los caracteres recibidos a nuestro 'buffer' (string).
  49. Recibidos += serialPort1->ReadExisting();
  50.  
  51. // Invocar o llamar al proceso de tramas.
  52. Invoke(new EventHandler(Actualizar));
  53. }
  54.  
  55. // Procesar los datos recibidos en el bufer y extraer tramas completas.
  56. private void Actualizar(object sender, EventArgs e)
  57. {
  58.  
  59. switch (Recibidos)
  60. {
  61. case "ON":
  62. panel1->BackColor = Color::Green;
  63. label_Lectura->Text = "Activado";
  64. pictureBox_Dibujo->Image = Properties::Resources::Led_rojo_encendido;
  65. Recibidos = "";
  66. break;
  67.  
  68. case "OFF":
  69. panel1->BackColor = Color::Red;
  70. label_Lectura->Text = "Desactivado";
  71. pictureBox_Dibujo->Image = Properties::Resources::Led_rojo_apagado;
  72. Recibidos = "";
  73. break;
  74. }
  75. }
  76.  
  77. protected:
  78. /// <summary>
  79. /// Limpiar los recursos que se estén usando.
  80. /// </summary>
  81. ~Form_Principal()
  82. {
  83. if (components)
  84. {
  85. delete components;
  86. }
  87. }
  88. private: System::Windows::Forms::Label^  label_titulo;
  89. protected:
  90. private: System::Windows::Forms::Panel^  panel1;
  91. private: System::Windows::Forms::Label^  label_Lectura;
  92. private: System::Windows::Forms::PictureBox^  pictureBox_Dibujo;
  93. private: System::IO::Ports::SerialPort^  serialPort1;
  94. private: System::Windows::Forms::Label^  label1;
  95. private: System::ComponentModel::IContainer^  components;
  96.  
  97. private:
  98. /// <summary>
  99. /// Variable del diseñador necesaria.
  100. /// </summary>
  101.  
  102.  
  103. #pragma region Windows Form Designer generated code
  104. /// <summary>
  105. /// Método necesario para admitir el Diseñador. No se puede modificar
  106. /// el contenido de este método con el editor de código.
  107. /// </summary>
  108. void InitializeComponent(void)
  109. {
  110. this->components = (gcnew System::ComponentModel::Container());
  111. System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form_Principal::typeid));
  112. this->label_titulo = (gcnew System::Windows::Forms::Label());
  113. this->panel1 = (gcnew System::Windows::Forms::Panel());
  114. this->label_Lectura = (gcnew System::Windows::Forms::Label());
  115. this->pictureBox_Dibujo = (gcnew System::Windows::Forms::PictureBox());
  116. this->serialPort1 = (gcnew System::IO::Ports::SerialPort(this->components));
  117. this->label1 = (gcnew System::Windows::Forms::Label());
  118. (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox_Dibujo))->BeginInit();
  119. this->SuspendLayout();
  120. //
  121. // label_titulo
  122. //
  123. this->label_titulo->AutoSize = true;
  124. this->label_titulo->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 36, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
  125. static_cast<System::Byte>(0)));
  126. this->label_titulo->Location = System::Drawing::Point(29, 26);
  127. this->label_titulo->Name = L"label_titulo";
  128. this->label_titulo->Size = System::Drawing::Size(382, 55);
  129. this->label_titulo->TabIndex = 0;
  130. this->label_titulo->Text = L"Visual C++ CLR";
  131. //
  132. // panel1
  133. //
  134. this->panel1->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
  135. this->panel1->Location = System::Drawing::Point(23, 97);
  136. this->panel1->Name = L"panel1";
  137. this->panel1->Size = System::Drawing::Size(100, 100);
  138. this->panel1->TabIndex = 1;
  139. //
  140. // label_Lectura
  141. //
  142. this->label_Lectura->AutoSize = true;
  143. this->label_Lectura->Location = System::Drawing::Point(183, 138);
  144. this->label_Lectura->Name = L"label_Lectura";
  145. this->label_Lectura->Size = System::Drawing::Size(48, 13);
  146. this->label_Lectura->TabIndex = 2;
  147. this->label_Lectura->Text = L"Leyendo";
  148. //
  149. // pictureBox_Dibujo
  150. //
  151. this->pictureBox_Dibujo->Image = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"pictureBox_Dibujo.Image")));
  152. this->pictureBox_Dibujo->Location = System::Drawing::Point(311, 97);
  153. this->pictureBox_Dibujo->Name = L"pictureBox_Dibujo";
  154. this->pictureBox_Dibujo->Size = System::Drawing::Size(100, 100);
  155. this->pictureBox_Dibujo->SizeMode = System::Windows::Forms::PictureBoxSizeMode::StretchImage;
  156. this->pictureBox_Dibujo->TabIndex = 3;
  157. this->pictureBox_Dibujo->TabStop = false;
  158. //
  159. // serialPort1
  160. //
  161. this->serialPort1->BaudRate = 115200;
  162. this->serialPort1->PortName = L"COM4";
  163. this->serialPort1->StopBits = System::IO::Ports::StopBits::Two;
  164. //
  165. // label1
  166. //
  167. this->label1->AutoSize = true;
  168. this->label1->Location = System::Drawing::Point(349, 200);
  169. this->label1->Name = L"label1";
  170. this->label1->Size = System::Drawing::Size(25, 13);
  171. this->label1->TabIndex = 4;
  172. this->label1->Text = L"Led";
  173. //
  174. // Form_Principal
  175. //
  176. this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
  177. this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
  178. this->ClientSize = System::Drawing::Size(436, 262);
  179. this->Controls->Add(this->label1);
  180. this->Controls->Add(this->pictureBox_Dibujo);
  181. this->Controls->Add(this->label_Lectura);
  182. this->Controls->Add(this->panel1);
  183. this->Controls->Add(this->label_titulo);
  184. this->Name = L"Form_Principal";
  185. this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
  186. this->Text = L"Electrónica PIC - C++ 2015";
  187. (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox_Dibujo))->EndInit();
  188. this->ResumeLayout(false);
  189. this->PerformLayout();
  190.  
  191. }
  192. #pragma endregion
  193. };
  194. }

¿Alguna ayuda?

Muchas gracias.
222  Programación / Programación C/C++ / Cambiar título de consola en: 4 Febrero 2016, 22:51 pm
Hola:

Usando el Dev C++ con un hola mundo. En el título de la ventana quiero que me diga el nombre del programa. El programa es hecho en modo consola.

He buscado por google y me dice cambiar el color, pero eso es dentro del programa, no quiero cambiar colores, solo el nombre o título.

Espero que se entienda lo que quiero decir. También hay que ver si en consola es posible hacerlo en Dev C++, en C# se hace así:

Código
  1. Console.title = "Título o nombre del programa";

Estamos en C++ Win32 en modo consola.

Saludos.
223  Programación / Programación C/C++ / Pasar el código de consola a MFC en: 4 Febrero 2016, 21:43 pm
Hola:

Tengo un código que encontré sobre el puerto serie, recibir y enviar datos hechos en C++.
Código
  1. // Comunicación a través del puerto serie
  2. // usando el API de Windows
  3. // Modo consola.
  4. // (C) Enero de 2013, Salvador Pozo Coronado
  5. // Con Clase: http://www.conclase.net
  6. // salvador@conclase.net
  7.  
  8. #include <iostream>
  9. #include <cstring>
  10. #include <windows.h>
  11.  
  12. using namespace std;
  13.  
  14. // Tipos de datos:
  15. typedef struct
  16. {
  17.    char Puerto[5];
  18.    int Baudios;
  19.    int BitsDatos;
  20.    int BitsStop;
  21.    char Paridad[25];
  22. } tipoOpciones;
  23.  
  24. bool ocupado;
  25. // Prototipos:
  26. HANDLE InicioComunicacion(tipoOpciones*);
  27. bool FinComunicacion(HANDLE);
  28. DWORD Hilo(LPDWORD lpdwParam);
  29. void EscribirSerie(HANDLE, char *);
  30.  
  31. int main(int argc, char *argv[])
  32. {
  33.    bool salir=false;
  34.    DWORD id;
  35.    char cad[80];
  36.    tipoOpciones Ops;         // Opciones
  37.    HANDLE idComDev;
  38.    HANDLE hHilo;             // Hilo del puerto serie
  39.  
  40.    ocupado = true;
  41.    // Inicializar opciones del puerto serie:
  42.    strcpy(Ops.Puerto, "COM4");
  43.    Ops.Baudios = 115200;
  44.    Ops.BitsDatos = 8;
  45.    Ops.BitsStop = 2;
  46.    strcpy(Ops.Paridad, "Sin paridad");
  47.  
  48.    // No se ha establecido comunicación:
  49.    idComDev = InicioComunicacion(&Ops);
  50.    if(idComDev == INVALID_HANDLE_VALUE) {
  51.        cout << "Inicialización puerto serie" << endl;
  52.        cout << "ERROR: No se puede acceder al puerto serie." << endl;
  53.        return 1;
  54.    }
  55.    // Lanzar hilo de lectura del puerto serie:
  56.    hHilo = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Hilo, (LPDWORD)&idComDev, 0, &id);
  57.    if(!hHilo) cout << "Error" << endl;
  58.    // Bucle principal:
  59.    ocupado = false;
  60.    while(!salir) {
  61.        // Leer un comando:
  62.        cin.getline(cad, 80);
  63.        // Si es "salir", abandonar el bucle:
  64.        if(!strcmp(cad, "salir")) salir = true;
  65.        else {
  66.            // Si no, enviar cadena por el puerto serie:
  67.            strcat(cad, "\r");
  68.            EscribirSerie(idComDev, cad);
  69.        }
  70.    }
  71.    // Liberar hilo:
  72.    CloseHandle(hHilo);
  73.    // Liberar puerto serie:
  74.    FinComunicacion(idComDev);
  75.    return 0;
  76. }
  77.  
  78. // Iniciar el puerto serie:
  79. HANDLE InicioComunicacion(tipoOpciones *Ops)
  80. {
  81.    bool fSuccess;
  82.    HANDLE idComDev;
  83.    DCB dcb;                  // Puerto serie
  84.  
  85.    // Abrir el fichero asociado al puerto:
  86.    idComDev = CreateFile(Ops->Puerto, GENERIC_READ | GENERIC_WRITE,
  87.        0, NULL, OPEN_EXISTING, 0, NULL);
  88.    if(idComDev == INVALID_HANDLE_VALUE) {
  89.        cout << "ERROR: CreateFile. Inicialización puerto serie" << endl;
  90.        return INVALID_HANDLE_VALUE;
  91.    }
  92.    PurgeComm(idComDev, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
  93.  
  94.    // Leer estructura de control del puerto serie, cdb:
  95.    fSuccess = GetCommState(idComDev, &dcb);
  96.    if(!fSuccess) {
  97.        cout << "ERROR: GetCommState. Inicialización puerto serie" << endl;
  98.        // Cerrar el puerto, regresar con 0.
  99.        CloseHandle(idComDev);
  100.        return INVALID_HANDLE_VALUE;
  101.    }
  102.  
  103.    // Modificar el dcb según las opciones definidas:
  104.    dcb.BaudRate = Ops->Baudios;
  105.    dcb.ByteSize = Ops->BitsDatos;
  106.  
  107.    if(!strcmp(Ops->Paridad, "Sin paridad")) dcb.Parity = NOPARITY;
  108.    if(!strcmp(Ops->Paridad, "Paridad par")) dcb.Parity = EVENPARITY;
  109.    if(!strcmp(Ops->Paridad, "Paridad impar")) dcb.Parity = ODDPARITY;
  110.  
  111.    switch(Ops->BitsStop) {
  112.        case 1:
  113.            dcb.StopBits = ONESTOPBIT;
  114.            break;
  115.        case 2:
  116.            dcb.StopBits = TWOSTOPBITS;
  117.            break;
  118.    }
  119.  
  120.    // Modificar la estructura de control del puerto serie:
  121.    fSuccess = SetCommState(idComDev, &dcb);
  122.    if(!fSuccess) {
  123.        cout << "ERROR: SetCommStatus. Inicialización puerto serie" << endl;
  124.        // Cerrar el puerto, regresar con 0.
  125.        CloseHandle(idComDev);
  126.        return INVALID_HANDLE_VALUE;
  127.    }
  128.  
  129.    //// ASIGNAR TIMOUTS!!!
  130.  
  131.    return idComDev;
  132. }
  133.  
  134. // Finalizar comunicación por puerto serie:
  135. bool FinComunicacion(HANDLE idComDev)
  136. {
  137.    // Cerrar el puerto serie:
  138.    CloseHandle(idComDev);
  139.    return true;
  140. }
  141.  
  142. // Hilo de escucha del puerto serie:
  143. DWORD Hilo(LPDWORD lpdwParam)
  144. {
  145.    DWORD leidos;
  146.    COMSTAT cs;
  147.    char *cad;
  148.    DWORD dwCommEvent;
  149.    HANDLE idComDev = *((HANDLE*)lpdwParam);
  150.  
  151.    if(!SetCommMask(idComDev, EV_RXCHAR)) {
  152.        cout << "Error al iniciar captura de evento" << endl;
  153.        return 0;
  154.    }
  155.    do {
  156.        if(WaitCommEvent(idComDev, &dwCommEvent, NULL)) {
  157.            SetCommMask(idComDev, EV_RXCHAR);
  158.            while(ocupado);
  159.            ocupado = true;
  160.            if(dwCommEvent & EV_RXCHAR) {
  161.                ClearCommError(idComDev, &leidos, &cs);
  162.                leidos=0;
  163.                cout << "Detectados " << cs.cbInQue << " caracteres" << endl;
  164.                /* Leer buffer desde puerto serie */
  165.                if(cs.cbInQue) {
  166.                    cad = new char[cs.cbInQue+3]; // Caracteres en buffer, más retorno de línea, más nulo
  167.                    ReadFile(idComDev, cad, cs.cbInQue, &leidos, NULL);
  168.                    cad[leidos] = '\n'; // Terminar cadena con salto de línea y nulo
  169.                    cad[leidos+1] = '\r';
  170.                    cad[leidos+2] = 0;
  171.                    cout << cad;
  172.                    delete[] cad;
  173.                }
  174.            } else {
  175.                cout << "Evento: EV_BREAK o EV_ERR" << endl;
  176.                 ClearCommBreak(idComDev);
  177.            }
  178.            ocupado = false;
  179.        } else {
  180.            cout << "Error en WaitCommEvent" << endl;
  181.            ClearCommError(idComDev, NULL, NULL);
  182.        }
  183.        Sleep(10);
  184.    } while(true);
  185.    return 0;
  186. }
  187.  
  188. void EscribirSerie(HANDLE idComDev, char *buf)
  189. {
  190.    char oBuffer[256];  /* Buffer de salida */
  191.    DWORD iBytesWritten;
  192.  
  193.    iBytesWritten = 0;
  194.    strcpy(oBuffer, buf);
  195.    while(ocupado);
  196.    ocupado = true;
  197.    WriteFile(idComDev, oBuffer, strlen(oBuffer), &iBytesWritten, NULL);
  198.    ocupado = false;
  199. }

Fuente:
http://articulos.conclase.net/?tema=comunicacion&art=serie&pag=000

Por supuesto, debo modificarlo. Creo una interfaz MFC del C++ bajo Visual Studio Community 2015 indicado en este documento a partir de la página 30.

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
  1. /*
  2.  * Electrónica PIC.
  3.  *
  4.  * Ejemplo:
  5.  * Encender y apagar un Led con Arduino y Visual Studio 2015.
  6.  */
  7.  
  8. int pinLed =  13;   // Declaramos la variable pin del Led.
  9. char caracter;
  10. String comando;
  11.  
  12. void setup()
  13. {
  14.  Serial.begin(9600);
  15. }
  16.  
  17. void loop()
  18. {
  19.  pinMode(pinLed, OUTPUT);  // Inicializa el pin del Led 1 como salida.
  20.  /* Voy leyendo carácter a carácter lo que se recibe por el canal
  21.    *  serie (mientras llegue algún dato allí), y los voy concatenando
  22.    *  uno tras otro en una cadena. En la práctica, si usamos el
  23.    *  "Serial monitor" el bucle while acabará cuando pulsemos Enter.
  24.    *  El delay es conveniente para no saturar el canal serie y que la
  25.    *  concatenación se haga de forma ordenada.
  26.    */
  27.  while (Serial.available() > 0)
  28.  {
  29.    caracter= Serial.read();
  30.    comando.concat(caracter);
  31.    delay(10);
  32.  }
  33.  
  34.  /* Unavez ya tengo la cadena "acabada", compruebo su valor y hago
  35.    * que la placa Arduino reaccione según sea este. Aquí podríamos
  36.    * hacer lo que quiesiéramos: si el comando es "tal", enciende
  37.    * un Led, si es cual, mueve un motor... y así.
  38.    */
  39.  if (comando.equals("ON") == true)  // Led_ON.
  40.  {
  41.        digitalWrite(pinLed, HIGH); // Enciende el Led.
  42.        Serial.println("Led 13 encendido.");
  43.  }
  44.  
  45.  if (comando.equals("OFF") == true) // Led_OFF.
  46.  {
  47.        digitalWrite(pinLed, LOW); // Apaga el Led.
  48.        Serial.println("Led 13 apagado.");
  49.  }
  50.  
  51.  // Limpiamos la cadena para volver a recibir el siguiente comando.
  52.  comando="";
  53. }

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.

Un cordial saludos.
224  Programación / .NET (C#, VB.NET, ASP) / Encontrar errores de este programa que hice en: 2 Febrero 2016, 22:42 pm
Hola:

Estoy con WPF de VB 2015. Este es la interfaz.



La parte de programación es esta:
Código
  1. Imports System.IO.Ports ' No olvidar.
  2. Imports System.Text ' No olvidar.
  3.  
  4. Class MainWindow
  5.    ' Utilizaremos un string como buffer de recepción.
  6.    Dim Recibidos As String
  7.    ' Creamos un objeto sdel puerto serie.
  8.    Dim serialPort1 As New SerialPort()
  9.  
  10.    Private Sub Form_Principal_Loaded(sender As Object, e As RoutedEventArgs) Handles Form_Principal.Loaded
  11.        ' Configuramos el puerto serie.
  12.        serialPort1.BaudRate = 115200 ' Baudios, tiene que ser el mismo que Arduino UNO.
  13.        serialPort1.PortName = "COM4" ' Elegimos el COM4 igual que Arduino en mi caso.
  14.        serialPort1.Parity = Parity.None ' Nada de paridad.
  15.        serialPort1.DataBits = 8 ' 8 bits.
  16.        serialPort1.StopBits = StopBits.Two ' Funciona mejor con 2 bits de Stop.
  17.  
  18.        ' Abrir puerto mientras se ejecute la aplicación.
  19.        If Not serialPort1.IsOpen Then
  20.            Try
  21.                serialPort1.Open()
  22.            Catch ex As System.Exception
  23.                MessageBox.Show(ex.ToString())
  24.  
  25.            End Try
  26.        End If
  27.        ' Ejecutar la función Recepción por disparo del evento ¡DataReived!
  28.        serialPort1.DataReceived += Recepcion
  29.    End Sub
  30.  
  31.    Private Sub Recepcion(sender As Object, e As SerialDataReceivedEventArgs)
  32.        ' Acumular los caracteres recibidos a nuestro "buffer" (string).
  33.        Recibidos += serialPort1.ReadExisting()
  34.  
  35.        ' Invocar o llamar al proceso de tramas.
  36.        Me.Dispatcher.Invoke(AddressOf Actualizar)
  37.    End Sub
  38.  
  39.    ' Procesar los datos recibidos en el buffer y extraer tramas completas.
  40.    Private Sub Actualizar()
  41.        Dim doc = New FlowDocument()
  42.        doc.Blocks.Add(New Paragraph(New Run(Recibidos)))
  43.  
  44.        Select Case Recibidos
  45.            Case "ON"
  46.                image.Source = (New BitmapImage(New Uri("Led rojo encendido.png", UriKind.Relative)))
  47.                label_Leyendo.Content = "Encendido."
  48.                Rectangulo.Fill = New SolidColorBrush(Colors.Green)
  49.                Recibidos = "" ' Limpiar.
  50.                Exit Select
  51.  
  52.            Case "OFF"
  53.                image.Source = (New BitmapImage(New Uri("Led rojo apagado.png", UriKind.Relative)))
  54.                label_Leyendo.Content = "Apagado."
  55.                Rectangulo.Fill = New SolidColorBrush(Colors.Red)
  56.                Recibidos = "" ' Limpiar.
  57.                Exit Select
  58.        End Select
  59.    End Sub
  60.  
  61.    ' Desde que cierres el programa, cierra el puerto.
  62.    Private Sub Form_Principal_Closing(sender As Object, e As ComponentModel.CancelEventArgs) Handles Form_Principal.Closing
  63.        If serialPort1.IsOpen Then ' ¿El puerto está abierto?
  64.            serialPort1.Close() ' Cerrar puerto.
  65.        End If
  66.    End Sub
  67. End Class
  68.  

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.

¿Alguna solución al problema?

Saludos.

PD: Uso Visual Studio Community 2015.
225  Seguridad Informática / Hacking / Averiguar como hackear mi propio portatil desde Intranet en: 28 Enero 2016, 17:22 pm
Hola:

Viendo esta noticia.


Tengo un sobre mesa, un Raspberry Pi 2 y un portatil con Windows y tiene webcam integrada, todo conectado desde el router.

Quiero hacer pruebas de hackear sea como sea mi propia webcam del portatil y sacar fotos y vídeos.

Si alguien sabe esto y lo ha hecho. Puede expresar sus experiencias de todo tipo.

Saludos.
226  Programación / .NET (C#, VB.NET, ASP) / Guardar la MAC en una variable. en: 23 Enero 2016, 15:43 pm
Hola:

Me falla este programa, quiero coger la MAC de este formato que genera en la primera tarjeta de red física (04-B2-AF-EE-E2-34-6A-8C).

Al complicar, me dale este error.
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. using System.Net.NetworkInformation; // No olvidar.
  8.  
  9. namespace Leer_MAC
  10. {
  11.    class Program
  12.    {
  13.        static void Main(string[] args)
  14.        {
  15.            Console.Title = "En busca del MAC";
  16.  
  17.            string Nombre_HostName = null;
  18.            string Nombre_Dominio = null;
  19.            string MAC = null;
  20.  
  21.            IPGlobalProperties Propiedades_PC = IPGlobalProperties.GetIPGlobalProperties();
  22.            NetworkInterface[] Interfaz_red = NetworkInterface.GetAllNetworkInterfaces();
  23.            Console.WriteLine("Información de interfaz para {0}.{1}     ",
  24.                    Propiedades_PC.HostName, Propiedades_PC.DomainName);
  25.            if ((Interfaz_red == null) || (Interfaz_red.Length < 1))
  26.            {
  27.                Console.WriteLine("  No hay interfaces de red encontrados.");
  28.                return;
  29.            }
  30.  
  31.            Console.WriteLine("  Número de interfaces .................... : {0}", Interfaz_red.Length);
  32.            foreach (NetworkInterface Adaptador in Interfaz_red)
  33.            {
  34.                IPInterfaceProperties Propiedades = Adaptador.GetIPProperties(); //  .GetIPInterfaceProperties();
  35.                Console.WriteLine();
  36.                Console.WriteLine(Adaptador.Description);
  37.                Console.WriteLine(String.Empty.PadLeft(Adaptador.Description.Length, '='));
  38.                Console.WriteLine("  Tipo interfaz ........................... : {0}", Adaptador.NetworkInterfaceType);
  39.                Console.Write("  Dirección física ........................ : ");
  40.                PhysicalAddress Direccion = Adaptador.GetPhysicalAddress();
  41.                byte[] bytes = Direccion.GetAddressBytes();
  42.                for (int i = 0; i < bytes.Length; i++)
  43.                {
  44.                    // Muestra la dirección física en hexadecimal.
  45.                    Console.Write("{0}", bytes[i].ToString("X2"));
  46.                    // Inserte un guión después de cada bocado, a menos que estemos al final de la dirección.
  47.                    if (i != bytes.Length - 1)
  48.                    {
  49.                        Console.Write("-");
  50.                    }
  51.                }
  52.                Console.WriteLine();
  53.            }
  54.  
  55.            // Guarda el nombre del hostname en la variable Nombre_HostName.
  56.            Nombre_HostName = Propiedades_PC.HostName;
  57.  
  58.            // Guarda el nombre del dominio si lo tiene.
  59.            Nombre_Dominio = Propiedades_PC.DomainName;
  60.  
  61.  
  62.            // Guarda la MAC recibida con sus - en la varible MAC.
  63.            MAC = Encoding.UTF8.GetString(bytes);
  64.  
  65.            Console.WriteLine();
  66.            Console.WriteLine(@"Nombre del HostName: {0}", Nombre_HostName);
  67.            Console.WriteLine(@"Nombre del domninio: {0}", Nombre_Dominio);
  68.            Console.WriteLine(@"MAC es: {0}", MAC);
  69.            Console.ReadKey(); // Pulsa cualquier tecla y sale.
  70.        }
  71.    }
  72. }
  73.  

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

Buscando el cambio de tipo de Byte[] a string no me ha funcionado. En esta web ayuda como se hace.
http://www.convertdatatypes.com/Convert-Byte-Array-to-string-in-CSharp.html

¿Alguna idea?

Saludos.
227  Programación / .NET (C#, VB.NET, ASP) / Cuando se pase de fecha, borrar el propio ejecutable. en: 15 Enero 2016, 15:20 pm
Hola:

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. 

¿Alguna sugerencia, ejemplos?

Saludos.
228  Informática / Electrónica / Control relés con una bombilla simulando motor lavadora en: 1 Enero 2016, 23:33 pm



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.

void setup()
{
   // Formato de pantalla.
  lcd.begin(16, 2);
  lcd.print("Foro ELECTRONICA");

  /*
  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.
*/

  pinMode(3,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(LuzFondo,OUTPUT);

  digitalWrite(LuzFondo, HIGH);
  //digitalWrite(2, !LOW); // !LOW es HIGH.
  //digitalWrite(3, !LOW);
  Serial.begin(115200);
}

void loop()
{
  lcd.setCursor(0,1);
  lcd.print(inicio=millis()/15000); // 15 seg. antes de empezar.

     for (int i=0; i <= 10; i++)
   {
 
  digitalWrite(2, !LOW);
  lcd.setCursor(3,1); // RL 1.
  lcd.print("1 OFF");
  digitalWrite(3, !LOW);
  lcd.setCursor(9,1); // RL 2.
  lcd.print("2 OFF");
  delay(2000);

  digitalWrite(2, !HIGH);
  lcd.setCursor(3,1); // RL 1.
  lcd.print("1 ON ");
  delay(2000);

  digitalWrite(2, !LOW);
  lcd.setCursor(3,1); // RL 1.
  lcd.print("1 OFF");
  delay(2000);

  digitalWrite(3, !HIGH);
  lcd.setCursor(9,1); // RL 2.
  lcd.print("2 ON ");
  delay(2000);

  digitalWrite(3, !LOW);
  lcd.setCursor(9,1); // RL 2.
  lcd.print("2 OFF");
  delay(2000);

Veces++;
 lcd.setCursor(0,1);
 lcd.print(Veces);
 
  }

  delay(1000000);

     // 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.

Feliz año nuevo.
229  Programación / .NET (C#, VB.NET, ASP) / ¿Guardar datos fijos en variables constantes, enumeraciones o en otro sitio? en: 30 Diciembre 2015, 11:49 am
Hola:

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.

       
Código
  1. enum DexCommands { INIT = 0x00, STATUS = 0x01, READ = 0x02, WRITE = 0x04, LIGHT = 0x07, MAGIC_HANDSHAKE = 0x27 };



También se puede almacenar de esta forma en varibales const.

Código
  1.        const byte INIT = 0x00;
  2.        const byte STATUS = 0x01;
  3.        const byte READ = 0x02;
  4.        const byte SEEK = 0x03;
  5.        const byte WRITE = 0x04;
  6.        const byte PAGE = 0x05;
  7.        const byte LIGHT = 0x07;
  8.        const byte MAGIC_HANDSHAKE = 0x27;

Otro ejemplo para tratar de byte para enviar por el puerto serie.

Código
  1.        byte[] INIT = { 0x00 };
  2.        byte[] STATUS = { 0x01 };
  3.        byte[] READ = { 0x02 };
  4.        byte[] SEEK = { 0x03 };
  5.        byte[] WRITE = { 0x04 };
  6.        byte[] PAGE = { 0x05 };
  7.        byte[] LIGHT = { 0x07 };
  8.        byte[] MAGIC_HANDSHAKE = { 0x27 };


1. Quiero saber cuál forma es mejor y por qué.

Si quiero enviar el byte STATUS que es 0x01 puedo hacerlo así, si no estoy equivocado. Eso si, llamándole directamente 0x01.

Código
  1. byte[] mBuffer = new byte[1];
  2.    mBuffer[0] = 0x01;
  3.    serialPort1.Write(mBuffer, 0, mBuffer.Length);

Ya que lo tengo guardado en enum, lo llamaré así:

Código
  1.            serialPort1.Open(); // Abrir puerto.
  2.            serialPort1.Write((byte)Dex_Comandos.STATUS);
  3.            serialPort1.Close(); // Cerrar puerto.

2. Este código no funciona. ¿Cómo es la mejor manera para usar datos, variables o enumeraciones en este caso?

Teniendo esta trama de byte de forma fija, por ejemmplo, quiero mandar el comandos STATUS que es de un solo byte por el puerto serie. ¿Cómo lo hago?

3. Tengo esta trama de byte abajo. ¿Cómo puedo enviarla?

       
Código
  1. byte[] TRAMAS = { 0x10, 0x29, 0x23, 0xbe, 0x84, 0xe1, 0x6c, 0xd6, 0xae, 0x52, 0x90, 0x49, 0xf1, 0xf1, 0xbb, 0xe9, 0xeb };

Felices fiestas 2015.
230  Programación / .NET (C#, VB.NET, ASP) / Mostrar nombre de los datos en C#. en: 27 Diciembre 2015, 03:36 am
Hola:

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.
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. using System.IO.Ports; // No olvidar.
  12.  
  13. namespace Config_Puerto_Serie
  14. {
  15.    public partial class Form1 : Form
  16.    {
  17.        // Variables.
  18.        bool Conectado;
  19.  
  20.        public Form1()
  21.        {
  22.            InitializeComponent();
  23.        }
  24.  
  25.        private void Form1_Load(object sender, EventArgs e)
  26.        {
  27.            // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al combo
  28.            comboBox_Puerto.DataSource = SerialPort.GetPortNames();
  29.  
  30.            // Añade los bits de datos.
  31.            comboBox_Bits_de_datos.Items.Add("5");
  32.            comboBox_Bits_de_datos.Items.Add("6");
  33.            comboBox_Bits_de_datos.Items.Add("7");
  34.            comboBox_Bits_de_datos.Items.Add("8");
  35.            comboBox_Bits_de_datos.SelectedIndex = 3;
  36.  
  37.            // Añade los bits de parada.
  38.            foreach (string Bit_Parada in Enum.GetNames(typeof(StopBits)))
  39.            {
  40.                comboBox_Bits_de_parada.Text = "Two";
  41.                comboBox_Bits_de_parada.Items.Add(Bit_Parada);
  42.            }
  43.  
  44.            // Añade la Paridad al comboBox.
  45.            foreach (string Paridad in Enum.GetNames(typeof(Parity)))
  46.            {
  47.                comboBox_Paridad.Text = "None";
  48.                comboBox_Paridad.Items.Add(Paridad);
  49.            }
  50.  
  51.            // Añade el control de flujo.
  52.            foreach (string Flujo in Enum.GetNames(typeof(Handshake)))
  53.            {
  54.                comboBox_Control_de_flujo.Text = "None";
  55.                comboBox_Control_de_flujo.Items.Add(Flujo);
  56.            }
  57.  
  58.  
  59.            textBox_Read_time_out.Text = "-1";
  60.            textBox_Write_time_out.Text = "-1";
  61.  
  62.            comboBox_DiscardNull.Items.Add("False");
  63.            comboBox_DiscardNull.Items.Add("True");
  64.            comboBox_DiscardNull.SelectedIndex = 0;
  65.  
  66.            comboBox_DtrEnable.Items.Add("False");
  67.            comboBox_DtrEnable.Items.Add("True");
  68.            comboBox_DtrEnable.SelectedIndex = 0;
  69.  
  70.            comboBox_RtsEnable.Items.Add("False");
  71.            comboBox_RtsEnable.Items.Add("True");
  72.            comboBox_RtsEnable.SelectedIndex = 0;
  73.  
  74.            textBox_ParityReplace.Text = "63";
  75.  
  76.            textBox_ReceivedBytesTrheshold.Text = "1";
  77.  
  78.            textBox_ReadBufferSize.Text = "4096";
  79.            textBox_WriteBufferSize.Text = "2048";
  80.  
  81.            // Añade puertos disponibles físicos  y virtuales.
  82.            serialPort1.BaudRate = (int)Int16.Parse(comboBox_Bit_por_segundo.Text.ToString());
  83.            serialPort1.PortName = comboBox_Puerto.Text.ToString();
  84.            serialPort1.DataBits = (int)Int16.Parse(comboBox_Bits_de_datos.Text.ToString());
  85.            serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), comboBox_Paridad.Text.ToString());
  86.            serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), comboBox_Bits_de_parada.Text.ToString());
  87.            serialPort1.Handshake = (Handshake)Enum.Parse(typeof(Handshake), comboBox_Control_de_flujo.Text.ToString());
  88.  
  89.            // Más configuraciones.
  90.            serialPort1.ReadTimeout = (int)Int16.Parse(textBox_Read_time_out.Text.ToString());
  91.            serialPort1.WriteTimeout = (int)Int16.Parse(textBox_Write_time_out.Text.ToString());
  92.            serialPort1.DiscardNull = Convert.ToBoolean(comboBox_DiscardNull.Text.ToString());
  93.            serialPort1.DtrEnable = Convert.ToBoolean(comboBox_DtrEnable.Text.ToString());
  94.            serialPort1.ParityReplace = Convert.ToByte(textBox_ParityReplace.Text.ToString());
  95.            serialPort1.RtsEnable = Convert.ToBoolean(comboBox_RtsEnable.Text.ToString());
  96.            serialPort1.ReadBufferSize = (int)Int16.Parse(textBox_ReadBufferSize.Text.ToString());
  97.            serialPort1.WriteBufferSize = (int)Int16.Parse(textBox_WriteBufferSize.Text.ToString());
  98.        }
  99.  
  100.        private void button_Conectar_Puerto_Click(object sender, EventArgs e)
  101.        {
  102.            if(!serialPort1.IsOpen)
  103.              {
  104.  
  105.                 serialPort1.Open();
  106.                 Conectado = true; // Cariable de clase boleana para controlar si el puero lo abro yo o no.
  107.                 button_Conectar_Puerto.Text = "DESCONECTAR";
  108.                 button_Conectar_Puerto.BackColor = Color.Green;
  109.              }
  110.  
  111.            else
  112.              {
  113.                if (Conectado)
  114.                  {
  115.                    serialPort1.Close();
  116.                    Conectado = false;
  117.                    button_Conectar_Puerto.Text = "CONECTAR";
  118.                    button_Conectar_Puerto.BackColor = Color.Red;
  119.                  }
  120.                else
  121.                  {
  122.                    // Esta ocupado por otro programa muestra mensaje y no hacer nada
  123.                      label_Mensajes_de_error.Text = "Puerto ocupado o no lo encuentra.";
  124.                  }
  125.               }
  126.        }
  127.  
  128.        // Detecta USB o puerto serie virtual cuando lo conecta y desconecta del cable.
  129.        protected override void WndProc(ref Message USB)
  130.        {
  131.            if (USB.Msg == 0x219)
  132.            {
  133.                comboBox_Puerto.DataSource = SerialPort.GetPortNames();
  134.            }
  135.  
  136.            base.WndProc(ref USB); // Detecta si hay cambios en el usb y si los hay los refleja.
  137.        }
  138.    }
  139. }
  140.  

Felices navidades.
Páginas: 1 ... 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [23] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ... 66
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines