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?

Exibições: 254

Responder esta

Respostas a este tópico

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço