Problema GSM CON MQ2(SENSORE GAS)

ciao a tutti sto realizzando un progetto con il sim800l.

Se rileva la presenza di gas mi invia un messaggio sopra la soglia di 200 ogni 30 secondi. Il problema è che non riesco a ricevere il messaggio eppure se utilizzo il delay ogni 1-2secondi va… utilizzando millis mi da questo problema…

qualcuno riesce a darmi qualche dritta?

/*PIN DIAGRAM
 * TX --->PIN 8
 * rx --->PIN 7  */
#define TIMEOUT    1000
#include <gprs.h>
#include <softwareserial.h>

unsigned long interval=30000; // TEMPO ATTESA 30s
unsigned long previousMillis=0; // millis() returns an unsigned long.

bool ledState = false; // state variable for the LED
// Digital pin 8 will be called 'pin8'
int pin8 = 9;
// Analog pin 0 will be called 'sensor'
int sensor = A0;
// Set the initial sensorValue to 0
int sensorValue = 0;



GPRS gprs;
void invio_sms(void);
void mq2(void);
 
void setup() {
  Serial.begin(9600);
  pinMode(3,OUTPUT);
  pinMode(13, OUTPUT);

  Serial.println("Il Modulo sim800 si sta per avviare");
  gprs.preInit();
  delay(1000);
  
  while(0 != gprs.init()) {
      delay(1000);
      Serial.print("init error\r\n");
  } 
 
  //Set SMS mode to ASCII
  if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
   
  //Start listening to New SMS Message Indications
  if(0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
 
  Serial.println("Init success");
}
   
  //Variable to hold last line of serial output from SIM800
char currentLine[500] = "";
int currentLineIndex = 0;
 
//Boolean to be set to true if message notificaion was found and next
//line of serial output is the actual SMS message content
bool nextLineIsMessage = false;


void loop() {
 
mq2();

}
 
 void mq2(void){
  unsigned long currentMillis = millis(); // grab current time

 // check if "interval" time has passed (1000 milliseconds)
 if ((unsigned long)(currentMillis - previousMillis) >= interval) {
 
   ledState = !ledState; // "toggles" the state
   // Read the input on analog pin 0 (named 'sensor')
  sensorValue = analogRead(sensor);
  // Print out the value you read
  Serial.println(sensorValue, DEC);
  // If sensorValue is greater than 500
  if (sensorValue > 200) {
    gprs.sendSMS("MIO CELL","ATTENZIONE PRESENZA GAS"); //invio sms al mio numero
   digitalWrite(13, HIGH);    
  }
  else {
    // LED LIVELLO BASSO
    digitalWrite(13, LOW);
  }

   // save the "current" time
   previousMillis = millis();
 }
 }