Autor
|
Tema: Duda sobre operadores y funciones (Leído 7,739 veces)
|
Luxus01
Desconectado
Mensajes: 14
|
Hola a todos, soy nuevo y estoy empezando ha programar en c++. Estoy haciendo un programa con el que "dibujar" un recorrido en la consola, el programa lee ese recorrido y lo procese para transformarlo en instrucciones para un robot en la vida real (con arduino). Y me gustaría saber si hay algún operador, función o librería que sea capaz de detectar ese recorrido, o al menos de ayudarme a hacer una función que lo detecte. Gracias por adelantado
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Dibujar un recorrido en la consola. Explica mejor qué tipo de datos va a recibir el programa. ¿Va a recibir datos del tipo "ADELANTE 5", va a recibir un "mapa" del recorrido tipo
|
|
|
En línea
|
|
|
|
Luxus01
Desconectado
Mensajes: 14
|
Hola, perdón por haber tardado en responder . En el anterior mensaje no explique bien lo que quería hacer aqui, tienes el codigo con comentarios. Aun no esta terminado, me falta conectar el c++ y el arduino (algo que no se como hacer todavia) pero lo del recorrido ya esta hecho. #include<stdio.h> //Declara las librerias, variables y definiciones #include<windows.h> #include<conio.h> #include<stdlib.h> #include<list> #include<iostream> using namespace std; #define ARRIBA 72 #define IZQUIERDA 75 #define DERECHA 77 #define ABAJO 80 bool fina = false; //Esta variable pone fin al programa si es necesario int recorrido[20]; //En este array se almacena el recorrido en forma de numeros void gotoxy(int x, int y) //Funcion para situar el cursor en el lugar deseado { HANDLE hCon; hCon = GetStdHandle (STD_OUTPUT_HANDLE); COORD dwPos; dwPos.X =x; dwPos.Y =y; SetConsoleCursorPosition(hCon, dwPos); } void OcultarCursor()//Oculta el cursor { HANDLE hCon; hCon = GetStdHandle (STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cci; cci.dwSize = 2; cci.bVisible = false; SetConsoleCursorInfo (hCon,&cci); } class Inicio //Es el objeto que se mueve por el camino { private: int x, y; public: Inicio(int _x,int _y): x(_x), y(_y){} void pintar(); void mover(); }; void Inicio::mover()//Esta es la funcion mas importante, permite hacer el camino y lo traduce a numeros { int i; if(kbhit() && recorrido[20] == 0)//Detecta si se a presionado una tecla y si la ultima cifra del recorrido es cero { char tecla = getch(); if(tecla == ARRIBA )//Detecta que flecha se a pulsado(en este caso arriba) { y--; for(i=0;i<21;i++)//En este for se recorre el arreglo y se guarda el numero correspondiente en el siguiente hueco distinto a cero { if(recorrido[i] == 0) { recorrido[i] = 72; break; } } } if(tecla == IZQUIERDA ) { x--; for(i=0;i<21;i++) { if(recorrido[i] == 0) { recorrido[i] = 75; break; } } } if(tecla == DERECHA ) { x++; for(i=0;i<21;i++) { if(recorrido[i] == 0) { recorrido[i] = 77; break; } } } if(tecla == ABAJO ) { y++; for(i=0;i<21;i++) { if(recorrido[i] == 0) { recorrido[i] = 80; break; } } } gotoxy(x,y); printf("*");//Imprime un asterisco para que la trayectoria sea visible gotoxy(0,0);//Situa el cursor en la esquina superior izquierdaa for(i=0;i<21;i++)//Imprime la secuencia en el margen { cout<< recorrido[i]<<"\n"; } } if(recorrido[20] != 0)//Comprueba si la ultima cifra del recorrido es distinta de cero, en tal caso, el programa le manda la secuencia al robot { fina = true; gotoxy(0,0); printf("Se ha completado la trayectoria, puedes mandar los datos al robot"); } } void Inicio::pintar()//Pone el primer objeto para que sea visible { gotoxy(x,y); printf("%c",223); } int main() { OcultarCursor(); int recorrido[20]; int i; for(i=0;i<21;i++)//Despues de mandar la secuencia al robot vuelve el recorrido a cero para poder volver a utilizarla { recorrido[i]=0; } Inicio In(60,60); In.pintar(); while(!fina)//Inicia el bucle que permite la creacion del recorrido { In.mover(); } return 0; }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
En primer lugar: En un array de 20 elementos, el índice va desde 0 hasta 19. Por tanto, los for son incorrector. Seberían ser: for(int i=0; i<20; i++)
También el if debería ser: if(kbhit() && recorrido[19] == 0)
Luego, como detalle: Sería más conveniente que guardases la cantidad de recorrido en un entero, y te ahorras estos for: for(i=0;i<21;i++)//En este for se recorre el arreglo y se guarda el numero correspondiente en el siguiente hueco distinto a cero { if(recorrido[i] == 0) { recorrido[i] = 72; break; } }
Como último detalle, si programas C++, es preferible utilizar las librerías de C++: stdlib.h pasa a llamarse cstdlib stdio.h -> cstdio (windows.h y conio.h se quedan así) Y bueno. Me has dejado desconcertado. En la pregunta inicial, preguntas cómo "detectar el recorrido". Con ese programa, tienes el array de movimientos, que es lo que necesitas, ¿no?
|
|
|
En línea
|
|
|
|
Luxus01
Desconectado
Mensajes: 14
|
Si, después de publicar el mensaje empece a darle vueltas mi di cuenta de que en vez de analizar el recorrido del objeto podía almacenar en una cadena cada pulsación de las teclas como números y luego asignar esos números a un movimiento determinado. Lo siento, no entiendo a que te refieres con almacenar los movimientos en un entero, tenerlos en un arreglo me permite tenerlos secuenciados. Otra cosa, al poner cstdlib y cstdio me salta un error
Ahora tengo problemas con la comunicación serial por que no tengo ni idea de como funciona.
|
|
« Última modificación: 10 Septiembre 2016, 16:43 pm por Luxus01 »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Decía de guardar un entero con el último índice almacenado. Actualmente, calculas la cantidad de movimientos almacenados con un for. En vez de hacer eso, mejor guardar sin más un entero. En cuanto a la conexión serie, Arduino da una clase C++ para que la uses si quieres. Para usarla, pues tiene funciones simples tipo Write y Read, no tiene más. Si quieres, aquí tengo un programa funcional para conectar Arduino con programa C++: https://github.com/ivancea/Arduino-Interpreter/tree/master/C++%20App
|
|
|
En línea
|
|
|
|
Luxus01
Desconectado
Mensajes: 14
|
Me podrías explicar como usar tu programa. Porque sinceramente no tengo ni idea de que hacer con él.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Umh bueno. Hay la aprte de Arduino, que le metes al Arduino sin más: https://github.com/ivancea/Arduino-Interpreter/blob/master/arduino_program.cY la parte de C++, que tienes que compilar. Si quieres, puedes usas un IDE, puedes hacer un proyecto, como más te guste. El programa lo único que tiene es un intérprete de comandos, para poner cosas como: pinmode 5 OUTPUT digitalwrite 5 HIGH Desde ls consola del programa, con el Arduino conectado. Pero bueno, era más que nada para que vieras cómo implementar en tu proyecto la clase Serial (serial.h y serial.cpp). Si quieres, aquí hay una fuente oficial en la cual usan la clase: http://playground.arduino.cc/Interfacing/CPPWindowsAunque bueno, no me gusta porque mezclan mucho C con C++ xD
|
|
|
En línea
|
|
|
|
Luxus01
Desconectado
Mensajes: 14
|
Lo siento, debo de ser un plasta pero yo me refiero a como unir todos esos códigos, el de arduino lo he copiado al Arduino IDE y los archivos h los he puesto con las demás librerías pero el resto no se que hacer con ello. Y donde se cambian las opciones para compilar con -std=c++11?
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Vale, lo de Arduino listo. Ahora los otros. Si usas un IDE para compilar C++, puedes crear un proyecto, agregar esos 5 archivos, y compilar, sin más. Si no lo logras, dime: ¿Qué IDE utilizas para compilar C++? (No hablo del de Arduino) Si compilas desde línea de comandos, sería (Con GCC, no sé cual es tu compilador): g++ -std=c++11 -c functions.cpp -o functions.o g++ -std=c++11 -c serial.cpp -o serial.o g++ -std=c++11 -c main.cpp -o main.o g++ functions.o serial.o main.o -o main.exe
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
duda sobre estructuras y funciones
Programación C/C++
|
asdavid
|
3
|
2,870
|
29 Noviembre 2012, 00:01 am
por durasno
|
|
|
Duda sobre ficheros en funciones
Programación C/C++
|
muymuyperdido
|
4
|
2,987
|
23 Diciembre 2012, 15:43 pm
por muymuyperdido
|
|
|
Duda sobre funciones inline.
Programación C/C++
|
OmarHack
|
7
|
4,400
|
28 Marzo 2013, 17:04 pm
por OmarHack
|
|
|
duda sobre funciones
Programación C/C++
|
0xFer
|
3
|
2,724
|
20 Abril 2015, 11:43 am
por Gh057
|
|
|
Duda sobre algunas funciones de C++
Programación C/C++
|
vojok
|
4
|
2,795
|
2 Enero 2016, 17:54 pm
por vojok
|
|