Robotica

Solo disponible en BuenasTareas
  • Páginas : 5 (1187 palabras )
  • Descarga(s) : 0
  • Publicado : 1 de diciembre de 2011
Leer documento completo
Vista previa del texto
Control brazo robotico por puerto serie en lenguaje C
Te has preguntado como comunicar turbo C con un microcontrolador por puerto serie?? pues aqui esta la respuesta. El programa funciona para controlar 4 servomotores, se corre el programa desde la pc y se reciben los datos RS232 en un microcontrolador, en este caso se uso la placa arduino, de la cual se anexa el programa y el circuito.
Ambosprogramas estan lo suficientemente comentados para su entendimiento, primero tenemos el programa para turbo C.
view sourceprint?
001.//Se incluyen las librerias necesarias
002.#include <stdio .h>
003.#include <conio .h>
004.#include <string .h>
005.#include <iostream .h>
006.#include <dos .h>
007.  
008.//Se definen constantes que utilizaremos durante elprograma
009.#define ENTER 13
010.#define ESCAPE 27
011.#define PUERTO 0x3E8
012.#define LONG_MAX 1000
013.  
014.//Declaracion de variables a usar
015.char tecla,cont;
016.int pos = 0;
017.int opc;
018.int i = 0,servo=1,angulo=90;
019.int mode=1;
020.char cadena[400];
021.char mensaje[40];
022.  
023.void inicializar();//prototipo de la funcion inicializar
024.  025.//Comienza el programa principal
026.void main(){
027.  clrscr();
028.  inicializar();//llamamos a la funcion inicializar para que prepare el puerto
029.  
030.  cout< <"n Elige un modo de uso: nn (1) Modo guiadon (2) Modo consola (Avanzado)n";
031.  cin>>mode;
032.  
033.  while (tecla != ESCAPE)//Mientras no presionemos escape para salir del programa
034.  {035.    if (mode==1){//Si modo es igual a 1 entrara al modo guiado
036.      //modo guiado
037.setservo:
038.      cout< <"n Elige el servo que deseas mover del 1 al 4n ";
039.      cin>>servo;
040.      if (servo< =0 || servo>=5){//Rango de servos disponible
041.        cout< <"n Fuera del rango";
042.        goto setservo;//Si esta fuera del rango nos regresa ala etiqueta setservo
043.      }
044.      outportb(PUERTO,servo+249);//Manda por el puerto el comando del servo a mover
045.  
046.setangulo:
047.      cout<<"n Elige el angulo deseado de 1 al 180n ";
048.      cin>>angulo;
049.      if (angulo< =0 || angulo>=181){//Rango de angulos disponibles
050.        cout< <"n Fuera del rango";
051.        gotosetangulo;//Si esta fuera del rango nos regresa a la etiqueta setangulo
052.      }
053.  
054.      outportb(PUERTO,angulo);//Manda por el puerto el valor del angulo
055.  
056.        cout<<"nn Deseas realizar otro movimiento? n cualquier tecla para continuar, n para salir ";
057.      cin>>cont;
058.      if (cont==110){
059.        tecla=ESCAPE;
060.      }//si cont es nentonces tecla=ESCAPE y saldra del programa
061.  
062.    }
063.    else if (mode==2) {//Si mode = 2 entrara al modo consola
064.      // modo consola
065.  
066.      if (inportb(PUERTO+5)&1)//Si hay datos en el buffer del puerto
067.      {
068.        for (i=0;((inportb(PUERTO+5)&1)); i++)//Recorre el buffer del puerto
069.        {
070.          cadena[i]=inportb(PUERTO);//guarda cada byte en una cadena
071.          printf("%c",cadena[i]);//Imprime los caracteres en pantalla
072.        }
073.        printf(" ");
074.      }
075.  
076.      if (kbhit())//preguntamos si se presiono alguna tecla
077.      {
078.        tecla = getch();
079.        if (tecla!=ESCAPE && tecla!=8 )//preguntamos si tecla es distinto de escape080.        {
081.          if (tecla==ENTER)//preguntamos si la tecla presionada es un enter
082.          {
083.            mensaje[pos] = tecla;//Guarda la ultima tecla presionada en la ultima posicion de mensaje
084.            printf(" ");
085.            i = 0;
086.            while(mensaje[i]!= ENTER && i < LONG_MAX)//Hasta que se encuentre un enter o espacio en la cadena...
tracking img