Problem with coding for GPRS shield

I am doing a project about upload sensor data to web server by sim900, I am using seeesstudio GPRS shield and Arduino Uno and I am about to ending this but I got a issue with coding

gprsSerial.println("AT+HTTPPARA="URL","http://minhajurrahman.comli.com/add_data.php?Temperature=**TC**&Pulse=**PulseV**\"");

in this line TC and PulseV is the variable for my sensor, when I tried to upload data by declaring variable it didn’t work
but when I replace the variable with some value like

gprsSerial.println("AT+HTTPPARA="URL","http://minhajurrahman.comli.com/add_data.php?Temperature=**100**&Pulse=**200**\"");

it work and I got response to the web site but I need to upload sensor data by declaring variable.
What’s wrong with the coding?
Thanks in advance for help

gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://minhajurrahman.comli.com/add_data.php?Temperature=TC&Pulse=PulseV\"");

That is sending the string PulseV, not the value in a variable named PulseV.

Try:

gprsSerial.print("AT+HTTPPARA=\"URL\",\"http://minhajurrahman.comli.com/add_data.php?Temperature=TC&Pulse=");
gprsSerial.print(PulseV);
gprsSerial.println("\"");

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+'

but it showes me error: invalid operands of types 'const char [77]' and 'float' to binary 'operator+'

Please post a video of you trying to ADD "AT+HTTPPARA="URL","http://minhajurrahman.comli.com/add_data.php?Temperature="+TC+"&Pulse=" and Pulse using a calculator.

I tried as you suggest but it didn't work

Something happened. If you are going to keep that to yourself, I'll be moving along.

Please post a video of you trying to ADD "AT+HTTPPARA="URL","http://minhajurrahman.comli.com/add_data.php?Temperature="+TC+"&Pulse=" and Pulse using a calculator.

Here is my testing video

if there has any details needed just let me know and my amateur code is here

#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());
  }
}

what should i do now!!! :frowning:

I asked what happened when you used the code snippet I posted. No answer to that, so I don't know what you are supposed to do now. Except maybe answer the question.

I received only zero (0), in my video i tried to show every angle of my failure

Test 1 sent hardcoded values and resulted in those values in the database.

Test 2 sent strings where the PHP script expected numbers. So, when it tried to convert "TC" and "PulseV" to numeric values, of course it got zeroes.

Test 3 attempted to ADD a string and a float. That is NOT possible. The + is NOT append or concatenate or anything else but ADD.

Test 4 sent the string "TC" and a numeric value for PulseV, and resulted in the correct value for pulse being entered in the database. So, what is the problem?

Of course you need to change the code to send a value in place of TC, but you should, by now, see how to do that:

gprsSerial.print("AT+HTTPPARA=\"URL\",\"http://minhajurrahman.comli.com/add_data.php?Temperature=");
gprsSerial.print(TC);
sprsSerial.print("&Pulse=");
gprsSerial.print(PulseV);
gprsSerial.println("\"");

Thanks dude...finally it work.
i am vert much grateful to you,this simple mistake cost me 3/4 days

:slight_smile: :grin: