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


 


Tema destacado: Sigue las noticias más importantes de elhacker.net en ttwitter!


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 350
31  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 26 Marzo 2017, 17:53
La abreviación que hiciste para ahorrar código está muy curioso, antes debo resolver problemas indicado arriba, a parte de eso, lo de pulsar una tecla y automáticamente ejecuta el envio. ;)

No era una abreviación, era la forma de corregir el flujo del programa :/


Si escribo letras, se vuelve loco. Si escribo cualquier número, funciona de maravilla.

Al usar el operator>> de istream (cin), le estás pasando una variable numérica. Si no recibe una entrada válida, pone activa alguna de sus flags internas: http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/
Para ver si está la flag de error (la que te interesa en este caso), tienes el método fail(). Si quieres ver si hay errores de cualquier tipo, tienes el operator bool de la clase ios.

Usando el operator bool:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(){
  6. while(true){
  7. int n;
  8. cin >> n;
  9. if(!cin){
  10. cout << "Error" << endl;
  11. cin.clear();
  12. cin.sync();
  13. }else{
  14. cout << "Ok: " << n << endl;
  15. }
  16. }
  17. }
32  Programación / Programación C/C++ / Re: Problemas con variables Numericas en: 26 Marzo 2017, 04:34
En los printf, en vez de %i o %d, que son para números enteros, pon %f, para flotante.
33  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 26 Marzo 2017, 00:20
En primer lugar, yo separaría estoa  una función:

Código
  1. while (true) {
  2. int n = Puerto->ReadData(lectura, 49);
  3. if (n > 0) {
  4. lectura[n + 1] = '\0';
  5. break;
  6. }
  7. Sleep(1);
  8. }
Una función que espere a que el Arduino envíe datos, y los retorne.

Lo de esperar datos solo lo vas a hacer si pulsan 1 o 2, así que llamas a esa función en cada case. Es cierto que los 2 case son idénticos salvo por la constante que envías. Podrías poner algo como:
Código
  1. const char *luz[2] = {"Luz_ON", "Luz_OFF"};
  2.  
  3. switch(opc){
  4.    case 1:
  5.    case 2:
  6.        cout << "Enviando: " << luz[opc-1] << endl;
  7.        Puerto->WriteData(luz[opc-1], strlen(luz[opc-1]));
  8.        cout << "Respuesta: " << obtenerRespuestaArduino() << endl;
  9.        break;
  10.  
  11.    default:
  12.        // ...
  13. }

De ese modo, solo esperará entrada del Arduino cuando sea necesario hacerlo. Al terminar el switch, puedes poner, si quieres, para leer datos del Arduino (sin esperar indefinidamente, eso sí, para que vuelva al inicio del bucle while y siga preguntando)

El problema es eso, el cómo está estructurado el código. Lo dicho: si tienes más experiencia en C#, puedes tratar de hacerlo ahí primero.

Ya ahí te respondiera el cómo solucionarlo -.-'
34  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 25 Marzo 2017, 23:19
Es el mismo problema de antes. Si pulsas un número que no sea ni 1 ni 2, se va al default. Al salir del switch, espera infinitamente hasta que el Arduino responda algo (y, como no le enviaste nada, no va a responder).
Solo debes esperar respuesta del Arduino en caso de que haya puesto 1 o 2.
35  Programación / Programación C/C++ / Re: Crash al usar operadores new y delete. en: 25 Marzo 2017, 21:28
En un lugar pusiste atvl y en el otro pusiste codigo.
Y luego pusiste new codigo[1001] en vez de new char[1001].

Será
Código
  1. codigo[i] = new char[1001];
36  Programación / Programación C/C++ / Re: Es posible renombrar una clave de registro? en: 25 Marzo 2017, 20:02
Cómo lo haga C# internamente, eso no lo sé. En cualquier caso, te respondo para C++.

No te vale la pena ponerte a importar funciones externas solo por renombrar. Además, pienso que si la MSDN no pone la función como pública, será por algo...

https://msdn.microsoft.com/en-us/library/cc512138(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/bb432200(v=vs.85).aspx
37  Programación / Programación C/C++ / Re: Es posible renombrar una clave de registro? en: 25 Marzo 2017, 19:11
Copiar y eliminar.

RegCopyTree
RegDeleteKey

No, que yo sepa, no se puede renombrar.
38  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 25 Marzo 2017, 00:02
El problema es que en C# te funciona porque lo estás utilizando "orientado a eventos", con los handlers. Son por lo menos 2 threads funcionando. Sin embargo, en C++ solo estás utilizando 1 thread.

Tendrás que elegir: o utilizar 2 threads en C++, o pasar el código de C# a 1 solo thread controlando tú el flujo del programa (completo).
39  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 24 Marzo 2017, 22:03
Pues por eso te digo. Hazlo primero completamente funcional en C#, y ya luego, en C++. Sinó, estás acarreando 2 problemas en vez de 1.
40  Programación / Programación C/C++ / Re: Puerto serie C++. Mejorar el programa. en: 24 Marzo 2017, 21:02
Más que no responder, será que no lees del Arduino:
Código
  1. } while (tecla != 0);
Ya dije antes. Tienes que leer después de enviar. En un mensaje anterior hablé sobre hacer una función.
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 350
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines