case 4:
switch (j) {
case '1':
output_low(LED1); //Se apaga el led verde
output_high(LED2); //Se enciende el led rojo
usb_init();
usb_task(); //Hace que se conecte y desconecte automaticamente
usb_wait_for_enumeration(); //Espera hasta que se reconoce el dispositivo
output_high(LED1); //Se enciende el led verde
output_low(LED2); //Se apaga el led rojo
out_data[8]=TC;
while (usb_enumerated()){
if(usb_kbhit(1)) usb_get_packet(8, in_data,8);
if (in_data[0]=0x0A) usb_put_packet(8,out_data,8,USB_DTS_TOGGLE);
}
break;
case '#':
Mostrar_menu_inicial();
Nivelmenu=0;
break;
default:
break;
}
break;
Asi como esta el codigo y haciendo los cambios que dije, la unica forma que reciba y envie es cuendo entras en esa opcion, es decir que mientras estas en otras partes del "menu" eso no se va a ejecutar.
Asi que no se si queres realmente que eso suceda, o fue algo no pensado.
while(TRUE){ //Bucle infinito siempre consulta el teclado
Obtenerdatos();
k=kbd_getc();
if (k!=0 )// && j!=k)
{
j=k;
}
else
{
j=0;
}
//Comprueba que la tecla presionada no sea la misma que se presiono la ultima vez
switch(Nivelmenu){
case 0:
switch (j){ //Menu principal
case '1':
Mostrar_menu_de_variables(); // Menu 1.MOT, 2.NCOMB,3.TAC,4.AMB
Nivelmenu=1; //Indica en todo momento en que submenu estamos
break;
case '2':
EnviarDatos();
Nivelmenu=4;
break;
default:
break;
}
break;
case 1: //Menu de variables, se muestran todas las variables para que se seleccione una
switch (j){ //j es la tecla que llegeixes del teclat
case '1':
Mostrar_menu_var(); //Menu Obtener datos y volver al menu atras
variable=1; //variable es la opción pulsada de 1.MOT 2.NCOMB 3.TAC 4.AMB
Nivelmenu=2;
break;
case '2':
Mostrar_menu_var();
variable=2; //variable es la opción pulsada de 1.MOT 2.NCOMB 3.TAC 4.AM
Nivelmenu=2;
break;
case '3':
Mostrar_menu_var();
variable=3; //variable es la opción pulsada de 1.MOT 2.NCOMB 3.TAC 4.AM
Nivelmenu=2;
break;
case '4':
Mostrar_menu_var();
variable=4;//variable es la opción pulsada de 1.MOT 2.NCOMB 3.TAC 4.AM
Nivelmenu=2;
break;
case '#':
Mostrar_menu_inicial();
variable=0; //variable es la opción pulsada de 1.MOT 2.NCOMB 3.TAC 4.AM
Nivelmenu=0;
break;
default:
break;
}
break;
case 2: // Menu de cada variable, todas tienen 2 opciones, obtener datos y salir al menu anterior
switch (j) {
case '1': Mostra_variable(variable);
Nivelmenu=3;
break;
case 'A':
Mostrar_menu_de_variables();
Nivelmenu=1;
break;
default:
break;
}
break;
case 3:
switch (j) {
case 'A':
Mostrar_menu_de_variables();
Nivelmenu=1;
break;
default:
Mostra_variable(variable);
delay_ms(1);
break;
}
break;
case 4:
switch (j) {
case '1':
output_low(LED1); //Se apaga el led verde
output_high(LED2); //Se enciende el led rojo
usb_init();
usb_task(); //Hace que se conecte y desconecte automaticamente
usb_wait_for_enumeration(); //Espera hasta que se reconoce el dispositivo
output_high(LED1); //Se enciende el led verde
output_low(LED2); //Se apaga el led rojo
//out_data[0]=p;
if (usb_enumerated()){
out_data[0]=p;
usb_put_packet(1,out_data,1,USB_DTS_TOGGLE);
if (usb_kbhit(1)){
usb_get_packet(1,in_data,1);
}
}
break;
case '#':
Mostrar_menu_inicial();
Nivelmenu=0;
break;
default:
break;
}
break;
}//end switch Nivel Menu
} //end while
} //end main menu
i se alimenta desde el USB de la maquina, entonces podes usar eso asi nomas y ponerlo al comienzo del main( antes del loop del menu ). Sino vas a tener que usar usb_init_cs(), mas definir un pin de sensado de que esta el bus (USB_CON_SENSE_PIN) y llamar continuamente a usb_task que es el encargado de que lo desconecte o no segun el pin ese
while(TRUE){ //Bucle infinito siempre consulta el teclado
Obtenerdatos();
if (usb_habilitado){ //En el loop principal asi cuando se habilita lee/escribe siempre mientras sigue el menu
usb_task();
if (usb_enumerated()){
out_data[0]=p;
usb_put_packet(1,out_data,1,USB_DTS_TOGGLE);
if (usb_kbhit(1)){
usb_get_packet(1,in_data,1);
}
}
}
k=kbd_getc();
if ((k!=0 ) && (j!=k))
{
j=k;
}
else
{
j=0;
!}
//Comprueba que la tecla presionada no sea la misma que se presiono la ultima vez
switch(Nivelmenu){
case 0:
switch (j){ //Menu principal
case '1':
Mostrar_menu_de_variables(); // Menu 1.MOT, 2.NCOMB,3.TAC,4.AMB
Nivelmenu=1; //Indica en todo momento en que submenu estamos
break;
case '2':
output_toggle(LED1); // Toggle del led, led encendido, habilitado el USB, apagado no habilitado para recibir o escribir
usb_habilitado = ~usb_habilitado;
break;
default:
break;
}
break;
usb_task();
if (usb_habilitado && usb_enumerated() && usb_attached()){
out_data[0]=p;
usb_put_packet(1,out_data,1,USB_DTS_TOGGLE);
if (usb_kbhit(1)){
usb_get_packet(1,in_data,1);
}
usb_task();
if (usb_habilitado && usb_enumerated() && usb_attached()){
out_data[0]=TC; //Temperatura motor
out_data[1]=p; //Nivel comb
out_data[2]=RPM;//RPM
out_data[3]=VEL;//vel
usb_put_packet(1,out_data,1,USB_DTS_TOGGLE);
if (usb_kbhit(1)){
usb_get_packet(1,in_data,1);
}