Serial.write();

Galera eu tenho um problema, tenho uma variável chamada crc_resto = 1011;

Eu estou fazendo a comunicação entre dois arduinos e quero enviar via serial a letra D e essa variavel crc_resto. Só que parece que ele não está enviado...

Eu faço:

Serial.write('D'); Serial.write(crc_resto);

e no receptor faço:

char Letra; int mensagem;

while(Serial.available() > 0){ Letra = Serial.read(); mensagem = Serial.read(); }

Mas ele não envia nada, logo ele nao recebe, o que eu estou fazendo de errado?

Até pode estar a chegar mas pode não a está a ver. O que acontece se esse caracter não tiver uma correspondência na tabela ASCII? Sabe o que é a tabela ASCII? Se não sabe comece por aí!

Sei sim, estou fazendo um código que calculo o CRC e essa variável recebe meu erro, eu quero envia-la daquele jeito sem transforma-lá em decimal ou outro tipo de variável...

Braic: Sei sim, estou fazendo um código que calculo o CRC e essa variável recebe meu erro, eu quero envia-la daquele jeito sem transforma-lá em decimal ou outro tipo de variável...

1011 são dois bytes. Escrevendo este valor em hexadecimal talvez seja mais fácil de perceber isso. O valor 1011 em hexadecimal é 0x3F3. Sendo assim, este valor corresponde a dois caracteres (de 8 bits cada um). Os caracteres com código ASCII 0x03 e com código ASCII 0xF3. Ambos os caracteres são caracteres especiais e portanto não têm representação física no "Serial Monitor" (não diz nada sobre este assunto, mas assumo que esteja a ver o resultado no "Serial Moritor"). Sendo assim, o código (e a comunicação) pode estar correcto, mas não vai conseguir ver resultado no "Serial Monitor".

Não especificaste tudo, logo vamos tirar algumas coisas a limpo.

Estás a usar um Arduino Mega? Se não estás, como estás a ligar os dois arduinos entre si? Tx para Rx e Rx para Tx?
Sabes que os ARduinos têm o chip que converte para USB e pode não gostar de ter um arduino ligado na mesma linha, correcto?

Como sabes que ele não envia?

O código que fizeste está errado… primeiro queres enviar dois bytes com uma função que envia apenas um byte.
Depois recebes um integer em vez de receberes dois bytes.

A sugestão que o luis deu é a mais correcta… se queres confirmar que estás a receber esse valor nada como fazer um print para o serial monitor e confirmar.

Uma opção para enviar seria:

Serial.write((unsigned char) (variable >> 8) & 0x0F); 
Serial.write((unsigned char) variable & 0x0F);

e para receber:

variable = Serial.read() << 8;

variable = variable + Serial.read();

Mas tu certamente que já sabes tudo isto senão terias entendido o que o luis disse previamente.

while(Serial.available() > 0){ Letra = Serial.read(); mensagem = Serial.read(); }

Relembro-te que isto t também tem uma armadilha.Recebeste o primeiro byte e o loop é percorrido, tomares por garantido que os outros bytes ja estão no buffer é um erro comum.A comunicação serie é lenta e o cpu corre mais rápido.Se usares esse loop dessa forma o primeiro byte vai chegar e loop é percorrido porque satisfaz a condição Serial.available >0 mas ainda so la tens um byte, tentares ler o segundo byte é algo que ainda la não esta devido a velocidade da serie, ele ainda não chegou ... Deves confirmar,esperar, quantos bytes tens no buffer e depois ler essa quantidade, não receber o primeiro e ler tudo de seguida a contar que eles ja la estão.

Bons estudos