How to use interrupt in Arduino uno ?

i have project water level for irrigation system. but the program is separate. i want to combine it. i think it will work with interrupt system, but i dont understand it. actually i confused in attach Interrupt, volatile , void loop and pin 2 & 3 for int... somebody help me please ....
and check my coding..
and check my coding..
Code: Select all
#include <SoftwareSerial.h>
SoftwareSerial gsmSerial(5,6); //(rx,tx)
float temp;
int tempPin = A1;
#define FLEX_TOO_HI 400 //limit up
#define FLEX_TOO_LOW 250 //limit down
#define ONBOARD_LED 2 //for pump
#define FLEX_SENSOR 0 //for capacity sensor
int ledpin = 3;
volatile int update = false;
char inchar;
int SMS_location_number;
const unsigned int MAX_INPUT = 165; // 160 maksimal kirim sms
static unsigned int input_pos = 0;
int bend_value = 0; //NILAI SENSOR
byte smsON = 0; //pengunci telepon on
byte smsOFF=0; //pengunci telepon off
byte bend_state = 0; // nilai motor
int stat = 0; //pengunci nilai motor
int pompas=0;
int lock=0;
void setup()
{
Serial.begin(9600);
pinMode(ONBOARD_LED, OUTPUT);
delay(200);
pinMode(3, OUTPUT);
delay(10); //10ms delay
gsmSerial.begin(9600); //baud rate port serial
delay(10); //10ms delay
GSM_Startup(); //GSM diaktifkan
digitalWrite(3, HIGH);
attachInterrupt(1, tc35i, FALLING);
//attachInterrupt(0, pompa, FALLING);
}
void SendWaterAlert(int bend_value, int bend_state){
digitalWrite(ONBOARD_LED, bend_state ? HIGH : LOW);}
void esemes ()
{
gsmSerial.print("AT+CMGS=089610795984\r"); //coba kirim feedback
delay(100);
if ( gsmSerial.read()!= 2,LOW);
{
gsmSerial.print ("Motor ON ");
Serial.println ("Motor ON ");
gsmSerial.print("\x1A"); //ctrl + z
delay (5000);}
if (gsmSerial.read()!= 2,HIGH);
{
gsmSerial.print ("Motor OFF ");
Serial.println ("Motor OFF ");
gsmSerial.print("\x1A"); //ctrl + z
delay (5000);
}
}
void pompa()
{
delay(1000);
bend_value = analogRead(FLEX_SENSOR);
//Serial.print("bend_value=");
//Serial.println(bend_value);
{
if (bend_value >= FLEX_TOO_HI)
{
stat = 1;
SendWaterAlert(bend_value, bend_state);
}
if (bend_value < FLEX_TOO_LOW)
{
stat = 0;
}
if (stat==0 && bend_value <FLEX_TOO_LOW)
{
bend_state=1;
SendWaterAlert(bend_value, bend_state);
gsmSerial.print ("Motor ON ");
Serial.println ("Motor ON");
while(smsON!=1){
esemes();
smsON=1;
smsOFF=0;
}
}
if (stat==1){
bend_state=0;
SendWaterAlert(bend_value, bend_state);
gsmSerial.print ("Motor OFF ");
Serial.println ("Motor OFF ");
while(smsOFF!=1){
esemes();
smsON=0;
smsOFF=1;
}
}
}
}
void tc35i()
{
static char input_line [MAX_INPUT]; //static unsigned int input_pos = 0;
if (gsmSerial.available () > 0) //
{
while (gsmSerial.available () > 0)
{
char inByte = gsmSerial.read ();
switch (inByte)
{
case '\n': // end of text
input_line [input_pos] = 0; // mengakhiri null byte
process_data (input_line);//proses input_line
input_pos = 0; //reset buffer bos
break;
case '\r':
break;
default:
if (input_pos < (MAX_INPUT - 1))
input_line [input_pos++] = inByte;
break;
}
}
}
}
//---------------------------- process_data --------------------------------
void process_data (char * data)
{
if(strstr(data, "smsdelete"))
{
delete_All_SMS();
}
if(strstr(data, "^SMGO: 2")) //peringatan kalau sim card nya full
{
delete_All_SMS(); // delete all SMS
}
if(strstr(data, "+CMTI:"))//sms telah tiba.. sms telah tiba
{
char* copy = data + 12; // baca posisi sms
SMS_location_number = (byte) atoi(copy); // konfersi ascii ke int
gsmSerial.print("AT+CMGR=");
gsmSerial.println(SMS_location_number);
}
if(strstr(data, "on"))
{
digitalWrite(3, HIGH ); // led nya off
delay(100);
gsmSerial.print("AT+CMGS=089610795984\r"); //coba kirim feedback
delay(100);
gsmSerial.print("SELENOID IS ON");
delay(10);
gsmSerial.print("\x1A"); //ctrl + z
delay(10);
delete_one_SMS();
}
if(strstr(data, "off"))
{
digitalWrite(3, LOW); // led nya off
delay(100);
gsmSerial.print("AT+CMGS=089610795984\r"); //coba kirim feedback
//gsmSerial.println("AT+CMGS=089652363282\r"); //coba kirim feedback
delay(100);
gsmSerial.print("SELENOID IS off");
//gsmSerial.println("LED IS off");
delay(10);
gsmSerial.print("\x1A"); //ctrl + z
delay(10);
delete_one_SMS();
}
if(strstr(data, "cek suhu"))
{
temp = analogRead(tempPin);
temp = temp * 0.0306; // led nya off
delay(100);
gsmSerial.print("AT+CMGS=089610795984\r"); //coba kirim feedback
delay(100);
gsmSerial.print("suhu =");
gsmSerial.print (temp);
gsmSerial.print ("*C" );
delay(10);
gsmSerial.print("\x1A"); //ctrl + z
delay(10);
delete_one_SMS();
}
} //--------------------------- end of process_data ---------------------------
void delete_one_SMS()
{
Serial.write("deleting SMS ");
Serial.print("1");
gsmSerial.print("AT+CMGD=");
gsmSerial.println("1");
delay(1000);
}
void delete_All_SMS()
{
for(int i = 1; i <= 10; i++) {
gsmSerial.print("AT+CMGD=");
gsmSerial.println(i);
Serial.println("deleting SMS ");
Serial.print(i);
delay(500);
}
}
void GSM_Startup()
{
gsmSerial.print("AT+CMGF=1\r");
delay(100);
gsmSerial.print("AT+CNMI=2,1,0,0,1\r");
delay(100);
delete_All_SMS();
}
void loop ()
{
if (update){
analogWrite(update, true);
pompa();
}
analogWrite(update, false);
}
void suhu()
{
temp = analogRead(tempPin);
temp = temp * 0.0306;
delay(1000);
process_data ("cek suhu" );
}
2014-12-30 18:01:49 So the water level measurement keeps working all the time, it only collects water level information. It is not a trigger.
The irrigation system is really controlled by your SMS. It doesn't need any external interruption.
Grey.CC
The irrigation system is really controlled by your SMS. It doesn't need any external interruption.

2014-12-30 16:20:51 for irrigation system i want to control ON or OFF by SMS.. so if water level automatic working, and i need to control ON irrigation system, i have to interrupt water level.. is it right ?
Uning Elka

2014-12-30 05:59:41 Yeah, I think so,
If the trigger is sensor value, it doesn't need interrupt.
Grey.CC
If the trigger is sensor value, it doesn't need interrupt.

2014-12-29 23:39:52 Before you go down that road, you should ask yourself why you think you need to implement a special interrupt. If the event is triggered by sensor feedback, and appropriate hysteresis is assigned, then one's typical control software will address this accordingly. Irrigation systems have slow time constants so doubt you need to implement special interrupt polling and triggering (above and beyond sensor FB control), but of course I do not know your objectives. Just my 2 cents. Hope this helps...
walkabout
