Go Down

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

joaquim_lopes

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!

joaquim_lopes

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

joaquim_lopes


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

joaquim_lopes


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

bubulindo

This... is a hobby.

Go Up