Interrupt using Serial Data


i working on project arduino periodically sends sensor data mobile phone sms through gsm module. receives data mobile phone "fan off" stuff.  works this.
1. send data to gsm module delay(100000)
2. receive instruction gsm module fan on or motor off.....

now problem when introduce delay set time period between 2 sms sent, instruction arduino of fan on gets delayed 100000ms.
i want use interrupt. in between delay of 100000ms if serial input comes (1 or 2 or 3 or 4), output sets respectively.
please see code below. sensor input not there conectentrating on interrupt part right now.
code: [select]

int status_m, status_f;
char inchar,inchar1,time;
////////////////////////////////////////////////////////
void setup()
{
  serial.begin(9600); 
  pinmode(12, output);
  pinmode(13, output);
  pinmode(12, input);
  pinmode(13, input);
   serial.println("at+csms=1\r");
delay(200);
  serial.print("at+cnmi=2,2,0,0,0");
  delay(300);
  serial.print('\n');
  delay(1000);
}
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
void loop()
{ while(serial.available()>0)
  {
fan();
  }
  message();
  delay(10000);
}
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
void call()
{  serial.print("\r \n");
  delay(1000);
serial.print("atd09730689900;");
delay(1000);
}

////////////////////////////////////////////////////////////////
void message()
{
  float temp, humi;
  serial.print("\r");
  delay(1000);                 
  serial.print("at+cmgf=1\r");   
  delay(1000);
  serial.print("at+cmgs=\"+919730689900\"\r");
  delay(1000);
  serial.println('\r');
  serial.print("temperature=");
  serial.println(temp);
  serial.print('\r');
  serial.print("humdity=");
  serial.println(humi);
  serial.print('\r');
  serial.print("dew point=");
  serial.print('\n');
  if (status_f==1)
  {serial.print("fan on");
  serial.print('\r');
  }
  else
  {serial.print("fan off");
  serial.print('\r');
  }
  serial.print('\n');
   if (status_m==1)
  {serial.print("motor on");
  serial.print('\r');
  }
  else
  {serial.print("motor off");
  serial.print('\r');
  }
  serial.print('\n');
  serial.print("---reply---");
  serial.print('\n');
  serial.print("'1' fan on, motor on");
     serial.print('\n');
     serial.print("'2' fan on, motor off");
     serial.print('\n');
     serial.print("'3' fan off, motor on");
     serial.print('\n');
     serial.print("'0' fan off, motor off");
     serial.print('\n');
  delay(800);
  serial.write(0x1a);
}
//////////////////////////////////////////////////////////////////
void fan()
{
     inchar=serial.read();
     if (inchar=='1')
    {
      digitalwrite(12, high);
      digitalwrite(13,high);
     }
   
     
     else if (inchar=='2')
     {
       
      digitalwrite(12, high);
     digitalwrite(13, low);
    }
   
     
     else if (inchar=='3')
     {
      digitalwrite(12, low);
     digitalwrite(13, high);
    }
     
   
    else if (inchar=='0')
     {
       
      digitalwrite(12, low);
     digitalwrite(13, low);
    }
   status_f=digitalread(12);
    delay(100);
    status_m=digitalread(13);
serial.println("at+cmgr=1\r");
  delay(2000);
}
 


i hope understand trying say. patience. please help. thanks

don't use delay().  see "blink without delay" example in ide examples.  using method can poll serial ports new input while waiting between messages.


Arduino Forum > Using Arduino > Programming Questions > Interrupt using Serial Data


arduino

Comments

Popular posts from this blog

opencv3, tbb and rasp pi 2 - Raspberry Pi Forums

small ethernet problem - Raspberry Pi Forums

Multithumb configuration params not working? - Joomla! Forum - community, help and support