Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: electro-pajo en 2 Marzo 2013, 15:11 PM

Título: duda con programa para control de motores
Publicado por: electro-pajo en 2 Marzo 2013, 15:11 PM
Me presento: Es la 1º vez que participo en un foro, queria subir un pequeño programa para el control de un motor pero no se como se hace. Como se hace? Gracias.
Título: Re: duda con programa para control de motores
Publicado por: pacoperico en 2 Marzo 2013, 15:39 PM
Cuando dices motor creo que puedes estar refiriendote a motores electricos gobernado por algun pic, en ese caso lo suyo seria que postearas en el apartado de electronica:

http://foro.elhacker.net/electronica-b31.0/ (http://foro.elhacker.net/electronica-b31.0/)

Y para postear tu codigo puedes copiarlo simplemente con el raton y lo pegas en un post del foro.
Título: Re: duda con programa para control de motores
Publicado por: leosansan en 2 Marzo 2013, 16:43 PM
Cita de: electro-pajo en  2 Marzo 2013, 15:11 PM

............................queria subir un pequeño programa para el control de un motor pero no se como se hace. Como se hace? Gracias.


Sencillamente donde pone GeSHi seleccionas C++ y aparecerán dos etiquetas" Code", en medio de ambas "pegas" tu código. Por cierto si está en C++ este foro es perfectamente válido para colgarlo, es un foro de "códigos", no en electrónica que es o debe ser para temas específicos.

Saluditos!, y bienvenido.
.... (http://st.forocoches.com/foro/images/smilies/ciao.gif)
Título: Re: duda con programa para control de motores
Publicado por: electro-pajo en 2 Marzo 2013, 19:49 PM
Muchas gracias por la bienvenida. Mi duda es con respecto a la programacion no a la electronica, efectivamente. Estoy muy verde en C y no se si en este programa la funcion "motor" hace algo que no sea del infierno...
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
unsigned short inport (unsigned int puerto)
{
_DX=puerto;
__emit__(0x66,0xED);
return _AX;
}
void outport (unsigned int puerto, unsigned short dato)
{
_DX=puerto;
_AX=dato;
__emit__(0x66,0xEF);
}


void motor(int *, int *);

void main(void)
{
int numero;
int sentido;


   printf("****************************************************\n");
    printf("*             CONTROL MOTORES PaP                  *\n");
    printf("****************************************************\n");
    do{
       do{
          printf("¿Desea mover 1 o 2 motores?\n");
              fflush(stdout);
          scanf("%d", &numero);
         }while(numero!=1 && numero!=2);
       do{
          printf("¿Que sentido de giro desea? (1)=horario  (2)=antihorario\n");
           fflush(stdout);
            scanf("%d", &sentido);
      }while(sentido!=1 && sentido!=2);
   motor(&numero,&sentido);
    }while(true);
}

void motor(int *x, int *y)
{
int res;
int i;

res=*x&&*y;
char a[]={0x06,0x05,0x09,0x0A};   //1 motor sentido horario
char b[]={0x66,0x99,0x55,0x66};   //2 motores sentido horario
char c[]={0x0A,0x09,0x05,0x06};   //1 motor sentido antihorario
char d[]={0xAA,0x99,0x55,0x66};   //2 motores sentido antihorario
switch(res)
{
    case 1: for(i=0; !kbhit(); i++)
          outport(0x378, a);
    break;
   case 2: for(i=0; !kbhit(); i++)
          outport(0x378, b);
    break;
    case 3: for(i=0; !kbhit(); i++)
          outport(0x378, c);
    break;
    case 4: for(i=0; !kbhit(); i++)
          outport(0x378, d);
    break;
  }
}
Título: Re: duda con programa para control de motores
Publicado por: pacoperico en 2 Marzo 2013, 21:04 PM
En la definicion de tu funcion motor() veo lo siguiente:
res=*x&&*y;

El operador && es el operador logico "and" el cual solo devuelve verdadero (generalmente 1) si ambas expresiones son verdaderas *x e *y, y falso (0) en los demas casos.

En el lenguaje C desde sus comienzos no existe el tipo bool, en su defecto se consideraba cualquier valor numerico distinto de cero como verdadero y el valor numerico cero como falso. En la mayoria de compiladores verdadero suele corresponder con el valor 1.

Para que me entiendas un poco mejor, un if por ejemplo

if(condicion)
     enunciado;

Evalua la condicion comprobando su valor numerico, si la condicion vale 1 entonces ejecuta el enunciado y si no vale 1 no ejecuta el enunciado.

En tu codigo
res=*x&&*y;
A la variable res le estas asignando el valor 1 en el caso de que *x e *y tengan el mismo valor, y el valor 0 en caso contrario. Cuando despues haces

switch(res)
{
    case 1: for(i=0; !kbhit(); i++)
          outport(0x378, a);
    break;
   case 2: for(i=0; !kbhit(); i++)
          outport(0x378, b);
    break;
    case 3: for(i=0; !kbhit(); i++)
          outport(0x378, c);
    break;
    case 4: for(i=0; !kbhit(); i++)
          outport(0x378, d);
    break;


La variable res solo podra ejecutar el case 1: ya que solo podra tener el valor 1 o el valor 0.
Título: Re: duda con programa para control de motores
Publicado por: electro-pajo en 2 Marzo 2013, 21:34 PM
muchas gracias por tu respuesta. Como ves para mi C es tan natural como el arabe.
No se como hacer que con los parametros pasados a esta funcion se puedan elegir 4 opciones. La primera seria: si x=1 e y=1 elige la secuencia a; si x=1 e y=2 elige la secuencia b...etc



EI: juntando mensajes.


Si quito el doble & cambia algo?
Título: Re: duda con programa para control de motores
Publicado por: leosansan en 2 Marzo 2013, 22:03 PM
Cita de: electro-pajo en  2 Marzo 2013, 21:44 PM
Si quito el doble & cambia algo?

Todo.

Como bien dices, x e y pueden valer 1,1  1,2  2,1   2,2.

Entonces
:
Código (cpp) [Seleccionar]

if (*x==1)
   res=*x+*y-1;
else
   res=*x+*y;


Saluditos!. .....(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Título: Re: duda con programa para control de motores
Publicado por: electro-pajo en 2 Marzo 2013, 22:22 PM
y de esta forma seguiria funcionando la sentencia switch?  Si es asi me das una gran alegria


EI: juntando mensajes.


No hace falta nada que relacione  las variables 1,1 1,2 etc con las cadenas a,b,etc.
He hecho las practicas de interrogatorio en guantanamo, se nota?
Título: Re: duda con programa para control de motores
Publicado por: leosansan en 2 Marzo 2013, 22:36 PM
Cita de: electro-pajo en  2 Marzo 2013, 22:22 PM
y de esta forma seguiria funcionando la sentencia switch?  Si es asi me das una gran alegria


A qué estan referidas las variables a,b,c,d?.La elección del switch sería correcta con el "res" que te indico.

Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/simba1.gif)
Título: Re: duda con programa para control de motores
Publicado por: electro-pajo en 2 Marzo 2013, 22:42 PM
Muchas gracias por vuestra ayuda señores.