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.
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por