duda con programa para control de motores

Iniciado por electro-pajo, 2 Marzo 2013, 15:11 PM

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

electro-pajo

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.

pacoperico

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/

Y para postear tu codigo puedes copiarlo simplemente con el raton y lo pegas en un post del foro.

leosansan

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

electro-pajo

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;
  }
}

pacoperico

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.

electro-pajo

#5
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?

leosansan

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

electro-pajo

#7
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?

leosansan

#8
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!. ...

electro-pajo

Muchas gracias por vuestra ayuda señores.