Trouble with Serial Communication between Two Arduino Megas

I'm attempting to transfer sensor data from one Mega to another Mega that will be used to interpret it. My master code is:

#include <SoftwareSerial.h>
#include "Adafruit_ADS1X15.h"
SoftwareSerial mySerial(17, 16); //Rx,Tx
float diametermm = 0;
float diameterin = 0;
float voltage = 0;
char text[20];
char charVal[6];
Adafruit_ADS1115 ads1115;
void setup() {

  pinMode(17, INPUT);
  pinMode(16, OUTPUT);
  mySerial.begin(9600);
  Serial.begin(9600);
  ads1115.begin();

}

void loop() {
  int16_t adc0;
  adc0 = ads1115.readADC_SingleEnded(0);
  voltage = (adc0 * .1875) / 1000;
  //strcat(text, "DIA is: ");
  diametermm = (voltage * 7.8587) - .5242;
  diameterin = diametermm * 0.0394;
  //Serial.println(diameterin, 4);
  //dtostrf(diameterin,5,1,charVal);
  //strcat(text, charVal);
  /// text[16] = 0;
  //strcat(text,"in");
  //Serial.println(text);
  Serial.println(diameterin,4);
}

And my Slave code is slave code is:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(17, 16);

void setup() {
   pinMode(17,INPUT);
   pinMode(16,OUTPUT);

  Serial.begin(9600);

}

void loop() {
  if (mySerial.available()){
    int diameter = Serial.read();
    Serial.println(diameter);
  }
}
I'm trying to figure out how to collect the data on the second mega if anyone can help me.

Bring the following changes in your sketches and then re-run them.

Master Sketch:

//#include <SoftwareSerial.h>
#include "Adafruit_ADS1X15.h"
//SoftwareSerial mySerial(17, 16); //Rx,Tx
float diametermm = 0;
float diameterin = 0;
float voltage = 0;
char text[20];
char charVal[6];
Adafruit_ADS1115 ads1115;
void setup() {

  //pinMode(17, INPUT);
 // pinMode(16, OUTPUT);
  //my
  Serial2.begin(9600);
  Serial.begin(9600);
  ads1115.begin();

}

void loop() {
  int16_t adc0;
  adc0 = ads1115.readADC_SingleEnded(0);
  voltage = (adc0 * .1875) / 1000;
  //strcat(text, "DIA is: ");
  diametermm = (voltage * 7.8587) - .5242;
  diameterin = diametermm * 0.0394;
  //Serial.println(diameterin, 4);
  //dtostrf(diameterin,5,1,charVal);
  //strcat(text, charVal);
  /// text[16] = 0;
  //strcat(text,"in");
  //Serial.println(text);
  Serial.println(diameterin, 4);
  Serial2.print(diameterin, 4);
  Serial2.print('\n');    //Newline character as end mark
  delay(1000);  //1-sec test interval
}

Slave Sketch:

//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(17, 16);
float diameterin;
char myData[5] = {0};

void setup() 
{
   //pinMode(17,INPUT);
  // pinMode(16,OUTPUT);

  Serial.begin(9600); 
  Serial2.begin(9600);
}

void loop() 
{
  if (Serial2.available() >0 )
  {
      byte m = Serial2.readBytesUntil('\n', myData, 10);
      myData[m] = '\0';  //insert null-character
      diameterin = atof(myData);
      Serial.println(diameterin);
      memset(myData, 0, 10) //array clear
  }
}
1 Like

Thank you very much it is working. I totally forgot about the various numbered serial ports on the mega.

1 Like

F.Y.I.: Don't use pinMode() on the pins that SoftwareSerial is using.

F.Y.I: Same here, plus you forgot mySerial.begin(9600); on the slave side.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.