grcoelho 0 Denunciar post Postado Julho 6, 2009 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
Chrnos 30 Denunciar post Postado Julho 7, 2009 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
grcoelho 0 Denunciar post Postado Julho 8, 2009 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
Chrnos 30 Denunciar post Postado Julho 8, 2009 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
grcoelho 0 Denunciar post Postado Julho 8, 2009 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
Raficcha 1 Denunciar post Postado Julho 8, 2009 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
grcoelho 0 Denunciar post Postado Julho 9, 2009 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
Raficcha 1 Denunciar post Postado Julho 9, 2009 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