Robotica
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...
Regístrate para leer el documento completo.