Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

grcoelho

Procedures (Delphi 7)

Recommended Posts

Olá pessoal.

Estou começando no delphi, e estou com um probleminha que ninguem conseguiu me ajudar.

Estou precisando enviar dados via serial para controlar um robo. Instalei o TCOMPort e to modificando o exemplo que vem para fazer o que preciso.

Só que no exemplo existem botoes para abrir a serial, fechar e enviar dados.

No meu programa eu preciso que ele envie DIRETO dados pela serial...

 

Assim..

Se nada for enviado ele envia zeros pela serial...

Se alguem apertar um botão ele envia um comando..

Soltou o botão ele volta a enviar zeros....

 

O problema é que eu nao acho como colocar a função send em um procedure de forma que seja sempre executado

Tipo:

- Algum botão foi apertado. Vá ao procedure e defina um valor para robo.

- se nada foi apertado faça robo:=0

- envie robo pela serial.

 

Não sei se me fiz entender, mais é +- isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se usar um Timer para enviar os zeros o tempo todo e cancelar o timer enquanto o botão está pressionado não resolve?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez, tenho medo de que assim ele so envie o comando deste botão.

Tipo, eu acionei um botão, e depois o outro. Ele vai detectar isso e enviar a mensagem dos dois botoes ?

 

Em microcontroladores fazemos o seguinte. A cada ciclo ele le os botões e envia os dados via serial. Como são alguns Mhz é como se ele tivesse sempre lendo e enviando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, a idéia do timer é executar a cada X tempo (que você configura) alguma procedure ou sequência de comandos que você pode definir nele... e se você parar o timer enquanto executa algum comando com o botão e reiniciá-lo depois, o programa poderia enviar só os comandos do botão por exemplo... mas seria melhor você explicar mais o que deseja fazer (com um exemplo talvez mais prático) para que o pessoal possa auxiliar com idéias.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então.

Eu to usando modulos RF prontos ligados a porta serial e ao meu robo. Para o sistema funcionar eu preciso ficar direto enviando dados por ele, seja para o robo ficar parado seja para executar um comando. Isso ocorre pois os modulos colocam alguns codigos para sinalizar inicio e termino dos dados. Dai se eu enviar uma vez só o robo nao entende por causa desses sinais. A solução é enviar direto, dai esses sinais nao atrapalham mais.

 

A ideia é controlar 3 robos com o pc. fiz um form lá com as velocidades e alguns botoes (Frente, ré, direita, esquerda) para cada robo. Quando algum dos botoes for apertado o delphi tem que interromper o envio de dados, atualizar as variaveis e continuar enviando.

 

você tem algum exemplo da implementação do timer ? Se eu conseguir que ele envie antes de o modulo colocar o sinal de final funcionaria sim.. Claro se o delphi der conta de atualizar as variaveis no intervalo que o timer nao executa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum.. cara eu tenho um TCOmport.. mas não sei se é o mesmo componente que ovcê usa... mas isso não vem ao caso, é so um comentario.. hehe .. faz que nem oChrnos falou, coloca um TTImer e utilize uma variavel para controlar o fluxo

 

mais ou menos assim

 

var
	 enviar : integer = 0; //quando for "0", escreve char(0), quando for "1" escreve o comando x, quando for "2"  escreve o comando Y ...

no seu botão "a" coloque

 

enviar := 1;

no seu botão "2" coloque

enviar := 2;

faça isso nos seu botões que tiver no form

e no seu TTimer faça o seguinte

 

if (enviar = 1) then
begin
	ComPort1.WriteText('comando 1');
	enviar := 0;
end
else if (enviar = 2) then
begin
	ComPort1.WriteText('comando2');
	enviar := 0;
end
else if ...


...
end
else
begin
	ComPort1.WriteText(char(0));
end;

 

Espero que ajude

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui fazer o timer sem problemas...

So achei que ficou meio lento. Coloquei um envio a cada 20ms e 10ms.. o pc sentiu...

 

 

Fora isso detectei mais um problema..

Se eu clico no botão e seguro ele envia so uma vez, enquanto deveria enviar enquanto eu seguro o botão, tem como mudar isso ?

Outra coisa que talvez influa também. Eu gostaria de controlar isso pelo teclado, existe algum meio de os botoes do teclado substituirem os botoes dos formularios ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ow, utilize uma variavel

 

var
	Valor: enviar : integer = 0;

no evento "onMouseDown " do seu botão coloque

enviar := 1; //ou o valor que será enviado

e no evendo "onMouseUp" do seu botão coloque

 

enviar := 0;//

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.