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
atrainer:
SoftwareSerial mySerial(17, 16); //Rx,Tx
void setup() {
pinMode(17, INPUT);
pinMode(16, OUTPUT);
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.
system
Closed
May 17, 2023, 4:41pm
5
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.