Thanks for your reply,
I tried as you suggest but it didn't work, if that has another way please let me know.
For more details here is my amateur code
#include <String.h>
#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(7, 8);
const int tempSensor = A1;
int Vin;
//double TC,PulseV;
float TC,PulseV;
#define Sampling_Time 5
#define Num_Samples 600
#define Peak_Threshold_Factor 85
#define Minimum_Range 500
#define Minimum_Peak_Separation 75 // 75*5=375 ms
#define DC_Added 10;
#define Moving_Average_Num 5
void setup() {
gprsSerial.begin(115200);
Serial.begin(115200);
Serial.println("Config SIM900...");
delay(2000);
Serial.println("Done!...");
gprsSerial.flush();
Serial.flush();
// attach or detach from GPRS service
gprsSerial.println("AT+CGATT?");
delay(100);
toSerial();
// bearer settings
gprsSerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
delay(2000);
toSerial();
// bearer settings
gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"internet\"");
delay(2000);
toSerial();
// bearer settings
gprsSerial.println("AT+SAPBR=1,1");
delay(2000);
toSerial();
gprsSerial.println("AT+SAPBR=2,1");
delay(2000);
toSerial();
}
int ADC_Samples[Num_Samples], Index1, Index2, Index3, Peak1, Peak2, Peak3;
long Pulse_Rate, Temp1=1L, Pulse_Time1, Pulse_Time2;
int Peak_Magnitude, Peak_Threshold, Minima, Range;
void loop() {
Vin = analogRead (tempSensor);
TC=(500.0*Vin)/1023.0;
Serial.print("Temperature = ");
Serial.print(TC);
Serial.println("C");
Read_ADC_Samples();
//Serial.println("Sample Read Finished ");
Remove_DC();
// Serial.println("DC component subtracted ");
Scale_Data();
// Serial.println("Data scaled ");
if (Range > Minimum_Range){ // ADC range is > 70, otherwise increase gain
Filter_Data();
//Serial.println("Data Filtered ");
Compute_Pulse_Rate();
PulseV=Pulse_Rate/2;
Serial.println(PulseV); //Serial.println("Pulse rate computed ");
// initialize http service
gprsSerial.println("AT+HTTPINIT");
delay(2000);
toSerial();
// set http param value
gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://minhajurrahman.comli.com/add_data.php?Temperature=TC&Pulse=PulseV\"");
/* gprsSerial.println("[{\"Temperature\": \"" + TC + "\"},");
delay(200);
toSerial();
gprsSerial.println("[{\"Pulse\": \"" + PulseV + "\"},");
delay(200);
toSerial();
*/
delay(2000);
toSerial();
// set http action type 0 = GET, 1 = POST, 2 = HEAD
gprsSerial.println("AT+HTTPACTION=0");
delay(6000);
toSerial();
// read server response
gprsSerial.println("AT+HTTPREAD");
delay(1000);
toSerial();
gprsSerial.println("");
gprsSerial.println("AT+HTTPTERM");
toSerial();
delay(300);
gprsSerial.println("");
delay(10000);
}
} // Main Loop
// Read ADC samples at a predefined interval
void Read_ADC_Samples(){
for (int i = 0; i < Num_Samples; i++){
ADC_Samples[i] = analogRead(A0);
delay(Sampling_Time);
}
}
void Remove_DC(){
Find_Minima(0);
//Serial.print("Minima = ");
//Serial.println(Minima);
// Subtract DC (minima)
for (int i = 0; i < Num_Samples; i++){
ADC_Samples[i] = ADC_Samples[i] - Minima;
}
Minima = 0; // New minima is zero
} // Remove_DC
void Find_Minima(int Num){
Minima = 1024;
for (int m = Num; m < Num_Samples-Num; m++){
if(Minima > ADC_Samples[m]){
Minima = ADC_Samples[m];
}
}
} // Find_Minima
void Scale_Data(){
// Find peak value
Find_Peak(0);
Range = Peak_Magnitude - Minima;
for (int i = 0; i < Num_Samples; i++){
ADC_Samples[i] = map(ADC_Samples[i], 0, Range, 1, 1023);
}
Find_Peak(0);
Find_Minima(0);
} // Scale_Data
void Find_Peak(int Num){
Peak_Magnitude = 0;
for (int m = Num; m < Num_Samples-Num; m++){
if(Peak_Magnitude < ADC_Samples[m]){
Peak_Magnitude = ADC_Samples[m];
}
}
} // Find_Peak
void Filter_Data(){
int Num_Points = 2*Moving_Average_Num+1;
for (int i = Moving_Average_Num; i < Num_Samples-Moving_Average_Num; i++){
int Sum_Points = 0;
for(int k =0; k < Num_Points; k++){
Sum_Points = Sum_Points + ADC_Samples[i-Moving_Average_Num+k];
}
ADC_Samples[i] = Sum_Points/Num_Points;
}
} // Filter_Date
void Compute_Pulse_Rate(){
// Detect Peak magnitude and minima
Find_Peak(Moving_Average_Num);
Find_Minima(Moving_Average_Num);
Range = Peak_Magnitude - Minima;
Peak_Threshold = Peak_Magnitude*Peak_Threshold_Factor;
Peak_Threshold = Peak_Threshold/100;
// Now detect three peaks
Peak1 = 0;
Peak2 = 0;
Peak3 = 0;
Index1 = 0;
Index2 = 0;
Index3 = 0;
// Find first peak
for (int j = Moving_Average_Num; j < Num_Samples-Moving_Average_Num; j++){
if(ADC_Samples[j] >= ADC_Samples[j-1] && ADC_Samples[j] > ADC_Samples[j+1] &&
ADC_Samples[j] > Peak_Threshold && Peak1 == 0){
Peak1 = ADC_Samples[j];
Index1 = j;
}
// Search for second peak which is at least 10 sample time far
if(Peak1 > 0 && j > (Index1+Minimum_Peak_Separation) && Peak2 == 0){
if(ADC_Samples[j] >= ADC_Samples[j-1] && ADC_Samples[j] > ADC_Samples[j+1] &&
ADC_Samples[j] > Peak_Threshold){
Peak2 = ADC_Samples[j];
Index2 = j;
}
} // Peak1 > 0
// Search for the third peak which is at least 10 sample time far
if(Peak2 > 0 && j > (Index2+Minimum_Peak_Separation) && Peak3 == 0){
if(ADC_Samples[j] >= ADC_Samples[j-1] && ADC_Samples[j] > ADC_Samples[j+1] &&
ADC_Samples[j] > Peak_Threshold){
Peak3 = ADC_Samples[j];
Index3 = j;
}
} // Peak2 > 0
}
Pulse_Time1 = (Index2-Index1)*Sampling_Time; // In milliseconds
Pulse_Time2 = (Index3-Index2)*Sampling_Time;
if(Pulse_Time1 > 0 && Pulse_Time1 > 0){
Pulse_Rate = 2*60000/(Pulse_Time1+Pulse_Time2); // In BPM
}
Serial.print("Pulse Rate (BPM) = ");
} // Compute_Pulse_Rate
void toSerial()
{
while(gprsSerial.available()!=0)
{
Serial.write(gprsSerial.read());
}
}
I also tried by
gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://minhajurrahman.comli.com/add_data.php?Temperature="+TC+"&Pulse="+PulseV+"\"");
but it showes me error: invalid operands of types 'const char [77]' and 'float' to binary 'operator+'