to precisando fazer uma comunicação Serial, um Atmega328 faz os cálculos e envia para um segundo microcontrolador, e este envia para o pc, mas eu queria fazer este segundo microcontrolador faça cálculos e envie pela mesma porta, mas sem embaralhar os dador

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}


Serial.println("Goodnight moon!");

// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world?");
}

void loop() // run over and over
{

if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}

usei este para receber de outro atmega328, e funciona bem, mas quando tento acrescentar algum dado na segunda serial as informações ficam embaralhadas. 

alguem tem uma ideia pra me ajudar?

Exibições: 345

Responder esta

Respostas a este tópico

pode ser por causa da velocidade do serial 

vc confirmou se estao na mesma velocidade?

e vc pode fazer eles se comunicarem pelo pino 0 e 1 do arduino mesmo nao precisa nesesariamente usar o software serial

eh so ligar rx de um no tx do outro 

verifiquei tudo isto sim,

eu uso a porta ja existente pra comunicar com o pc, e a segunda pra receber os dados do 1º atmega, só que estou com dificuldade de fazer o 2º atmega, além de retransmitir os dados do 1ª, fazer algumas funções junto no loop, recebi umas dicas para armazenar os dados recebidos em uma variável, mas não estou conseguindo fazer isso,

tem ideia de como se faz isso? armazenar os dados de uma serial em uma variável?

//Segue um exemplo que eu montei para vc

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

String dados;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(57600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  mySerial.println("Hello, world?");
}

void loop() // run over and over
{

  if (mySerial.available()) {
    
    dados = ""; // limpa a strig para nova leitura

    while (mySerial.available()>0){ // enquanto houver dados na serial
      char serial = mySerial.read(); // armazena o que chegou      
      dados+= serial;   // monta a string com cada dado
      delay(10); // pequeno delay para iniciar nova leitura
    }
    
    Serial.println(dados); // envia para o pc
    
    //se quiser transformar em inteiro para fazer cálculo:
    //somente se for numeros
    //int valor = dados.toInt();
    
    // agora vc usa a variável "valor" para a mátemárica
  }


  if (Serial.available()) {
    mySerial.write(Serial.read());

  }
}

Eduardo Silva

muito obrigado!

funcionou muito bem

vlw cara

Falow rapaz, boa sorte nos projetos!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço