24/08/2004

teclas pela porta paralela

pessoal,

tem como ou alguem já vez deteção de teclas pela porta paralela???
exemplo vc colocar um botão e for detectado quando esse botão for pressionado... por acaso tem como fazer isso???

se tiver seria possivel ir mais alem e criar tipo um teclado???


Mrcdlf

Respostas

24/08/2004

Ursula

eu nao sei se entendi , mais vai uma dica

Os exemplos abaixo demonstram como formatar a string de controle em diversas linguagens de programação, para comandar a placa de controle de acessos.
Todos os exemplos abaixo ligam o canal (05) por 25 segundos. Após decorrido esse tempo, o canal é desligado automaticamente pela microcontrolador da placa.



Exemplo em DELPHI e PASCAL:

´CMD05#1025:´ + chr(13) + chr(10);



Exemplo em VISUAL BASIC:
´CMD051025:´ & chr(13) & chr(10)


Exemplo em C/C++, C e JAVA:

´CMD051025:\r\n´;


Os cararteres CR (Crrier Return) ou Retorno de Carro, e LF (Line Feed) ou nova linha, são codificados
de várias formas nas diversas linguagens de programação. As linguagens C/C++, C e Java representam o CR como ´\r´ e o LF como ´\n´. Já no Visual Basic, Delphi e Pascal o caracter CR é representado através do comando chr(13) e o LF pelo comando chr(10).
Na tabela ASCII o CR é representado pelo número 13 e o LF pelo número 10.

Mais exemplos

Em DELPHI:

´CMD05#0000:´ + chr(13) + chr(10);
O comando acima desliga o canal 05.

´CMD081001:´ + chr(13) + chr(10);
O comando acima mantem o canal 08 ligado por 1 segundo.

´CMD071000:´ + chr(13) + chr(10);
O comando acima liga o canal 07 sem temporalizá-lo 000.

´CMD091000:´ + chr(13) + chr(10);
O comando acima acende o LED verde do teclado 1.

´CMD090000:´ + chr(13) + chr(10);
O comando acima apaga o LED verde do teclado 1.

´CMD161000:´ + chr(13) + chr(10);
O comando acima acende o LED verde do teclado 8.

´CMD160000:´ + chr(13) + chr(10);
O comando acima apaga o LED verde do teclado 8.

Obs.: Os LEDs dos teclados são controlados pela própria placa quando uma porta é aberta ou fechada.
Não há necessidade de se enviar comandos para controlá-los via software, a não ser que se deseje fazer testes ou manter-los piscando por algum motivo de alerta.



Código exemplo em Delphi para separar os comandos da string de controle:

Var
StrComandos : String;
InicioStr : String;
Teclado7 : String;
HaTeclaPress : String;
Sensores : String;
TecConectado: String;
FimStr : String;
StrValida : String;
IntSensores : Integer;
IntTecConectado : Integer;
Begin

StrComandos := ´T08#91064001:´; //Armazena numa variável a string capturada pela Porta Serial.

InicioStr := Copy(StrComandos, 1, 3); //Obtém os 3 caracteres ´T08´ da string.
Teclado7 := Copy(StrComandos, 10, 1); //Obtém a tecla pressionada no teclado 7.
HaTeclaPress := Copy(StrComandos, 12, 1); //Pega info. se há tecla pressionada (1 ou 0).
Sensores := Copy(StrComandos, 13, 3); //Pega info. sobre os sensores.
TecConectado := Copy(StrComandos, 16, 3); //Pega info. sobre teclados conectados.
FimStr := Copy(StrComandos, 19, 1); //Obtém o caracter ´:´ na posição 19.

StrValida := InicioStr + FimStr; //Concatena as strings formando ´T08:´
IntSensores := StrToInt(Sensores); //Converte string para número.
IntTecConectado := StrToInt(TecConectado); //Converte string para número.
End;

Obs.: A função copy() extrai uma substring de uma string. A função StrToInt() converte uma string de caracteres númericos em um número inteiro.


Código exemplo em C++Builder para separar os comandos da string de controle:

String StrComandos;
unsigned int IntSensores;
unsigned int IntTecConectado;

StrComandos = ´T08#91064001:´; //Armazena numa variável a string capturada pela Porta Serial.

String InicioStr = StrComandos.SubString(1, 3); //Obtém os 3 caracteres ´T08´ da string.
String Teclado7 = StrComandos.SubString(10, 1); //Obtém a tecla pressionada no teclado 7.
String HaTeclaPress = StrComandos.SubString(12, 1); //Pega info. se há tecla pressionada (1 ou 0).
String Sensores = StrComandos.SubString(13, 3); //Pega info. sobre os sensores.
String TecConectado = StrComandos.SubString(16, 3); //Pega info. sobre teclados conectados.
String FimStr = StrComandos.SubString(19, 1); //Obtém o caracter ´:´ na posição 19.

String StrValida = InicioStr + FimStr; //Concatena as strings formando ´T08:´
IntSensores = StrToInt(Sensores); //Converte string para número.
IntTecConectado = StrToInt(TecConectado); //Converte string para número.


Obs.: A função SubString() extrai uma substring de uma string. A função StrToInt() converte uma
string de caracteres númericos em um número inteiro.

Em DELPHI:

if (IntSensores AND 128) = 128 then //Verifica se o sensor 8 está ligado.
Label1.Caption := ´Sensor 8 ligado´ //Porta fechada.
else
Label1.Caption := ´Sensor 8 dsligado´ //Porta aberta.

if (IntSensores AND 32) = 32 then //Verifica se o sensor 6 está ligado.
Label1.Caption := ´Sensor 6 ligado´ //Porta fechada.
else
Label1.Caption := ´Sensor 6 dsligado´ //Porta aberta.




Vai ai alguns sites interesantes::::
http://www.developers.demon.co.uk/serial.html
http://www.traverse.com/people/poinsett/bcbcomm.html
http://www.cpcug.org/user/clemenzi/technical/Languages/SerialIO.htm#references
http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html
http://www.sc-systems.com/products/serialport/serialport.htm (Java)
http://www.jcontrol.org/cgi-bin/makeframes.pl?http://www.jcontrol.org/tutorials/de/rs232.html (Java)
http://www.codeguru.com/Cpp/I-N/network/serialcommunications/article.php/c2483 (Visual C++)
http://www.ontrak.net/linux.htm (C / LINUX)
http://msdn.microsoft.com/msdnmag/issues/02/10/netserialcomm/ (C#)
http://www.macoratti.net/vbserial.htm (Visual Basic)
http://www.codeworks.it/net/VBNetRs232.htm (VB.NET)
http://www.arcelect.com/rs232.htm
http://www.beyondlogic.org/serial/serial.htm
http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html
http://www.poli.org/LDP-PT/HOWTO/Serial-HOWTO/Serial-HOWTO.htmltoc14
http://venus.rdc.puc-rio.br/rmano/interfac.html
http://support.microsoft.com/default.aspx?scid=kb;en-us;823179&Product=vb6

espero ter ajudado
Ursula Sobrinho


Responder Citar

25/08/2004

Oscar Candido

Existe um componente chamdo IOport que acessa as portas paralelas podendo ler ou escrever de forma bem simples.
Mas se vc usa o Windows XP ele não funciona bem, já ouvi dixer que tem algo a ver com a proteção que ele faz para as portas, e que existe uma forma de inibir essa proteção atraves de um software.
Espero ter ajudado


Responder Citar