Ayuda con programa de control en C

Iniciado por javitrito, 4 Febrero 2017, 11:13 AM

0 Miembros y 1 Visitante están viendo este tema.

javitrito

Buenos dias, estoy realizando un proyecto de ingenieria sobre un sistema hipercaotico. Tengo realizado todo mi código y deseo controlarlo mediante un sistema de control que me ha dado mi tutor. Lo que deseo hacer es que en mi función "control" al pulsar una tecla, por ejemplo la "c" se aplique mi control. Tengo hecha la condición pero mi problema está en como hacer para poder introducir la tecla, si necesito un scanf o como hacerlo. Un saludo y adjunto mi codigo, el trozo del código que realiza el control.

void control(double te[], double ts[])
{
double signo1,signo2,z1,zp1,z4,zp4,e1prima,e4prima,e1,e4;
char letra;
if (letra == 'c'){

if ((0.6*ts[0]-8*ts[1]+1.5*ts[2]+1.5*ts[3]-0.6*ts[4])>0){
      signo1=1;
 }
 else{
      signo1=-1;
}


 if (signo1 == 1 && signo2== -1) {
z1=ts[0]+sin(zp1-ts[0]);
   zp1=z1;
   te[0]=z1-ts[0];
z4=ts[3]+sin(zp4-ts[3]);
   zp4=z4;
   te[1]=z4-ts[3];
}
 

  if ((0.6*ts[0]-8*ts[1]+1.5*ts[2]+1.5*ts[3]-0.6*ts[4])>0){
signo2=1;
}
  else
{
       signo2=-1;
 }
 
 
   
e1prima=-1225*e1;  
e1=e1+e1prima*0.02; //vTm(0,02)

e4prima=-1225*e4;  
e4=e4+e4prima*0.02;

 te[0]= 1225*e1;

 te[1]= 1225*e4;

}
}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

MAFUS

Hay muchas formas diferentes. Depende de si es un entorno visual o si es por consola.
Cada entorno visual tiene su forma de manejar eventos.
Si es por consola puedes apoyarte en tu sistema operativo y usar su API, o buscar una biblioteca que se encargue de ello. Si este último es tu elección te recomiendo ncurses. Si vas a usar el S.O. y es Linux busca información sobre termios. Para todo lo demás ni idea.

javitrito

Gracias por la respuesta. Uso un entorno visual, keil uvision en windows. Espero alguna sugerencia más jeje

MAFUS

No, decía si el programa va a ser para la consola o sería en ventanas.

javitrito

El programa seria en ventanas, yo tengo una placa montada con mi oscilador hipercaotico y lo unico que me falta es lo que he comentado, al pulsar una tecla "c" aplicar mi control, pero no se como hacer para que me aparezca una ventana para introducir mi letra "c"

MAFUS

Como es en ventanas, y supongo que en Windows, ya no tengo conocimientos de ello. Seguro alguna otra persona pueda darte mejor ayuda.
De forma general, y por si pudieras mirarlo por ti mismo si no hay más ayuda, debes registrar el evento de tecla pulsada a la ventana principal del programa. Una vez se dispare miras si la tecla que se ha pulsado se corresponde a la tecla 'c'. Si es así cambia el valor de una variable que controle la llamada a tu función a True para que tu programa llame a dicha función. De igual forma se se vuelve a pulsar 'c' la variable pasará a False y el programa ya no llamará tu función.

javitrito

Muchas gracias por la respuesta. He hablado hoy con mi tutor y me ha dicho que en vez de hacerlo pulsando una tecla, lo haga pulsando un boton que trae mi microcontrolador. No se si seré capaz de hacerlo jeje, si alguien ha hecho algo parecido y sabe como programarlo que me lo comente jeje

MAFUS

Eso es otra cosa. Supongo que la comunicación será pot puerto serie, emulado  (USB) o real. Deberás esperar en un bucle comunicación desde el puerto y actuar cuando recibas un o varios bytes que hayas preprogramado en el microcontrolador.

Por otra parte de búsqueda s programar el micro de forma que cada vez que pulses el botón debe enviar un o una secuencia de bytes por el puerto serie.

javitrito

Exacto! La comunicación como bien has dicho se realiza por puerto serie via USB. Mi problema reside en configurar dicho botón y como asignar el pulsado del botón a mi función de control.

MAFUS

Supongo que la comunicación entre el uC y el PC es constante enviando constantemente datos que el chip recoge.
Si ese es el caso pon el botón a una entrada con interrupción del uC de forma que cuando se active varíes una variable interna de 1 a 0 o de 0 a 1 y, además, envía al PC un mensaje con la información de ese cámbio y el valor.
Ahora el PC y el uC saben que el control pertenece al PC.
De la parte del uC puedes revisar la variable en cada iteración del bucle principal y elegir una rutina de autocontrol o una en que trabaje como esclavo.
De la parte del PC, que también tendrá una variable interna que cambiará según el mensaje recibido, el bucle principal la observará y elegirá una rutina de solo muestreo de datos o una más activa dinde recubirá los datos del uC, hará sus cálculos y retornará los resultados para que ése los aplique.

Lo que debes preparar bien es el protocolo de comunicación con las funciones y datos que deben ser transferidos. Lo demás es comunicación con periféricos que de seguro sabrás hacer sin problemas.