Foro de elhacker.net

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

............................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:
Código:
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
Código:
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

Código:
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
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
  1. if (*x==1)
  2.    res=*x+*y-1;
  3. else
  4.    res=*x+*y;
  5.  

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
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.