Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Carbide C/C++

Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 25-mar-2017, 07:08   #1
Recien llegado
 
Fecha de Ingreso: marzo-2014
Amigos 0
Mensajes: 9
Gracias: 0
Agradecido 0 veces en 0 mensajes.
Predeterminado Cambio de código

Hola:

Hice un código en C# primero porque lo manejo mejor que en C++. Por curiosidad quiero probar un poco de C++ Win32. El código consiste en enviar por el puerto serie datos a Arduino, él responde. También desde Arduino puede enviar datos a el PC lo recibe. La ventaja de C#, que no necesita librerías de terceros para controlar el puerto serie.

Código C#:
Código:
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.
                        break;

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

                    default:
                        Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");
                        break;
                }
            } while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.

            Console.WriteLine("Presione cualquier tecla para terminar...");
            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.
        }
    }
}
  
En C++ si necesita librería, en este caso lo puedes descargar. He intentado hacerlo en C++ y me funciona a medias, aún hace cosas raras, no se hacerlo y necesito ayuda. Por ahora he hecho esto.

Código C++:
Código:
// 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;
        }
}
  
¿Alguna ayuda?

Saludos.
Meta está desconectado   Responder Citando
Antiguo 29-mar-2017, 15:37   #2
Banned
 
Fecha de Ingreso: marzo-2017
Amigos 0
Mensajes: 6
Gracias: 2
Agradecido 0 veces en 0 mensajes.
Predeterminado Respuesta: Cambio de código

Cita:
He intentado hacerlo en C++ y me funciona a medias, aún hace cosas raras, no se hacerlo y necesito ayuda.
Que es lo que no te funciona? que no sabes hacer? No incluis el problema... que cosas raras hace?

Lo que podria adivinar con la info que das es que te falta aprender mas sobre el lenguaje que no conoces antes de lograr un programa util.
leogroso esta en línea ahora   Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
NDepend 6 Professional v6.0.1.8585 [Analiza tu código de programación] DON PEPE Programación 0 15-may-2016 11:18
Fundamentos de la programación - Refactorización de código [Esp] Video2Brain zolo Programación 0 17-ago-2014 03:57
Tutorial Programación Batch - completo - GUN$ Batch / Bash-Shell 5 04-dic-2011 17:42
Cómo NO realizar una práctica de programación. Trivi181 Programación 1 18-oct-2010 23:24



Portal Hacker
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0