Home Automation

Hi, I`m performing a home automation project, the program should work like this:

(1) When I send a SMS like #a1b1c0d0, leds “a” and “b” should be turned on and “c” and “d” should be turned off (the leds will be replaced by relays in the future).

(2) When the Flame Sensor detects a value higher than 4.9, the arduino should call me on the cellphone.

I can make (1) and (2) work running separated, but I couldn`t merge the two codes and make them work together, must be a noobs mistake cause I’m new to this. Please help guys, will be much appreciated!

Here is the codes and links to datasheets:

Complete Code (that doesn’t work):

 #include <SoftwareSerial.h>
 char inchar; //Will hold the incoming character from the Serial Port.
 SoftwareSerial cell(2,3); //Create a 'fake' serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.

 int led1 = 9;
 int led2 = 10;
 int led3 = 11;
 int led4 = 12;

 void setup()
 {
 // prepare the digital output pins
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 //Initialize GSM module serial port for communication.
 cell.begin(9600);
 delay(30000); // give time for GSM module to register on network etc.
 cell.println("AT+CMGF=1"); // set SMS mode to text
 delay(200);
 cell.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt 
 delay(200);
 }

 void loop() 
 {
 //If a character comes in from the cellular module...
 if(cell.available() >0)
 {
 inchar=cell.read(); 
 if (inchar=='#')
 {
 delay(10);
 inchar=cell.read(); 
 if (inchar=='a')
 {
 delay(10);
 inchar=cell.read();
 if (inchar=='0')
 {
 digitalWrite(led1, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led1, HIGH);
 }
 delay(10);
 inchar=cell.read(); 
 if (inchar=='b')
 {
 inchar=cell.read();
 if (inchar=='0')
 {
 digitalWrite(led2, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led2, HIGH);
 }
 delay(10);
 inchar=cell.read(); 
 if (inchar=='c')
 {
 inchar=cell.read();
 if (inchar=='0')
 {
 digitalWrite(led3, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led3, HIGH);
 }
 delay(10);
 inchar=cell.read(); 
 if (inchar=='d')
 {
 delay(10);
 inchar=cell.read();
 if (inchar=='0')
 {
 digitalWrite(led4, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led4, HIGH);
 }
 delay(10);
 }
 }
 cell.println("AT+CMGD=1,4"); // delete all SMS
 }
 }
 }
 }
  int sensorValue = analogRead(A0);     // Here starts the Flame Sensor part*******************************************************
  
  float voltage = sensorValue*(5.0/1023.0);
  
  Serial.println(voltage);
  
  delay(100);
  
  if (voltage > 4.9)
  {
    cell.println("ATD981752290");
  }
    
 }

Flame Sensor Code:

#include <SoftwareSerial.h>
SoftwareSerial cell(2,3);
void setup()
{
   cell.begin(9600);
 delay(25000);
  Serial.begin(9600);
  
}
void loop()
{
  int sensorValue = analogRead(A0);
  
  float voltage = sensorValue*(5.0/1023.0);
  
  Serial.println(voltage);
  
  delay(100);
  
  if (voltage > 4.9)
  {
    cell.println("ATD981752290");
  }
    
}

SMS receive + led activation Code:

 #include <SoftwareSerial.h>
 char inchar; //Will hold the incoming character from the Serial Port.
 SoftwareSerial cell(2,3); //Create a 'fake' serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.

 int led1 = 9;
 int led2 = 10;
 int led3 = 11;
 int led4 = 12;

 void setup()
 {
 // prepare the digital output pins
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 //Initialize GSM module serial port for communication.
 cell.begin(9600);
 delay(30000); // give time for GSM module to register on network etc.
 cell.println("AT+CMGF=1"); // set SMS mode to text
 delay(200);
 cell.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt 
 delay(200);
 }

 void loop() 
 {
 //If a character comes in from the cellular module...
 if(cell.available() >0)
 {
 inchar=cell.read(); 
 if (inchar=='#')
 {
 delay(10);
 inchar=cell.read(); 
 if (inchar=='a')
 {
 delay(10);
 inchar=cell.read();
 if (inchar=='0')
 {
 digitalWrite(led1, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led1, HIGH);
 }
 delay(10);
 inchar=cell.read(); 
 if (inchar=='b')
 {
 inchar=cell.read();
 if (inchar=='0')
 {
 digitalWrite(led2, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led2, HIGH);
 }
 delay(10);
 inchar=cell.read(); 
 if (inchar=='c')
 {
 inchar=cell.read();
 if (inchar=='0')
 {
 digitalWrite(led3, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led3, HIGH);
 }
 delay(10);
 inchar=cell.read(); 
 if (inchar=='d')
 {
 delay(10);
 inchar=cell.read();
 if (inchar=='0')
 {
 digitalWrite(led4, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led4, HIGH);
 }
 delay(10);
 }
 }
 cell.println("AT+CMGD=1,4"); // delete all SMS
 }
 }
 }
 }
 }

Shield link: https://www.sparkfun.com/products/9607
Flame Sensor: http://www.cytron.com.my/viewProduct.php?pcode=SN-FLAME-MOD
SMS Code acquired on: http://tronixstuff.wordpress.com/2011/01/31/tutorial-arduino-and-gsm-cellular-–-part-two/

The lack of indentation makes it look atrocious. In the Arduino IDE, press Ctrl+T to format the code before posting it.

Arrch: The lack of indentation makes it look atrocious. In the Arduino IDE, press Ctrl+T to format the code before posting it.

but I couldn`t merge the two codes and make them work together

The code does something. You want it to do something else. You've explained what you want it do, but you didn't explain what it actually does.

Hi,

On the http://ArduinoInfo.Info WIKI: See http://arduino-info.wikispaces.com/CombiningArduinoSketches

FIRST! Start by understanding both sketches and the resources and libraries they use before attempting to stitch them together. If there is any part of either sketch you don't understand, that will be the part that causes you trouble.