 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
jomanber Invitado
|
Publicado: Jue 16 Mar, 2006 11:32 am Asunto: Programación del puerto serie |
|
|
Hola a todos, soy nuevo en esto pero han aconsejado que utilize Builder C++para comunicar un circuito microcontrolador con el PC. El problema es que no tengo ni idea de como trabaja builder. Me he gastado una pasta en un libro de Builder C++, pero es un mero manual de uso que explica que hace cada función pero no de como utilizarlas.
Agradecería si alguien pudiera echarme una mano y decirme donde puedo encontrar información que me sirva para introducirme en el mundo de Builder C++. Así como que librerías puedo utilizar para la comunicación con el puerto serie del PC.
Un Saludo y gracias. |
|
| Volver arriba |
|
 |
Jin Invitado
|
Publicado: Mie 22 Mar, 2006 5:36 pm Asunto: Re: Programación del puerto serie |
|
|
hola
dame tu e-mail asi juntamos lo que tenemos. el mio es eltjin@yahoo.com
| jomanber escribió: | Hola a todos, soy nuevo en esto pero han aconsejado que utilize Builder C++para comunicar un circuito microcontrolador con el PC. El problema es que no tengo ni idea de como trabaja builder. Me he gastado una pasta en un libro de Builder C++, pero es un mero manual de uso que explica que hace cada función pero no de como utilizarlas.
Agradecería si alguien pudiera echarme una mano y decirme donde puedo encontrar información que me sirva para introducirme en el mundo de Builder C++. Así como que librerías puedo utilizar para la comunicación con el puerto serie del PC.
Un Saludo y gracias. |
|
|
| Volver arriba |
|
 |
Miguel Angel Torres Master


Registrado: 23 Abr 2006Mensajes: 282Ubicación: Siegen, Alemania
|
Publicado: Mar 09 May, 2006 4:38 am Asunto: Solucion.... |
|
|
Aquí va la solucion para el serial
Clase del Serial
| Código: |
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class TRead : public TThread
{
private:
protected:
void __fastcall DisplayIt(void);
void __fastcall Execute();
public:
__fastcall TRead(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif
|
El .cpp del serial
| Código: |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
extern HANDLE hComm;
char InBuff[100];
#pragma package(smart_init)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TRead::TRead(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TRead::DisplayIt()
{
//En esta parte se hace la captura el dato q llega
unsigned char x=*InBuff; //lo declaro asi para que este entre 0 y 255
}
void __fastcall TRead::Execute()
{
DWORD dwBytesRead;
FreeOnTerminate = true;
while(1)
{
// LEE DEL PUERTO SERIE
// Y SI HAY ALGO LO VISUALIZA
ReadFile(hComm, InBuff, 50, &dwBytesRead, NULL);
if(dwBytesRead)
{
InBuff[dwBytesRead] = 0;
Synchronize(DisplayIt);
}
}
}
//----------------------------------------------------------
|
En la principal tienes que declarar lo siguiente, lo pones mejor el publico:
| Código: |
HANDLE hComm = NULL;
TRead *ReadThread;
COMMTIMEOUTS ctmoNew = {0}, ctmoOld;
|
Luego en un boton o en el create de la forma incializas la serial con esto, "revisar q esta en com1, con 4800 baudios, 8 bits, sin paridad, y 1 bit de parada", con las seriales de pic-c funciona perfectamente:
| Código: |
DCB dcbCommPort;
// ABRE EL PUERTO
hComm = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
// SI EL PUERTO NO PUEDE ABRIRSE ...
if(hComm == INVALID_HANDLE_VALUE) Application->Terminate();
GetCommTimeouts(hComm,&ctmoOld);
ctmoNew.ReadTotalTimeoutConstant = 0;
ctmoNew.ReadTotalTimeoutMultiplier = 0;
ctmoNew.WriteTotalTimeoutMultiplier = 0;
ctmoNew.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hComm, &ctmoNew);
dcbCommPort.DCBlength = sizeof(DCB);
GetCommState(hComm, &dcbCommPort);
BuildCommDCB("4800,N,8,1", &dcbCommPort);
SetCommState(hComm, &dcbCommPort);
ReadThread = new TRead(false);
|
y en otro boton o en el form-close cierras la serial
| Código: |
TransmitCommChar(hComm,0);
Sleep(250);
PurgeComm(hComm, PURGE_RXABORT);
SetCommTimeouts(hComm, &ctmoOld);
CloseHandle(hComm);
|
Para enviar la info usas la funcion:
| Código: |
TransmitCommChar(hComm,"Aqui lo que vas a enviar");
|
Esto te servira de mucha ayuda y funciona realmente por ya lo he usado muchas veces en distintos proyectos. Si tienes algun problema creando el .h y .cpp del serial es mejor que en la opciones de nuevo pongas TThread y metas el código q te envie ahí. Suerte...., ahhh y las preguntas de hacen en consultas para una próxima y revisa tambien en buscar, a veces uno no encuentra tal y como lo busca, pero es muy probable q ahi esté, eso se lo aprendi a CESAR, chau _________________ Entre más sé, sé que nada sé
----------------------------------
Miguel Angel Torres Arredondo
Siegen - Deutschland |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|