Oi, Galera. Por favor, me ajudem a entender...

No loop do exemplo SoftwareSerial,  temos o seguinte:

void loop() // run over and over
{
           if (mySerial.available())
              Serial.write(mySerial.read());
            if (Serial.available())
              mySerial.write(Serial.read());
}

Isto significa que todo o que recebo pelo pin Rx é enviado ao computador e todo o que recebo do computador via USB é enviado fora do Arduino a través do pin TX?

Que tipo de dados posso enviar e receber? Bits, Bytes, strings? 

Vi outro programa que envia e recebe dados seriais "manualmente". Ou seja, o dado serial é enviado bit por bit utilizando uma operação AND e o baud rate desejado é feito com delayMicroseconds (). O programa anterior funciona de um modo semelhante? 

Desde já, obrigado.

Exibições: 1955

Responder esta

Respostas a este tópico

Olá Arhon,

Segue abaixo um exemplo de utilização do SoftwareSerial para duas portas num projeto que estou desenvolvendo, espero que ajude:

Até +,

Milton Vilela

 

#include <SoftwareSerial.h>

#define rx_1Pin 2

#define tx_1Pin 3

#define rx_2Pin 4

#define tx_2Pin 5

// seta as portas seriais

SoftwareSerial mySerial_1 =  SoftwareSerial(rx_1Pin, tx_1Pin);

SoftwareSerial mySerial_2 =  SoftwareSerial(rx_2Pin, tx_2Pin);

void setup()  {

   // define os modos dos pinos para tx, rx:

  

   pinMode(rx_1Pin, INPUT);

   pinMode(tx_1Pin, OUTPUT);

   pinMode(rx_2Pin, INPUT);

   pinMode(tx_2Pin, OUTPUT);

   // seta a frequência das portas

   mySerial_1.begin(9600);

   mySerial_2.begin(9600);

}

void loop() {

  mySerial_1.print("Imprime pela Serial 1");

  mySerial_2.print("Imprime pela Serial 2");

  delay(5000);

  while(true);

}

 

Muito obrigado, Milton. 

Vamos trabalhar com Arduino UNO. Ainda não compramos ele mas sei que tem por defeito dois pinos para transmissão serial (0 é Rx e 1 é Tx). Meu colega vai desenvolver um programa para ler e controlar uma rede ZigBee mediante o computador. A primeira experiencia consiste em enviar desde o computador até o Arduino um caracter ASCII para indicar que um frame API deve ser enviado a um módulo XBee. A chegada de um caracter ‘H’ faz ao Arduino enviar pelo pin 1 (Tx) um frame adequado para ligar um LED conectado no pin 19 do módulo XBee. A chegada de um caracter ‘L’ envia um outro frame que fará desligar o LED.

Compilei o seguinte código. O que acha? Será que vai enviar o frame? Outra dúvida que tenho é se a instrução Serial.write enviará o array pelo pin 1 (Tx) para fora do Arduino ou pela conexão USB de volta ao PC ou ambas coisas acontecerão. 

byte Liga_LED_Array[] = {0x7e,0x00,0x10,0x17,0x01,0x00,0x13,0xA2,0x00,0x40,0x61,0x18,0x4B,0xFF,0xFE,0x02,0x44,0x31,0x05,0xB5};
byte Desliga_LED_Array[] = {0x7e,0x00,0x10,0x17,0x01,0x00,0x13,0xA2,0x00,0x40,0x61,0x18,0x4B,0xFF,0xFE,0x02,0x44,0x31,0x04,0xB6};


void setup() {
// initialize serial communication:
Serial.begin(9600);
}

void loop()
{
if (Serial.available())
{
if (Serial.read()=='H')
{
Serial.write(Liga_LED_Array,20);
delay(1000);
}
if (Serial.read()=='L')
{
Serial.write(Desliga_LED_Array,20);
delay(1000);
}
}
}

Desde já muito obrigado.

Olá Arhon,

A experiência que tenho utilizando SoftwareSerial é que a instrução Serial.write envia a informação para Tx e estando conectado pela USB a informação vai também para o PC.

É melhor você testar o projeto com um Arduino ligado ao módulo XBee, vai acelerar o desenvolvimento como um todo.

Muito obrigado pela resposta. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço