I'm new here, so I hope my question is not naive. I'm using Arduino mega connected with a pulse sensor and a GPS (and other things that are not related to our problem), pulse sensor and GPS data are sent momentarily through HC-12 433 Mhz module to a receiver arduino uno that is only receiving data through HC-12 as well
for processing reasons, I send GPS data with a "G" prefix .. e.g "G11.00,7.45". and pulse data consist of those three: "S100" "Q97" "B22" // 100,97,22 are just examples, and each one is sent alone
for some reason, the receiver Arduino uno, is reading the data in it's ASCII decimal form and also separate it in a new line.
I can not use Serial.readString(), because it only print data after terminating the Serial communication and I need it momentarily, I tried to configure Serial.setTimeout() , but I couldn't manage to find a suitable time for all data.
please check my code and help me solve my problem, thank you
#include <Adafruit_GPS.h>
// what's the name of the hardware serial port?
#define GPSSerial Serial1
// Connect to the GPS on the hardware port
Adafruit_GPS GPS(&GPSSerial);
String gpsData="";
String pulseData="";
#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 13); // RX, TX HC-12
uint32_t timer = millis();
void setup(){ // I think there is no problem here
Serial.begin(115200); // we agree to talk fast!
mySerial.begin(115200);
interruptSetup(); // initialize timers to read pulse sensor and GPS at fixed intervals
GPS.begin(9600);
delay(100);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
delay(100);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_100_MILLIHERTZ);
GPS.sendCommand(PGCMD_ANTENNA);
delay(1000);
GPSSerial.println(PMTK_Q_RELEASE);
}
void loop(){
// that show me if there is a new data, you can skip it
if (GPS.newNMEAreceived()) {
// a tricky thing here is if we print the NMEA sentence, or data
// we end up not listening and catching other sentences!
// so be very wary if using OUTPUT_ALLDATA and trying to print out data
GPS.lastNMEA(); // this also sets the newNMEAreceived() flag to false
if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
return; // we can fail to parse a sentence in which case we should just wait for another
}
//
if (millis() - timer > 10000) { // send GPS data every 10 seconds
timer = millis(); // reset the timer
if (GPS.fix) {
gpsData.concat('G');
x=GPS.latitude/100;
gpsData.concat(x); // I also tried String(x)
gpsData.concat(',');
y=GPS.longitude/100;
gpsData.concat(y); // I also tried String(y)
mySerial.println(gpsData); // here I send GPS data through HC-12 to the receiver Arduino uno
gpsData=""; // reset
}
}
sendDataToProcessing('S', Signal); // send Processing the raw Pulse Sensor data
if (QS == true){ // Quantified Self flag is true when arduino finds a heartbeat
sendDataToProcessing('B',BPM); // send heart rate with a 'B' prefix
sendDataToProcessing('Q',IBI); // send time between beats with a 'Q' prefix
QS = false; // reset the Quantified Self flag for next time
}
delay(50);
}
void sendDataToProcessing(char symbol, int data ){
// here I send pulse data through HC-12 to the receiver Arduino uno, and then process it using processing in the receiver arduino
pulseData.concat(symbol);
pulseData.concat(data);
Serial.println(pulseData); // just for debugging and it was okay
mySerial.println(pulseData);
pulseData=""; //reset
}
interruptSetup() {
// no need to read it, it is just some timer 1 and timer 2 initialization and their ISR, timer 1 read pulse sensor every 2 milliseconds (yeah fast but I guess mega could handle it),and do some calculations to find S, Q, and B.
and timer 2 read GPS coming sentences.
}
the receiver code
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); //I will connect HC-12 directly to pin 0,1
}
void loop() {
// put your main code here, to run repeatedly:
while(Serial.available() >1){
String input = String (Serial.read());//read string , I need to cast it into String because data comes in ASCII
// I also tried int input = Serial.read() ; //same thing happened
Serial.println(input);
}
}
waiting for your response.
###edit### to conclude the problem is that I want to receive data in the uno as it has been sent from the mega
e.g: I receive sI guess the ascii of the letter and the number also changes to some number
send | recive
S490 | 52
53
Q252 | 10
83
B160 | 48
13
I used Serial.write(Serial.read()) instead of Serial.println, and it worked, does someone know why?