Ver Mensaje Individual
  #6  
Antiguo 25-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Me alegro de que te funcionara, ahora vamos a ver si puedo ayudarte con tus preguntas. Como tu bien dices, si lo que se quiere encender es una luz, lo ideal es una función que lo encienda y otra que lo apague. Pues bien lo primero que tenemos que hacer es declarar la variable hPort como global, y separar la función de arriba en 4:

Código Delphi [-]
var
  hPort: Thandle;

procedure AbrirPuerto(Puerto: String);
var
  DCB: TDCB;
begin
  Puerto:= Uppercase(Puerto);
  // Cambiar esto si es necesario un puerto diferente
  if (Puerto<>'COM1') and (Puerto<>'COM2') then
    exit;
  hPort:= CreateFile(PChar('\\.\'+Puerto), GENERIC_READ or GENERIC_WRITE,0, nil,
    OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if hPort<>INVALID_HANDLE_VALUE then
  begin
    DCB.DCBlength:= sizeof(DCB);
    if GetCommState(hPort,DCB) then
    begin
      with DCB do
      begin
        BaudRate := CBR_9600;
        ByteSize := 8;
        Parity   := NOPARITY;
        StopBits := ONESTOPBIT;
        Flags    := $01;
      end;
      if SetCommState(hPort, DCB) then
        Exit;
    end;
    CloseHandle(hPort);
    hPort:= INVALID_HANDLE_VALUE;
  end;
end;

procedure CerrarPuerto;
begin
  if hPort <> INVALID_HANDLE_VALUE then
  begin
    CloseHandle(hPort);
    hPort:= INVALID_HANDLE_VALUE;
  end;
end;

procedure ActivarRTS;
begin
  if hPort <> INVALID_HANDLE_VALUE then
    EscapeCommFunction(hPort,SETRTS);
end;

procedure DesactivarRTS;
begin
  if hPort <> INVALID_HANDLE_VALUE then
    EscapeCommFunction(hPort,CLRRTS);
end;

Antes de usar el puerto tienes que llamar la función AbrirPuerto y cuando dejes de usarlo CerrarPuerto. Las funciones ActivarRTS y DesactivarRTS hacen lo que parece activar y desactivar RTS, para que funcionen el puerto tiene que estar abierto.

En cuanto a lo de encender mas de una luz podemos utilizar además de la salida RTS la DTR con lo cual ya podemos encender 2 luces utilizando 2 circuitos como el anterior. Utilizando una combinación de ambas podríamos controlar hasta 3, pero si necesitas controlar mas ya seria necesario utilizar algún circuito que pueda establecer una comunicación serie, quizá con un microcontrolador PIC.

Responder Con Cita