Go Down

Topic: Comunicação L2C entre dois arduinos com dados variáveis (Read 1 time) previous topic - next topic

mmoscz

Estou tentando fazer uma comunicação entre dois arduinos através de L2C.
Eles se comunicam, o Mestre envia o comando o escravo recebe e consigo requisitar os dados do escravo pelo mestre.
A dúvida é o seguinte.
Os dados retornados pelo escravo não são fixos, a resposta do escravo pode variar, de 2 a 50 caracteres.
Como a função wire.request precisa da quantidade de caracteres a serem recebidos, estou colocando um comando que ira indicar que o mestre quer
saber quantos caracteres serão recebidos, o escravo responde e depois com uma nova wire.request do mestre o escravo retornaria os dados.
Mas não achei uma maneira de criar um char que fosse dinâmico, então quando no mestre eu usar o wire,avalaible() eu precisava armazenar o retorno em uma váriavel.
Alguém chegou a implementar algo parecido ou vou ter que declarar um char de 255 e tratar o comprimento dos dados recebidos através do número de caracteres recebidos do escravo pelo mestre?
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

bubulindo

Se eu compreendi bem, tu não queres ter 50 e tal bytes perdidos em memória sem saber se vais usá-los ou não. Queres definir o tamanho dum vector em "real time", após saberes qual o tamanho que vais precisar, é isso?

Já viste o malloc(), realloc() e free()??

http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga4996af830ebe744d9678e5251dfd3ebd
http://www.nongnu.org/avr-libc/user-manual/malloc.html
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

mmoscz


Se eu compreendi bem, tu não queres ter 50 e tal bytes perdidos em memória sem saber se vais usá-los ou não. Queres definir o tamanho dum vector em "real time", após saberes qual o tamanho que vais precisar, é isso?
...

Havia me esquecido dessa abordagem.
Vou tentar com isso em vez da forma atual que é com String.











4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

bubulindo


Havia me esquecido dessa abordagem.
Vou tentar com isso em vez da forma atual que é com String.


String... blarghhh.
Não me leves a mal, mas a implementacão da String não é para microcontroladores. Ela ocupa imensa memória e processamento apenas para "poupar" umas linhas de C e apontadores.











[/quote]
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

mmoscz



String... blarghhh.
Não me leves a mal, mas a implementacão da String não é para microcontroladores. Ela ocupa imensa memória e processamento apenas para "poupar" umas linhas de C e apontadores.


Ha ha ha ha ha, estou tentando, mas o downgrade para microcontroladores é bem difícil para quem está acostumado como PHP e DELPHI, a verdade, nem precisaria ser dinâmico, pois sempre posso controlar a transferência das informações em "BLOCOS" como meu controle não precisará controlar em milésimos de segundos as ações a serem tomadas, posso perder alguns ciclos enviando em partes. Era mesmo para saber se existiria algo no meio termo entre a família xxxloc (maloc, freeloc etc) e as Strings.
Pois achei a implementação da biblioteca I2C meio fraca (pois para passar um int tem q transformar em char antes) e todos as implementações que vi na internet parecem superficiais...
PS. Espero estar equivocado quanto a biblioteca I2C
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

fabio_h

#5
Jun 19, 2012, 09:59 pm Last Edit: Jun 19, 2012, 10:01 pm by fabiohbm007 Reason: 1
Entre ficar com "leveza" do reference do arduino e decifrar o datasheet do ATmega, esse cara que faz parte do forum, aborda de forma simples e clara esse assunto:
http://www.gammon.com.au/forum/?id=10896
 



Aqui aborda mais coisas:
http://www.gammon.com.au/forum/bbshowpost.php?bbtopic_id=123    

EDIT: busque por "Broadcasting" na primeira pag que ele aborda a questão do int sendo enviado. 

Go Up