Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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
Poder: 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
  #2  
Antiguo 09-06-2016
ederfcr ederfcr is offline
Registrado
NULL
 
Registrado: jun 2016
Posts: 9
Poder: 0
ederfcr Va por buen camino
Ayuda con el DTR

Que debo hacer para usar el DTR en el codigo? el pin en db9 es el 6 creo, pero en delphi hay algo para modificar y abris y habilitar???

Mi proyecto es validar un usuario por biometria si está registrado enciende luz verde y si no esta registrado enciende luz roja y que ademas si esta registrado abra una puerta, aunque esto ultimo lo puedo obviar.

Gracias por la ayuda.

Eder

Última edición por Casimiro Notevi fecha: 09-06-2016 a las 08:57:11.
Responder Con Cita
  #3  
Antiguo 09-06-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ederfcr Ver Mensaje
Que debo hacer para...
Primero de todo, leer nuestra guía de estilo, gracias y bienvenido
Responder Con Cita
  #4  
Antiguo 09-06-2016
aarmalo aarmalo is offline
Miembro
 
Registrado: mar 2005
Ubicación: México
Posts: 46
Poder: 0
aarmalo Va por buen camino
Cita:
Empezado por ederfcr Ver Mensaje
Que debo hacer para usar el DTR en el codigo? el pin en db9 es el 6 creo, pero en delphi hay algo para modificar y abris y habilitar???

Mi proyecto es validar un usuario por biometria si está registrado enciende luz verde y si no esta registrado enciende luz roja y que ademas si esta registrado abra una puerta, aunque esto ultimo lo puedo obviar.

Gracias por la ayuda.

Eder
No creo que esta sea la mejor opción para tu proyecto y en la actualidad creo que te serviría mejor usar un arduino. Al menos necesitas 3 pines: Luz Roja, Luz Verde y Puerta.

Un ejemplo muy simple del concepto esta en el siguiente código para el arduino:

Código:
char c;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(1,OUTPUT);  //Luz Roja
  pinMode(2,OUTPUT);  //Luz Verde
  pinMode(3,OUTPUT);  //Puerta
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()>0)
  {
    c = Serial.read();
    switch(c) {
      case 'v':
          digitalWrite(2,HIGH);
          digitalWrite(3,HIGH);
          delay(1000);
          digitalWrite(2,LOW);
          digitalWrite(3,LOW);
          break;
      case 'i':
          digitalWrite(1,HIGH);
          delay(1000);
          digitalWrite(1,LOW);
          break;
      default:
          break;
    }
  }
}
Entonces desde tu programa le envías una 'v' para usuario valido o una 'i' para invalido.

Aclaro que este es sólo un ejemplo.
Responder Con Cita
  #5  
Antiguo 17-06-2016
ederfcr ederfcr is offline
Registrado
NULL
 
Registrado: jun 2016
Posts: 9
Poder: 0
ederfcr Va por buen camino
Gracias por el dato

Gracias por la sugerencia. Voy a comprar el Arduino y el código me servirá para programarlo. En ese creo que voy a usar de una vez es comunicación por puerto USB para estar mas en la onda de puertos.

Mil gracias por la prontitud en la respuesta.

EderFCR
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 03:42:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi