AJUDA COM PINOS TX / RX

Bom, estou atrás a algum tempo de algo sobre e não tendo encontrado exatamente do que preciso decide criar o seguinte tópico visto que sou iniciante e encontro dificuldades.

O problema está que eu gostaria de aprender a manipular(via instruções em software especificamente) os pinos tx/rx, utilizo dois arduinos uno e o que desejo fazer é o seguinte:
possuo dois arduino uno como já disse , e dois módulos RF TWS-BS3(emissor e receptor) e o que pretendo é uma comunicação duplex(ou seja, bidirecional), pq não utilizo o Xbee? minha escola adiquiriu 3 kits mas infelizmente não funcionam mais e não pretendo mais gastar dinheiro visto que a cota necessária ao projeto já está estourada, enfim... o que estou querendo é saber que instruções via software posso utilizar para enviar via pino tx em um arduino e receber no pino rx do outro arduino, gostaria de armazenar está informação enviada, que no caso seria um número, já localizei diversos softwares à respeito mais nenhum conseguiu fazer a comunicação que pretendo. gostaria de saber de coisas como: iniciação da porta serial, baudrate, comando de envio, os comandos de recebimento, bibliotecas, como especificar os pinos no void setup, como utilizá-las como entrada ou saída, que tipo de variável utilizá-la para armazenamento da informação, ou seja, o software especificamente de envio e recepção pois não estou conseguindo fazer tal coisa , se alguém puder ajudar desde já obrigado

Muitas perguntas... E não entendi o que o RF TWS-BS3 tem haver com tudo o que você perguntou.

rogeriofne:
o que estou querendo é saber que instruções via software posso utilizar para enviar via pino tx em um arduino e receber no pino rx do outro arduino

É só ligar o TX do primeiro arduino no RX do outro e RX do primeiro arduino no TX do outro.

rogeriofne:
gostaria de armazenar está informação enviada, que no caso seria um número, já localizei diversos softwares à respeito mais nenhum conseguiu fazer a comunicação que pretendo.

Se você vai receber um número entre 0-255, isto é um byte. Se você for enviar números entre 0-65535 aí são 2 bytes(é o tipo int). Precisa fazer manipulação de bytes para conseguir mandar os 2 bytes necessários. E assim por diante(o long por exemplo vai até 2 milhões e precisa de 4 bytes). Em http://arduino.cc/en/Reference/VariableDeclaration, no final tem alguns tipos de variáveis que o arduino tem implementado. Eu fiz uma "função" para enviar um float(que são 4 bytes) via serial:

uint8_t payload[4] = {};
void addToPayload(float f) {
  byte * b = (byte *) &f;
  uint8_t payloadPointer = 0;
  payload[payloadPointer++] = b[0];
  payload[payloadPointer++] = b[1];
  payload[payloadPointer++] = b[2];
  payload[payloadPointer++] = b[3];
}

Depois vc precisa receber isto do outro lado e fazer o inverso(transformar os 4 bytes recebidos em float novamente). Vou deixar isto como exercício para vc.

Para receber 6 bytes do outro lado:

if (Serial.available() == 6) { // Eu recebi 6 bytes de dados?
  byte ch[6];
  for (int i=0; i<6; i++) {
    ch[i]=Serial.read(); // Aqui você pega efetivamente 1 byte por vêz dos 6 que vc recebeu
  }                            // Agora você tem um array com os 6 bytes que mandou do outro arduino
}

rogeriofne:
iniciação da porta serial, baudrate, comando de envio, os comandos de recebimento, bibliotecas, como especificar os pinos no void setup.

Iniciar porta serial, baudrate, vc coloca no setup() o Serial.begin(BAUDRATE). Por exemplo Serial.begin(9600) vc inicializa o serial em 9600 bps. Precisa fazer isto nos 2 arduinos para usar o mesmo baudrate. Para enviar, você faz Serial.print("Hello World!") ou Serial.println("Hello World!") a diferença entre os 2 é que o último manda um \r\n(que é o "pular linha").

O que eu quero com o RF neste projeto é exatamente comunicação à distância sem uso de cabo, exatamente como você está fazendo , conectando ambos rx's nos tx's, quero passar essas informações que no caso são 8 bits(1 byte) via RF, o que eu quero exatamente são as instruções que utilizo para manipular esse tipo de envio que não domino nada à respeito, a biblioteca virtualwire pelo que dei uma olhada fornece estes comandos, no entanto, não entendo e não domino por isso meu problema.

Não conheço a biblioteca e nem este dispositivo RF então fico te devendo essa. Vamos ver se alguém no fórum possa te dar uma luz.

Eu consegui fazer a comunicação com os seguintes programas:

Emissor:

#include <VirtualWire.h>
void setup()
{
vw_setup(2000);
extern void vw_set_tx_pin(uint8_t pin12);

}

void loop()
{
const char *msg = "TESTE";
vw_send((uint8_t *)msg, strlen(msg));
delay(400);
}

RECEPTOR:

#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("setup");
vw_setup(2000);
extern void vw_set_rx_pin(uint8_t pin11);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
Serial.print(buf*, BYTE);*

  • Serial.print(" ");*
  • }*
  • Serial.println("");*
  • }*
    }
    só que o problema é que eu gostaria de saber como enviar uma variável inteira, não uma frase como no programa <<vw_send((uint8_t *)msg, strlen(msg));>>
    O problema é que eu não sei manipular algumas instruções que estão no programa e gostaria de alterá-lo para fazer tal função, se alguém puder ajudar desde já agradeço

resumindo oq eu quero apartir dos programas acima:

enviar o valor de uma variável do tipo inteiro e receber este valor em uma outra variável no programa receptor.

Neste post é um método:

aproveite e dê uma lida no topico inteiro...

e ainda esse:
http://todbot.com/blog/2009/07/30/arduino-serial-protocol-design-patterns/