Go Down

Topic: Envio de informação via Serial para outro arduino (Read 3447 times) previous topic - next topic

Antes de mais obrigado a todos.

Tal como disse, sou novato nestas coisas e alguma linguagem passa-me ao lado...
mas vou testar os vários códigos e depois dou o meu feedback.

Mortis


Quote
char Command[100];

  strcpy(Command, Value);

Se passas o vector por parametro porque é que depois o copias para outro array dentro da funçao?
A idea é usalo la dentro nao copia-lo.
Assim comeste mais 100 bytes de RAM para nada.Faz uso dos ponteiros!


HugoPT,

Eu copio o array porque após o strtok eu via apenas "SetSensorParams" exemplo:
Value passado "SetSensorParams(200,300,200)"
Code: [Select]

char *chpt = strtok(Value, "(");


O resultado era
chpt  = "SetSensorParams"
Value = "SetSensorParams"

Farei mais testes e seguirei teus conselhos.

Muitíssimo obrigado.

Mortis


Hmm, acho que nos estamos a deixar levar por dois problemas diferentes.

Desculpem-me, acho que me empolguei e não tinha a intenção de complicar =/

Por favor, voltemos ao problema do tópico:


A única coisa que me preocupa é o efeito que o chip FTDI tem na comunicação... Alguém experimentou os dois códigos?


A qual efeito te referes?


Antes de mais obrigado a todos.

Tal como disse, sou novato nestas coisas e alguma linguagem passa-me ao lado...
mas vou testar os vários códigos e depois dou o meu feedback.


Joaquim, desculpa-me se compliquei muito para ti, o bubulindo esta correto, os códigos que coloco estão muito longe da linguagem de comunicação entre máquinas (estou habituado a programar para Windows  :(), diga-nos o que ocorreu por ai e se podemos ajudar!

Malta após alguns teste eis o que consegui até agora.

No Arduino 1

loop()
{
val = analogRead(0);
Serial.write("T");
Serial.write(val);
delay(1500);
}

No Arduino 2

loop()
{
if ((incomingByte)=='T')
  {
    valor = Serial.read();
    lcd.setCursor(0,1);
    lcd.print(valor);
    }
}

O que acontece é que isto funciona desde que o valor enviado (neste caso val) não seja superior a 255, caso isso aconteça o Arduino 2 lê outro valor
Por exemplo

Arduino 1 - valor enviado -> Arduino 2 - Valor LCD
0 -> 0
1 -> 1
... -> ...
255 -> 255
256 -> 0
257 -> 1
258 -> 2
259 -> 3
260 -> 4
261 -> 5
262 -> 6
263 -> 7
264 -> 8
265 -> 9
266 -> 10
267 -> 11
268 -> 12
269 -> 13
.... - > ....

Ou seja, de 255 em 255 ele reinicia a contagem... :( alguma ideia?


HugoPT

#19
Mar 21, 2013, 05:00 pm Last Edit: Mar 21, 2013, 05:06 pm by HugoPT Reason: 1
Quote
O que acontece é que isto funciona desde que o valor enviado (neste caso val) não seja superior a 255, caso isso aconteça o Arduino 2 lê outro valor
Por exemplo

Arduino 1 - valor enviado -> Arduino 2 - Valor LCD
0 -> 0
1 -> 1

Logico o valor maximo de um byte é 255 no caso de ser unsigned !
Como escreves alem disso ele da a volta e recomeça de 0
Quote
Serial.write(val);

Voltamos a mesma questao.Nao consegues passar o valor todo num só byte!
O valor maximo que pode ser lido no ADC é 1023 ou seja necessitas de no minimo 4 bytes e talvez mais um para usar um caracter terminador
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Quote
O que acontece é que isto funciona desde que o valor enviado (neste caso val) não seja superior a 255, caso isso aconteça o Arduino 2 lê outro valor
Por exemplo

Arduino 1 - valor enviado -> Arduino 2 - Valor LCD
0 -> 0
1 -> 1

Logico o valor maximo de um byte é 255 no caso de ser unsigned !
Como escreves alem disso ele da a volta e recomeça de 0


Ok, e como posso contornar isso?

HugoPT

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Com a resposta que o Bubulindo te postou :smiley-mr-green:



Ok. Já experimentei o código e está funcionar perfeitamente.
Obrigado a todos.  :)

HugoPT

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

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).

Go Up