Boa tarde galera, estou montando um projeto que preciso conectar 3 dispositivos via serial no Arduino, só que não esta funcionando como eu quero, o programa funciona mas precisa ficar repetindo varias vezes o caracter, e não somente uma como eu quero, olhem:
#include <SoftwareSerial.h>
/* Para que a comunicaçao com o modulo nao interfira na programacao da placa,
criamos uma nova porta serial para ele.
*/
SoftwareSerial portOne(6, 7); // pinos RX/TX para o modulo
SoftwareSerial portTwo(8, 9);
//SoftwareSerial portThree(10,11);
/* Serial 0 --> (6,7)
* Serial 1 --> (8,9)
* Serial 2 --> (10,11)
*/
void setup()
{
Serial.begin(9600); //porta serial (hardware) para monitorar os caracteres enviados
Serial.println("Bluetooth v1.0"); // mensagem de inicializacao
portOne.begin(9600);
portTwo.begin(9600);
//portThree.begin(9600);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
}
void loop()
{
portOne.listen(); //Não sei pq mas tem que ter pra funcionar, (veriricar TwoPortReceive)
Serial.println("Data from port one:");
while (portOne.available()>0){ // Se a serial estiver disponivel, tem caracter para ler
char byteOne = portOne.read(); // salva o caracter lido
Serial.write(byteOne); // escreve o caracter recebido via bluetooth na serial do PC para conferencia
if(byteOne=='A'){
digitalWrite(5, HIGH);
} // Liga Rele 1
if(byteOne=='a'){
digitalWrite(5, LOW);
} // Desliga Rele 1
}
portTwo.listen();
Serial.println("Data from port two:");
while (portTwo.available()>0){ // Se a serial estiver disponivel, tem caracter para ler
char caracter = portTwo.read(); // salva o caracter lido
Serial.write(caracter); // escreve o caracter recebido via bluetooth na serial do PC para conferencia
if(caracter=='B'){
digitalWrite(4, HIGH);
} // Liga Rele 2
if(caracter=='b'){
digitalWrite(4, LOW);
} // Desliga Rele 2
}
}
Alguém saberia me dizer o problema?
Tags:
Conforme a especificação:
https://www.arduino.cc/en/Reference/SoftwareSerial
No trecho:
"If using multiple software serial ports, only one can receive data at a time."
Especifica que apenas uma das seriais pode ler de cada vez.
Se para seu projeto isso torna inviável recomendo trocar por um Mega2560. Ele tem mais portas seriais em hardware.
Acho que é isso.. Vc tem que mandar bem na hora que aquela serial está ligada.
O porta.liste() indica de qual vc ouvirá (e de quais não ouvirá) no momento.
Tem que ser interface serial ?
Ou pode usar as interfaces I2C ou SPI ?
https://www.arduino.cc/en/Reference/Wire
https://www.arduino.cc/en/Reference/SPI
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por