Puerto serie C++. Mejorar el programa.

Iniciado por Meta, 16 Marzo 2017, 22:21 PM

0 Miembros y 17 Visitantes están viendo este tema.

ivancea96

Aja...
Código (cpp) [Seleccionar]
void obtenerRespuestaArduino()
{
while (true)
{
int n = Puerto->ReadData(lectura, 49);
if (n > 0) {
lectura[n + 1] = '\0';
break;
}
Sleep(1);
}
}


En C++, no se ponen funciones dentro de funciones.

Y bueno, la idea de esa función es que la modifiques para que retorne la respuesta del Arduino.
Pero bueno, como veas.

Meta

No se como se hace, en C++ ni idea, me he vuelto loco. Ahora estoy intentando como funciona en CODE::BLOCKS, luego lo paso a C++ Bulder Starter y te cuento.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

ivancea96

Pues, por eso te digo. Hazlo en C# sin eventos/handles. Luego pasarlo es casi directo.

Meta

Hola:

Ya me funciona en Visual Studio 2017, Code::Blocks y C++ Builder Started. ;)

Era la librería que lo tenía 9600 buadios en el Code:Blocks y demás. ;)

El código y librería es el mismo.
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <Windows.h>
#include "SerialClass.h"
using namespace std;

int main()
{
// Título de la ventana
SetConsoleTitle("Control Led Arduino - Visual Studio C++ 2017");

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


Sleep(250);
int n = Puerto->ReadData(lectura, 49);
if (n > 0)
{
lectura[n + 1] = '\0';
cout << "Recibido: " << lectura << endl;
cout << "-------------------" << endl;
}

cin.ignore(256, '\n'); // Limpiar buffer del teclado.
}
}


Quité el void main() y le puse en int a todos. El void solo funciona en el Visual studio y C++ Builder, en Code.blocks, solo int. Esto para saber.

Gracias por todo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

Hola:

Tutorial ya hecho, como me agotó solo hacer la maquetación y diseño que el propio contenido.

Ver tutorial.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/