Mejorar este código de C++


25 de Marzo del 2017

Hola:

Con est ecódigo envio datos al puerto serie y me responde. Si pulso 1 o el 2 envía datos. Si pulso otra tecla, me salta al Default y luego no hace nada, se queda C++ como atascado.

¿Cómo se corrige ese error?

El código es este:

// 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] = ""; // 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] = '';
				break;
			}
			Sleep(500);
		}
		cout << "Recibido: " << lectura << endl;
		cout << "-------------------" << endl;
		}
}