Usando este código. Recibo datos por el puerto serie.
Código
// Lee datos del puerto serie. int n = Puerto->ReadData(lectura, sizeof(lectura) - 1); // Recibe datos del puerto serie. if (n > 0) { lectura[n] = '\0'; // Finaliza la cadena. switch (lectura) { default: break; } cout << "Recibido: " << lectura << endl; cout << "-------------------" << endl; }
Justo en switch (lectura) me da error de este tipo.
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido Detalles
Error C2450 una expresión switch de tipo "char [50]" no es válida Arduino y puerto serie CPP Consola 01 D:\Visual Studio 2022\Arduino y puerto serie CPP Consola 01\Arduino y puerto serie CPP Consola 01\Arduino y puerto serie CPP Consola 01.cpp 114
Dentro de los case quiero poner sus coordenadas para poner los textos en cualquier zona de la pantalla con gotoXY que es este.
Código
// Función posición del cursor. void gotoxy(int ancho_x, int alto_y) { HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); COORD dwPos{}; dwPos.X = ancho_x; dwPos.Y = alto_y; SetConsoleCursorPosition(hcon, dwPos); }
¿Alguna solución?
Código C++ nativo completo hecho con Visual Studio 2022.
Código
#include <iostream> #include <windows.h> // Para mostrar texto en el título de la ventana. #include "SerialClass.h" using namespace std; //using std::cout; //using std::cin; void ConfigurarConsola() { #pragma region "Configuración ventana." // Mostrar caracteres correctamente en pantalla y título de la ventana. SetConsoleOutputCP(CP_UTF8); wchar_t titulo[128]; MultiByteToWideChar(CP_UTF8, 0, "Título: Arduino puerto serie - C++ nativo", -1, titulo, 128); SetConsoleTitleW(titulo); // Tamaño de la pantalla. Se cambia en los dos últimos dígitos. SMALL_RECT r = { 0, 0, 120, 40 }; // X = 80, Y = 20. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r); // Cambio color de fondo 6 (amarillo / naranja), color letras 0 (negro). system("color 60"); // Color de fonde y texto. // Ocultar cursor. CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci); cci.bVisible = FALSE; // FALSE oculta. TRUE muestra cursor. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci); #pragma endregion } // Función posición del cursor. void gotoxy(int ancho_x, int alto_y) { HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); COORD dwPos{}; dwPos.X = ancho_x; dwPos.Y = alto_y; SetConsoleCursorPosition(hcon, dwPos); } int main() { // Configura consola. ConfigurarConsola(); // Inicializa el puerto serie. Serial* Puerto = new Serial("COM2"); if (!Puerto->IsConnected()) { cerr << "Error al conectar con el puerto serie." << endl; delete Puerto; return 1; } // Comandos para Arduino. char Luz_ON[] = "Luz_ON"; // Envía "Luz_ON" al puerto serie. char Luz_OFF[] = "Luz_OFF"; char Salir[] = "Salir"; char lectura[50] = { 0 }; // Guardan datos de entrada del puerto leído. //int tecla; // Guarda un 1 ó 2 tipo entero que introduces desde la consola. cout << "Pulse 1 para encender el Led, pulse 2 para apagar. (Ctrl+C para salir)" << endl; while (true) { // Detecta si se ha pulsado una tecla. Desde que pulse una tecla, automáticamente envía el comando. // ¿Has pulsado la tecla 1 ó 1 extendido? if (GetAsyncKeyState('1') & 0x8000 || GetAsyncKeyState(VK_NUMPAD1) & 0x8000) // Si se presiona '1' o 'Numpad 1'. { // Sí. Envía este comando. cout << "Enviando: " << Luz_ON << endl; Puerto->WriteData(Luz_ON, strlen(Luz_ON)); Sleep(500); // Espera un momento para evitar múltiples envíos. } if (GetAsyncKeyState('2') & 0x8000 || GetAsyncKeyState(VK_NUMPAD2) & 0x8000) // Si se presiona '2' o 'Numpad 2'. { cout << "Enviando: " << Luz_OFF << endl; Puerto->WriteData(Luz_OFF, strlen(Luz_OFF)); Sleep(500); // Espera un momento para evitar múltiples envíos. } if (GetAsyncKeyState('3') & 0x8000 || GetAsyncKeyState(VK_NUMPAD3) & 0x8000) { cout << "Enviando: " << Salir << endl; Puerto->WriteData(Salir, strlen(Salir)); Sleep(500); // Espera un momento para evitar múltiples envíos. } // Lee datos del puerto serie. int n = Puerto->ReadData(lectura, sizeof(lectura) - 1); // Recibe datos del puerto serie. if (n > 0) { lectura[n] = '\0'; // Finaliza la cadena. cout << "Recibido: " << lectura << endl; cout << "-------------------" << endl; } Sleep(100); // Reduce la carga de CPU. } delete Puerto; // Libera memoria. return 0; }
Saludos.