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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Usar switch o otra manera para poner en gotoXY textos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Usar switch o otra manera para poner en gotoXY textos  (Leído 522 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Usar switch o otra manera para poner en gotoXY textos
« en: 29 Octubre 2024, 07:01 am »

Buenas camaradas:

Usando este código. Recibo datos por el puerto serie.

Código
  1.        // Lee datos del puerto serie.
  2.        int n = Puerto->ReadData(lectura, sizeof(lectura) - 1); // Recibe datos del puerto serie.
  3.  
  4.        if (n > 0)
  5.        {
  6.            lectura[n] = '\0'; // Finaliza la cadena.
  7.  
  8.            switch (lectura)
  9.            {
  10.  
  11.            default:
  12.                break;
  13.            }
  14.  
  15.            cout << "Recibido: " << lectura << endl;
  16.            cout << "-------------------" << endl;
  17.        }

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
  1. // Función posición del cursor.
  2. void gotoxy(int ancho_x, int alto_y)
  3. {
  4. HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  5. COORD dwPos{};
  6. dwPos.X = ancho_x;
  7. dwPos.Y = alto_y;
  8. SetConsoleCursorPosition(hcon, dwPos);
  9. }

¿Alguna solución?

Código C++ nativo completo hecho con Visual Studio 2022.
Código
  1. #include <iostream>
  2. #include <windows.h> // Para mostrar texto en el título de la ventana.
  3. #include "SerialClass.h"
  4.  
  5. using namespace std;
  6. //using std::cout;
  7. //using std::cin;
  8.  
  9. void ConfigurarConsola()
  10. {
  11. #pragma region "Configuración ventana."
  12.    // Mostrar caracteres correctamente en pantalla y título de la ventana.
  13.    SetConsoleOutputCP(CP_UTF8);
  14.    wchar_t titulo[128];
  15.    MultiByteToWideChar(CP_UTF8, 0, "Título: Arduino puerto serie - C++ nativo", -1, titulo, 128);
  16.    SetConsoleTitleW(titulo);
  17.  
  18.    // Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
  19.    SMALL_RECT r = { 0, 0, 120, 40 }; // X = 80, Y = 20.
  20.    SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
  21.  
  22.    // Cambio color de fondo 6 (amarillo / naranja), color letras 0 (negro).
  23.    system("color 60"); // Color de fonde y texto.
  24.  
  25.    // Ocultar cursor.
  26.    CONSOLE_CURSOR_INFO cci;
  27.    GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  28.    cci.bVisible = FALSE; // FALSE oculta. TRUE muestra cursor.
  29.    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  30. #pragma endregion
  31. }
  32.  
  33. // Función posición del cursor.
  34. void gotoxy(int ancho_x, int alto_y)
  35. {
  36. HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  37. COORD dwPos{};
  38. dwPos.X = ancho_x;
  39. dwPos.Y = alto_y;
  40. SetConsoleCursorPosition(hcon, dwPos);
  41. }
  42.  
  43. int main()
  44. {
  45.    // Configura consola.
  46.    ConfigurarConsola();
  47.  
  48.    // Inicializa el puerto serie.
  49.    Serial* Puerto = new Serial("COM2");
  50.  
  51.    if (!Puerto->IsConnected())
  52.    {
  53.        cerr << "Error al conectar con el puerto serie." << endl;
  54.        delete Puerto;
  55.        return 1;
  56.    }
  57.  
  58.    // Comandos para Arduino.
  59.    char Luz_ON[] = "Luz_ON"; // Envía "Luz_ON" al puerto serie.
  60.    char Luz_OFF[] = "Luz_OFF";
  61.    char Salir[] = "Salir";
  62.    char lectura[50] = { 0 }; // Guardan datos de entrada del puerto leído.
  63.  
  64.    //int tecla; // Guarda un 1 ó 2 tipo entero que introduces desde la consola.
  65.  
  66.    cout << "Pulse 1 para encender el Led, pulse 2 para apagar. (Ctrl+C para salir)" << endl;
  67.  
  68.    while (true) {
  69.        // Detecta si se ha pulsado una tecla. Desde que pulse una tecla, automáticamente envía el comando.
  70.  
  71.        // ¿Has pulsado la tecla 1 ó 1 extendido?
  72.        if (GetAsyncKeyState('1') & 0x8000 || GetAsyncKeyState(VK_NUMPAD1) & 0x8000) // Si se presiona '1' o 'Numpad 1'.
  73.        {
  74.            // Sí. Envía este comando.
  75.            cout << "Enviando: " << Luz_ON << endl;
  76.            Puerto->WriteData(Luz_ON, strlen(Luz_ON));
  77.            Sleep(500); // Espera un momento para evitar múltiples envíos.
  78.        }
  79.  
  80.        if (GetAsyncKeyState('2') & 0x8000 || GetAsyncKeyState(VK_NUMPAD2) & 0x8000) // Si se presiona '2' o 'Numpad 2'.
  81.        {
  82.            cout << "Enviando: " << Luz_OFF << endl;
  83.            Puerto->WriteData(Luz_OFF, strlen(Luz_OFF));
  84.            Sleep(500); // Espera un momento para evitar múltiples envíos.
  85.        }
  86.  
  87.        if (GetAsyncKeyState('3') & 0x8000 || GetAsyncKeyState(VK_NUMPAD3) & 0x8000)
  88.        {
  89.            cout << "Enviando: " << Salir << endl;
  90.            Puerto->WriteData(Salir, strlen(Salir));
  91.            Sleep(500); // Espera un momento para evitar múltiples envíos.
  92.        }
  93.  
  94.        // Lee datos del puerto serie.
  95.        int n = Puerto->ReadData(lectura, sizeof(lectura) - 1); // Recibe datos del puerto serie.
  96.  
  97.        if (n > 0)
  98.        {
  99.            lectura[n] = '\0'; // Finaliza la cadena.
  100.            cout << "Recibido: " << lectura << endl;
  101.            cout << "-------------------" << endl;
  102.        }
  103.  
  104.        Sleep(100); // Reduce la carga de CPU.
  105.    }
  106.  
  107.    delete Puerto; // Libera memoria.
  108.  
  109.    return 0;
  110. }


Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Por qué no puedo usar mi router de fibra para otra compañía?
Noticias
wolfbcn 0 1,748 Último mensaje 24 Enero 2017, 02:53 am
por wolfbcn
Hackean Nintendo Switch para usar YouTube, Facebook y otros
Noticias
wolfbcn 0 1,351 Último mensaje 15 Marzo 2017, 22:21 pm
por wolfbcn
Separa char para usar en otra variable
Programación C/C++
veravluis 7 2,587 Último mensaje 22 Marzo 2017, 00:45 am
por engel lex
Consejos para usar WhatsApp de manera correcta
Noticias
wolfbcn 0 2,483 Último mensaje 26 Mayo 2019, 02:10 am
por wolfbcn
Hay manera de encender el portátil de otra manera? « 1 2 3 »
Windows
BlackMorror5 20 10,608 Último mensaje 13 Abril 2022, 22:33 pm
por stack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines