fabim Postado Fevereiro 23, 2007 Denunciar Share Postado Fevereiro 23, 2007 Ola a todos. Bom pessoal, eu trabalho com pascal mais para microcontroladores. Para Pc eu uso o delphi, pois usa uma linguagem que já fuço bem. Minha dúvida é o seguinte. Eu estou fazendo uma comunicação pela usb com um Uc Pid com usb. Em determinados momentos o PC vai receber uma array de até 64 bytes que são todos caracteres válidos.. Aí entra o que da Kestão.rs. Como converter uma array independente de of byte ou char... para string e apresentar em uma memo ou edit... Se for byte a byte tudo bem... mais eu queria que me ajudassem em um function que já fizesse isso. Obrigado a todos. Fabim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 23, 2007 Denunciar Share Postado Fevereiro 23, 2007 ...Minha dúvida é o seguinte. Eu estou fazendo uma comunicação pela usb com um Uc Pid com usb. Em determinados momentos o PC vai receber uma array de até 64 bytes que são todos caracteres válidos.. Aí entra o que da Kestão.rs. Como converter uma array independente de of byte ou char... para string e apresentar em uma memo ou edit... Se for byte a byte tudo bem... mais eu queria que me ajudassem em um function que já fizesse isso.Acredito não seja muito problemático.Uma coisa a levar em conta é se nesta sequência, poderá estar incluso um caracter nulo(#0). Como este caracter é terminador de string, ao aparecer na sequência, uma simples conversão (que é fácil de obter) resultaria numa string truncada. Neste caso, acho que o mais conveniente seria a apresentação da sequência no formato hexadecimal (como vemos em alguns sistemas similares).No caso de seu array of byte não conter nulo em qualquer posição, não é necessário nem criar uma função para isto, basta que você faça algo como:var Buffer :array[1..64] of byte; Txt :String; Idx :Integer; begin // inicializando para gerar o exemplo for Idx := 1 to 64 do Buffer[Idx] := 42+Idx; // e demonstrando como transformar o array of byte em PChar (essa a parte que lhe interessa) Txt := PChar(@Buffer)+#0; // Mostrando o texto convertido - você pode concatenar, adicionar a memo // qualquer coisa apenas utilizando PChar(@Buffer)+#0 (não necessita da variável) ShowMessage(Txt) end;Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fabim Postado Fevereiro 26, 2007 Autor Denunciar Share Postado Fevereiro 26, 2007 Opa. Desculpe pela demora.. Obrigado MICHEUS. Fiquei virando o PC uzio de ponta cabeça.. mais a lógica num deu muito certo não. Pra ageitar o bufferout eu faço assim. pra pegar as strings eu uso um edit. txt : string. bufferout : array[1..64] of byte. n : byte; while n < length(txt)+1 do begin bufferout[n] := ord(txt[n]); inc(n) end; E pra receber eu uso a logica contraria disso. Tentei usar o Pchar..... mais ele não retorna nenhuma string valida.. Obrigado pela atenção Abraços Fabim OBS. Quem gosta de tunning ou fazer uns case com mostrador digital ou comunicação que seja usando microcontroladores pic de 12C a 30F.. tamos aí pra ajudar no que quizerem. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Fevereiro 26, 2007 Denunciar Share Postado Fevereiro 26, 2007 OpaComo vem os dados para você, exemplo, você pega eles atravésde alguma função certo, se possível poste como você pega os dadosPassando como você recupera os dados da porta USB, talvez peloformato em que os dados são passados ou a maneira fica maisfácil de te ajudar!abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fabim Postado Fevereiro 26, 2007 Autor Denunciar Share Postado Fevereiro 26, 2007 OpaComo vem os dados para você, exemplo, você pega eles atravésde alguma função certo, se possível poste como você pega os dadosPassando como você recupera os dados da porta USB, talvez peloformato em que os dados são passados ou a maneira fica maisfácil de te ajudar!abraço beleza. Acho miózio postar um link com o fonte para o delphi.. Assim fica mais fácil entender o funcionamente do menino. Tem algumas coisas doidas, mais descartem, foi uns testes que eu fiz. ó o linkio. www.proenergysafety.com.br/arquivos/projetos/delphihid.rar Só baixar e se puder me dar um help.. abração Fabim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 26, 2007 Denunciar Share Postado Fevereiro 26, 2007 txt : string. bufferout : array[1..64] of byte. n : byte; while n < length(txt)+1 do begin bufferout[n] := ord(txt[n]); inc(n) end; E pra receber eu uso a logica contraria disso. Tentei usar o Pchar..... mais ele não retorna nenhuma string valida..O uso do PChar como lhe propus é justamente para não ter nada de loop:na Saída FillChar(BufferOut, SizeOf(BufferOut), 0); // inicializa buffer com #0 ou 0 StrPLCopy(@BufferOut, Edit1.Text, SizeOf(BufferOut)); na Entrada: Edit1.Text := PChar(@BufferIn)+#0;Não é isso que você disse estar querendo fazer?Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fabim Postado Fevereiro 26, 2007 Autor Denunciar Share Postado Fevereiro 26, 2007 é isso mesmo micheus.. Na saida de str pra byte... preencho o bufferout com o numero de strings validas no edit1.txt.. No evento de entrada.. Pchar......... Só que na caixa que apresenta dos dados recebidos.. não aparece nada.. se eu fizer byte a byte.. aí funciona.. De uma bizoiada na procerure button7.. e na função hid event na ultima função... vai entender o que eu estou dizendo.. Baixe o fonte por favor. esta no post à cima.. Abração :) Fabim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 26, 2007 Denunciar Share Postado Fevereiro 26, 2007 De uma bizoiada na procerure button7.. e na função hid event na ultima função... vai entender o que eu estou dizendo..procedure TForm1.Button7Click(Sender: TObject); var txt : string; m : cardinal; n,b : byte; begin //se a cacha de secagem "selecionada" sai if checkbox1.Checked = true then exit; //se a caixa com digitos = nada sai if Edit1.Text = ('') then exit; //string txt = a caixa com digitos a serem //transmitidos txt := Edit1.Text; //limpacontador n n := 0; // enquanto n for menor ou igual a quantidade de // strings validas de txt faz while n <= length(txt) do begin FBufferout[n] := ord(txt[n]); inc(n) end; // byte 0 do buffer out sempre 0 FBufferout[0] := 0; m := gethandle(Vendor_Id, Product_Id); write(m,@FBufferout); //limpa string txt txt := (''); Edit1.Text := (''); // responsavel por limpar o bufferout // para que não envie dados antigos n:= 0; while n <= BufferOutSize do begin FBufferOut[n] := 0; inc(n); end; end; Aqui você tem um problema a resolver. Se o byte 0 (zero) do buffer out é sempre 0 (zero), o primeiro caracter que você moveu de txt é perdido! Acredito que você tenha que adicionar 1 ao indexador do buffer (FBufferOut[n +1]) também, troquen:= 0; while n <= BufferOutSize do begin FBufferOut[n] := 0; inc(n); end; porFillChar(FBufferOut, SizeOf(FBufferOut), 0)Só que na caixa que apresenta dos dados recebidos.. não aparece nada.. se eu fizer byte a byte.. aí funciona..Se no buffer de entrada a posição 0 (zero), também, tem sempre o valor 0 (zero) então não vai funcionar mesmo. É como citei em minha primeira resposta: 'Uma coisa a levar em conta é se nesta sequência, poderá estar incluso um caracter nulo(#0)...'. Mas se, e somente se, o primeiro caracter vier com o 0 (zero), você ainda poderá fazer desta forma:na Saída FillChar(BufferOut, SizeOf(BufferOut), 0); // inicializa buffer com #0 ou 0 StrPLCopy(@BufferOut[1], Edit1.Text, SizeOf(BufferOut) -1); na Entrada: Edit1.Text := PChar(@BufferIn[1])+#0;Estamos pulando o caracter 0 (zero) que está na posição 0 (zero) do seu buffer.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fabim Postado Fevereiro 27, 2007 Autor Denunciar Share Postado Fevereiro 27, 2007 agora funfou :) ..... Brigadão Micheus. vlw merrrrmo. Agóra so apanhar de outras lógicas. :) . Pascal pra Ucontroladores é uma sopa, mais pra PC.. hummm.rs Quando eu preciso dar um cabiocó na logica do pascal pra uControladores eu abro um ASM modifico os bytes acerto o que eu quero e End; Mais pro delphi é complicado rss. Abração e obrigado a todos que me ajudaram nos meus 1.0^-32 % de aprendizagem do delphi.rs áá.. Agora eu sei porque meus amigos diziam pra eu comprar a biblia do delphi. Rapaz que tamãe de livro. :) Fabim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fabim Postado Fevereiro 28, 2007 Autor Denunciar Share Postado Fevereiro 28, 2007 Pessoal. Aproveitando o Post e a paciência dos amigos. O circuito usando a USB do PIC18F4455, em questão, o qual eu já consegui fazer funcionar belezerinha. Seguinte o circuito é para uma bateria eletronica, que estou montando para meu irmãozinho, funciona assim. 64 bytes ou 32 que seja.. Toda vez que acontece um evento na usb o programa da uma paradinha trata o que chegou executa e pinba. No meu caso eu tenho 63 sons reais de bateria de ótima qualidade, os sons variam de 1,2 a 3,8Segundos. quando chega dados eu dou uma zoiada byte a byte, se diferente de 0 intão eu executo um som wave ou crio um evento de keybd, para usar outros sintetizadores que tem por aí. Meu problema é que por exemplo executo o bumbo(usando o MP do delphi), quando acontece outro evento do prato por exemplo e executo o wave prato, o som do bumbo não continua. Ele para e o som executado é o do prato.. alguém poderia me dar uma força neste pepino ? Pelo que eu entendi, eu tenho que fazer uma interpolação de dados, tipo.. som prato = 3 segundos(length), se 1.8S eu executo o surdo o programa pega o ponto atual do prato 1.8S e soma deste ponto pra frente com o som do surto e play.. Estou correto? Fabim. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
fabim
Ola a todos.
Bom pessoal, eu trabalho com pascal mais para microcontroladores. Para Pc eu uso o delphi, pois
usa uma linguagem que já fuço bem.
Minha dúvida é o seguinte.
Eu estou fazendo uma comunicação pela usb com um Uc Pid com usb.
Em determinados momentos o PC vai receber uma array de até 64 bytes que são todos caracteres válidos..
Aí entra o que da Kestão.rs.
Como converter uma array independente de of byte ou char... para string e apresentar em uma memo ou edit...
Se for byte a byte tudo bem... mais eu queria que me ajudassem em um function que já fizesse isso.
Obrigado a todos.
Fabim
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.