Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ivancea96

#551
Cita de: Meta en 26 Marzo 2017, 08:39 AM
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 :/


Cita de: Meta en 26 Marzo 2017, 13:25 PM
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 (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main(){
while(true){
int n;
cin >> n;
if(!cin){
cout << "Error" << endl;
cin.clear();
cin.sync();
}else{
cout << "Ok: " << n << endl;
}
}
}
#552
En los printf, en vez de %i o %d, que son para números enteros, pon %f, para flotante.
#553
Cita de: ivancea96 en 23 Marzo 2017, 23:54 PM
En primer lugar, yo separaría estoa  una función:

Código (cpp) [Seleccionar]
while (true) {
int n = Puerto->ReadData(lectura, 49);
if (n > 0) {
lectura[n + 1] = '\0';
break;
}
Sleep(1);
}

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 (cpp) [Seleccionar]
const char *luz[2] = {"Luz_ON", "Luz_OFF"};

switch(opc){
    case 1:
    case 2:
        cout << "Enviando: " << luz[opc-1] << endl;
        Puerto->WriteData(luz[opc-1], strlen(luz[opc-1]));
        cout << "Respuesta: " << obtenerRespuestaArduino() << endl;
        break;

    default:
        // ...
}


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 -.-'
#554
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.
#555
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 (cpp) [Seleccionar]
codigo[i] = new char[1001];
#556
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
#557
Copiar y eliminar.

RegCopyTree
RegDeleteKey

No, que yo sepa, no se puede renombrar.
#558
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).
#559
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.
#560
Más que no responder, será que no lees del Arduino:
Código (cpp) [Seleccionar]
} while (tecla != 0);
Ya dije antes. Tienes que leer después de enviar. En un mensaje anterior hablé sobre hacer una función.