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


 


Tema destacado: Doble factor de autenticación o verificación en dos pasos


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 348
51  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 18 Marzo 2017, 01:24
Para empezar, es interesante saber qué hace exactamente ReadData: Retorna el número de caracteres leídos (y -1 si hubo un error o si leyó 0 caracteres). Dicho esto, ten en cuenta que las cadenas en C++ no son como en C#. De esos 50 caracteres, si solo lees 10, quedarán 40 como basura. Para evitar leerlos, basta poner un '\0' en el undécimo caracter:

Código
  1. int n = Puerto->ReadData(lectura, 49);
  2. lectura[n + 1] = '\0';

Eso en primer lugar. Luego, si el retorno de ReadData es -1, no deberías mostrar el Recibido (deberías esperar primero a que haya bytes para leer, pues no tienen por qué trabajar a la vez el Arduino y el PC (viene siendo como sincronizar varios threads, vaya))

Y bueno, hecho eso, a ver qué problemas te da.
52  Programación / Programación C/C++ / Re: cómo se hacen las rejas 3D en glut y opengl en: 17 Marzo 2017, 23:22
En primer lugar, trata de no poner varios includes iguales.
Luego, trata de poner los glvertex con un for en vez de ponerlos todos seguidos.

Sobre texturas, es un pelín más coñazo. YO te recomendaría dejarlo para un poco más adelante, y acostumrbarte primero a OpenGL (puedes hasta simular hierba con triangulitos de diversas variedades de verde). Realmente no son <necesarias> las texturas al principio, y lían de más, sobre todo si el proyecto no está bien organizado.

Ahora bien, si quieres proseguir con texturas, pues bueno. Yo te diría que busques por Google, que algo encontrarás (Hace mucho que no utilizo OpenGL antiguo para cargar texturas).
53  Programación / Programación C/C++ / Re: cómo se hacen las rejas 3D en glut y opengl en: 17 Marzo 2017, 15:43
Puedes hacer lo que quieras, pero ve por partes. No empieces haciendo un juego; un juego requiere más que solo gráficos.

Te diría que hagas un tutorial de OpenGL, como es: http://www.opengl-tutorial.org/es/
El OpenGL moderno es más complicado que el antiguo (Ese que utiliza glbegin, glvertex, glEnd, etc... para dibujar). Por esa razón, poco a poco.
54  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 17 Marzo 2017, 15:15
El "truco" d elas teclas, es lo mismo que el digitalRead que tienes ahí. Puedes guardar su estado anterior, no más.

Citar
No muestra nada en C#, solo se acumula en la variable lenguaje
¿C#? ¿Variable lenguaje?

En cualquier caso. ¿Tu problema es que no recibes datos del Arduino? Entonces comenta el switch y testealo por separado.
55  Programación / Programación C/C++ / Re: cómo se hacen las rejas 3D en glut y opengl en: 17 Marzo 2017, 14:31
Eso, tú verás. Yo te recomendaría OpenGL. Mejor comprender los cimientos antes de ponerse con algo de mucho más alto nivel, como es un engine.
56  Programación / Programación C/C++ / Re: cómo se hacen las rejas 3D en glut y opengl en: 17 Marzo 2017, 14:22
Las líneas curvas son una sucesión de lineas rectas. Parauna curva de Bézier, vasta que avances poco a poco y vayas dibujando las líneas.

Avanzar desde t=0 a t=1 a pasos pequeños (dependiendo de la calidad que busques), y dibujando.


De todos modos, creo que estás yendo demasiado rápido.
- Antes de trabajar con 3D, trabaja con 2D.
- Antes de dibujar curvas, dibuja polígonos.
- En resumen, no hagas cosas "mucho" más avanzadas de lo que puedes hacer ahora, o acabarás bloqueado. Según vayas haciendo cosas, irás viendo cómo hacer las siguientes.
57  Programación / Programación C/C++ / Re: cómo se hacen las rejas 3D en glut y opengl en: 17 Marzo 2017, 13:50
¿Un plano X y Z de coordenadas? ¿Hacerlo? Pues será escribir los números donde convenga. También lo haces con uno o dos FOR.
58  Programación / Programación C/C++ / Re: cómo se hacen las rejas 3D en glut y opengl en: 17 Marzo 2017, 13:30
¿Una cuadrícula? Es solo un conjunto de líneas. Si estás utilizando OpenGL antiguo, con glBegin y glVertex, solo sería poner glBegin(GL_LINES);.
Aquí han hablado de ello:
http://www.foro3d.com/f115/hacer-rejilla-en-opengl-en-2d-y-3d-66932.html

http://www.opengl-tutorial.org/es/
59  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 17 Marzo 2017, 13:10
La parte donde pone if (GetAsyncKeyState('A') & 0x8000) , precisamente 0x8000 no lo entiendo y no lo pone aquí.
No, no lo pone ahí. Lo pone aquí: https://msdn.microsoft.com/es-es/library/windows/desktop/ms646293(v=vs.85).aspx
Citar
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down
El bit más significativo en un short es, digamos, ""el de la izquierda"". 0x8000 en binario es 0b1000_0000_0000_0000. Haciendo un and (&), sacamos si ese bit está activo o no. Si está activo, el resultado será diferente de 0, así que se ejecutará el contenido del if. Si no está pulsada, el bit estará a 0, y el AND retornará 0. El if, en ese caso, no se ejecutará.

Parece ser que ignora esta instrucción.
Código
  1. Puerto->WriteData(Luz_OFF, sizeof(Luz_OFF) - 1);

Aquí una captura cuando pulsa solo la B o la A. Se repite muchas veces. (Si es posible hacer el tamaño de la ventana en la programación de C++, mejor que mejor).

Sobre el tema de que se repita muchas veces es porque el GetAsyncKeyState te dice que está pulsada, no si ha sido pulsada. Por tanto, si mantienes la tecla,  entrará muchas veces. Tendrías que controlar si ha sido pulsada ahora o si ya estaba pulsada.

Lo de recibir comandos desde el peurto serie o Arduino es este el que me refería:
Código
  1. Puerto -> ReadData(lectura, 50);
  2. cout << "Recibido: " << lectura << endl;

Que este programa al mismo tiempo que envía comandos, también los puede recibir. Si el programa C++ no le hago nada, solo lo dejo arrancado, desde el puerto serie puede venir cualquier dato y C++ debe leerlo sin problemas.

Como dice MAFUS, esto es un protocolo con 2 programas. Conocemos el de Windows, pero no conocemos el de Arduino. ¿No podría ser problema del programa del Arduino?
60  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 17 Marzo 2017, 00:21
"No sabes si lo hace bien"? Pues yo menos ._.

En cualquier caso, mi respuesta iba orientada a:

Si pulsas la tecla, por ejemplo 5, primero se ve reflejado y luego tengo que pulsar Enter. Lo que quiero lograr es que si pulse el número 5, automáticamente ejecuta la instruacción del case 5 del Switch.
Para lo cual, puedes usar la función GetAsyncKeyState de WinAPI.
En al documentación explica su retorno:
Citar
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down

Por tanto, comprobamos el bit:
Código
  1. if(GetAsyncKeyState(tecla) & 0x8000){
  2.    // Tecla pulsada
  3. }

El código de la tecla es un VirtualKey Code: https://msdn.microsoft.com/es-es/library/windows/desktop/dd375731(v=vs.85).aspx. En cualquier caso, decirte que los codigos de las letras coinciden con los caracteres de las letras mayúsculas:

Código
  1. if(GetAsyncKeyState('A') & 0x8000){
  2.    // Tecla 'A' pulsada
  3. }


Y con respecto a lo del IDE que comentaste, no sé de qué hablabais, pero por supuesto que no importa el IDE.

y bueno, lo dicho:
Citar
Luego recibir este comando que no se si lo hace bien.
Describe qué es lo que no sabes si hace bien y por qué.
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 348
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines