Κώδικας:
/* ********************************************************************
=============================================
ΣΥΝΔΕΣΜΟΛΟΓΙΑ:
=============================================
ARDUINO MEGA PIN MODEM SIM900 PIN ΛΕΙΤΟΥΡΓΙΑ
19 232_RΧ ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ MODEM
18 232_TX ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ MODEM
A1 ΕΙΣΟΔΟΣ ΣΗΜΑΤΟΣ ΕΝΕΡΓΟΠΟΙΗΣΗΣ ΑΠΟ ΣΥΝΑΓΕΡΜΟ
9 9 POWER ON ΣΤΟ MODEM (ΜΗΝ ΣΥΝΔΕΣΕΙΣ ΤΙΠΟΤΕ ΕΔΩ)
JUMPERS ΣΤΟΝ ΑΕΡΑ
*/
//===========================================
//INCLUDE FILES
//===========================================
#include <Wire.h>
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
#include "call.h"
#define SERIAL_LCD
//#define NORMAL_LCD
//===========================================
#ifdef SERIAL_LCD
#include <LiquidCrystal_I2C.h>
#endif
#ifdef NORMAL_LCD
#include <LiquidCrystal.h>
#endif
//===========================================
//DEFINITIONS
//===========================================
#define ALARM_INPUT A1
#define SIM900_POWER_PIN 9
#define fi 0
#define psi 1
#define omega 2
#define gamma 3
#define delta 4
#define lamda 5
#define ksi 6
#define pi 7
#define sigma 246
#define thita 242
#define degrees 223
#define LCD_I2C_ADDRESS 0x27
#define ROWS 4
#define COLUMNS 20
//===========================================
byte FI[8] = {
B01110,
B10101,
B10101,
B10101,
B01110,
B00100,
B00100,
B00000
};
byte PSI[8] = {
B10101,
B10101,
B10101,
B01110,
B00100,
B00100,
B00100,
B00000
};
byte OMEGA[8] = {
B01110,
B10001,
B10001,
B10001,
B01110,
B00000,
B11111,
B00000
};
byte GAMMA[8] = {
B11111,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B00000
};
byte DELTA[8] = {
B00100,
B01010,
B10001,
B10001,
B10001,
B10001,
B11111,
B00000
};
byte LAMDA[8] = {
B00100,
B01010,
B10001,
B10001,
B10001,
B10001,
B10001,
B00000
};
byte KSI[8] = {
B11111,
B00000,
B00000,
B01110,
B00000,
B00000,
B11111,
B00000
};
byte PEE[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B00000
};
//#define DEBUG
//===========================================
//INSTANCES
//===========================================
SMSGSM sms; //instance for the modem
CallGSM callgsm;
#ifdef SERIAL_LCD
LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
#endif
#ifdef NORMAL_LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#endif
//===========================================
//VARIABLES
//===========================================
boolean started = false;
String textForSMS = String("");
//*****************************************************************************
//Ο ΑΡΙΘΜΟΣ ΠΡΕΠΕΙ ΝΑ ΕΧΕΙ ΤΟ ΔΙΕΘΝΕΣ //ΠΡΟΘΕΜΑ (+30) ΑΚΟΛΟΥΘΟΥΜΕΝΟ ΑΠΟ ΤΑ
//10 ΨΗΦΙΑ ΤΟΥ ΑΡΙΘΜΟΥ ΚΛΗΣΗΣ.
//*****************************************************************************
char telnumber_1[] = "+306943000090"; //string contains 1st telephone number
char telnumber_2[] = "+306943000570"; //string contains 2nd telephone number
char telnumber_3[] = "+306943000550"; //string contains 3rd telephone number
char sms_position;
char phone_number[20]; // array for the phone number string
char sms_text[250];
int i = 0;
char AlarmMessage[50];
int count = 0;
//===========================================
void(* resetFunc) (void) = 0x00;
//ΣΕ ΠΕΡΙΠΤΩΣΗ ΠΟΥ ΔΕΝ ΓΙΝΕΙ ΑΥΤΟΜΑΤΗ ΕΠΑΝΑΦΟΡΑ
//ΤΟΥ MODEM, ΘΑ ΓΙΝΕΙ ΕΠΑΝΕΚΚΙΝΗΣΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ
//ΤΟΥ ARDUINO.
//===========================================
//SETUP ROUTINE
//===========================================
void setup()
{
Wire.begin();
lcd.begin(COLUMNS, ROWS);
lcd.setBacklight(HIGH);
Serial.begin(9600);
lcd.createChar(fi, FI);
lcd.createChar(psi, PSI);
lcd.createChar(omega, OMEGA);
lcd.createChar(gamma, GAMMA);
lcd.createChar(delta, DELTA);
lcd.createChar(lamda, LAMDA);
lcd.createChar(ksi, KSI);
lcd.createChar(pi, PEE);
pinMode(SIM900_POWER_PIN, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(ALARM_INPUT, INPUT);
digitalWrite(ALARM_INPUT, INPUT_PULLUP);
lcd.clear();
Serial.println(F("POWER ON STO MODEM."));
powerOnModem();
SIM900power();
Serial.println(F("PARAKALW PERIMENETE GIA KATAXWRHSH KARTAS SIM STO DIKTYO..."));
registerSIM();
lcd.clear();
lcd.print(F("KATA"));
lcd.write(sigma);
lcd.print(F("TA"));
lcd.write(sigma);
lcd.print(F("H MODEM: "));
if (gsm.begin(9600))
{
Serial.println(F("KATASTASH MODEM: ETOIMO GIA XRHSH"));
Serial.println();
lcd.setCursor(0,1);
lcd.print(F("ETOIMO "));
lcd.write(gamma);
lcd.print(F("IA XPH"));
lcd.write(sigma);
lcd.print(F("H. "));
delay(2000);
started=true;
}
else
{
started=false; Serial.println(F("KATASTASH MODEM: EPANEKKINHSH..."));
Serial.println();
Serial.println(F("TO SYSTHMA THA VGEI EKTOS LEITOYRGIAS..."));
Serial.println();
outOfService();
lcd.setCursor(0,1);
lcd.print(F("E"));
lcd.write(pi);
lcd.print(F("ANEKKINH"));
lcd.write(sigma);
lcd.print(F("H. "));
resetFunc();
}
}
//===========================================
//MAIN LOOP ROUTINE
//===========================================
void loop()
{
if(digitalRead(ALARM_INPUT) == LOW)
{
if(started)
{
do
{
callgsm.Call(telnumber_1);
Serial.println(F("GINETAI KLHSH STON ARITHMO:"));
Serial.println(telnumber_1);
Serial.println();
showNumber(telnumber_1);
//SendSMSToNumber(telnumber_1,phone_number);
callgsm.Call(telnumber_2);
Serial.println(F("GINETAI KLHSH STON ARITHMO:"));
Serial.println(telnumber_2);
Serial.println();
showNumber(telnumber_2);
//SendSMSToNumber(telnumber_2,phone_number);
callgsm.Call(telnumber_3);
Serial.println(F("GINETAI KLHSH STON ARITHMO:"));
Serial.println(telnumber_3);
Serial.println();
showNumber(telnumber_3);
//SendSMSToNumber(telnumber_3,phone_number);
count++;
if(count > 3) count = 0;
}while (count != 0);
}
while(digitalRead(ALARM_INPUT) == LOW);
}
}
//===========================================
//ΡΟΥΤΙΝΑ ΕΜΦΑΝΙΣΗΣ ΑΡΙΘΜΟΎ ΣΤΗΝ ΟΘΌΝΗ
//===========================================
void showNumber(char* receiveNumber)
{
lcd.clear();
lcd.print(F("KA"));
lcd.write(lamda);
lcd.print(F("EI TON API"));
lcd.write(thita);
lcd.print(F("MO: "));
lcd.setCursor(0,1);
lcd.print(receiveNumber);
delay(10000);
}
//===========================================
//ΡΟΥΤΙΝΑ ΕΝΕΡΓΟΠΟΙΗΣΗΣ MODEM
//===========================================
void SIM900power()
{
digitalWrite(SIM900_POWER_PIN, LOW);
delay(1000);
digitalWrite(SIM900_POWER_PIN, HIGH);
delay(2000);
digitalWrite(SIM900_POWER_PIN, LOW);
}
//===========================================
//ΡΟΥΤΙΝΑ ΔΙΑΓΡΑΦΗΣ SMS ΑΠΟ ΤΗ ΜΝΗΜΗ SIM
//===========================================
void deleteSMS()
{
for(i=1;i<=20;i++)
{
sms.DeleteSMS(i);
}
Serial.println(F("OLA TA SMS DIEGRAFHKAN"));
}
//===========================================
void SendSMSToNumber(char* masterNumber, char* receiveNumber)
{
for(int i = 0; i < 15; i++)
{
receiveNumber[i] = masterNumber[i];
}
lcd.clear();
lcd.write(gamma);
lcd.print("INETAI A");
lcd.write(pi);
lcd.print("O");
lcd.write(sigma);
lcd.print("TO");
lcd.write(lamda);
lcd.print("H SMS");
lcd.setCursor(0,2);
lcd.print(receiveNumber);
lcd.setCursor(0,3);
lcd.write(pi);
lcd.print("EPIMENETE... ");
Serial.println(F("PROETOIMASIA SMS...\n"));
textForSMS="";
textForSMS+="ARDUINO MEGA-SIM900\n";
textForSMS+="ENERGOPOIHSH\n";
textForSMS+="SYNAGERMOY! \n";
Serial.print(F("SMS ETOIMO GIA APOSTOLH STO: "));
Serial.println(receiveNumber);
Serial.println();
textForSMS.toCharArray(sms_text, sizeof(sms_text));
if(started)
{
if (sms.SendSMS(receiveNumber, sms_text))
{
Serial.println(F("EGINE APOSTOLH SMS STO:"));
Serial.println(receiveNumber);
Serial.println(F("OK!"));
Serial.println();
delay(2000);
}
}
deleteSMS();
}
//===========================================
void powerOnModem()
{
lcd.setCursor(0,0);
lcd.print(F("TPO"));
lcd.write((byte)fi);
lcd.print(F("O"));
lcd.write(delta);
lcd.print(F("O"));
lcd.write(sigma);
lcd.print(F("IA"));
lcd.setCursor(0,1);
lcd.write(sigma);
lcd.print(F("TO MODEM..."));
}
//===========================================
void registerSIM(void)
{
lcd.clear();
lcd.write(pi);
lcd.print(F("APAKA"));
lcd.write(lamda);
lcd.write(omega);
lcd.print(F(" "));
lcd.write(pi);
lcd.print(F("EPIMENETE "));
lcd.setCursor(0,1);
lcd.write((byte)gamma);
lcd.print(F("IA KATAX"));
lcd.write(omega);
lcd.print(F("PH"));
lcd.write(sigma);
lcd.print(F("H "));
lcd.setCursor(0,2);
lcd.print(F("KAPTA"));
lcd.write(sigma);
lcd.print(F(" SIM "));
lcd.setCursor(0,3);
lcd.write((byte)sigma);
lcd.print(F("TO "));
lcd.write(delta);
lcd.print(F("IKTYO... "));
}
//===========================================
void outOfService()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("TO "));
lcd.write(sigma);
lcd.print(F("Y"));
lcd.write(sigma);
lcd.print(F("THMA "));
lcd.write(thita);
lcd.print(F("A B"));
lcd.write(gamma);
lcd.print(F("EI "));
lcd.setCursor(0,1);
lcd.print(F("EKTO"));
lcd.write(sigma);
lcd.print(F(" "));
lcd.write(lamda);
lcd.print(F("EITOYP"));
lcd.write(gamma);
lcd.print(F("IA"));
lcd.write(sigma);
lcd.print(F("..."));
delay(2000);
}
//===========================================
//END OF PROGRAM HERE
//===========================================