2016-04-15 2 views
4
#include <Password.h> 
#include <Keypad.h> 
#include <Servo.h> 
#include "SIM900.h" 
#include <SoftwareSerial.h> 
#include "sms.h" 

Servo myservo; 
Password password = Password("1234"); //password to unlock box, can be changed 
SMSGSM sms; 
int numdata; 
boolean started=false; 
char smsbuffer[160]; 
char n[20]; 

const byte ROWS = 4; 
const byte COLS = 4; 

// Define the Keymap 
char keys[ROWS][COLS] = { 
{'1','2','3','A'}, 
{'4','5','6','B'}, 
{'7','8','9','C'}, 
{'*','0','#','D'} 
}; 
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. 
byte rowPins[ROWS] = { 9, 8, 7, 6 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins. 
byte colPins[COLS] = { 5, 4, 3, 2 }; 
int x=0; 


// Create the Keypad 
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); 

void setup()  //if i add sms(); function it workssss 
{ 

    Serial.begin(9600); //Start a Serial COM 

    Serial.println(F("ARDUINO SECURITY SYSTEM V1.0")); 

    Serial.print(F("Checking GSM COM...")); 

    if (gsm.begin(9600)) //Start the GSM COM 
    { 
    (sms.SendSMS("+XXXXX","Your Home Security system is powered up")); 
    Serial.println(F("Good To GO!!")); 
    } 
    else 
    { 
    Serial.println(F("Could not connect to GSM modem")); 
    } 

    Serial.write(254); 
    Serial.write(0x01); 
    delay(200); 
    pinMode(11, OUTPUT); //green light 
    pinMode(12, OUTPUT); //red light 
    myservo.attach(13); //servo on digital pin 9 //servo 
    keypad.addEventListener(keypadEvent);//add an event listener for this keypad 

    } 

void loop(){ 
    keypad.getKey(); 
    myservo.write(0); 
    } 
    //take care of some special events 
    void keypadEvent(KeypadEvent eKey){ 
    switch (keypad.getState()){ 
    case PRESSED: 

    Serial.print("Enter : "); 
    Serial.println(eKey); 
    delay(10); 

    Serial.write(254); 

    switch (eKey){ 
    case 'A': checkPassword(); delay(1); break; 
    case 'C': checkPassword(); delay(1); break; 
    case 'D': checkPassword(); delay(1); break; 
    case 'B': password.reset(); delay(1); break; 
    case '*': checkPassword(); break; 
    case '#': password.reset(); break; 

    default: password.append(eKey); delay(1); 
    } 
} 
} 
void checkPassword(){ 

if (password.evaluate()){ //if password is right open box 

    Serial.println("Accepted"); 
    Serial.write(254);delay(50); 
    //Add code to run if it works 
    myservo.write(5); //160deg 

     digitalWrite(11, HIGH);//turn on 
    delay(2000); //wait 5 seconds 
    digitalWrite(11, LOW);// turn off 
} 
else 
{ 

    Serial.println("Denied"); //if passwords wrong keep box locked 
    Serial.write(254);delay(10); 
    x++; 

    if(x==3) 
    //add code to run if it did not work 
    { 
    myservo.write(0); 
    digitalWrite(12, HIGH); 
    delay(500); 
    digitalWrite(12, LOW); 
    if (gsm.begin(9600)) 
    { 
    (sms.SendSMS("+XXXXX","Your Home Security system is being bridged")); 

    Serial.println("USER WARNED"); 
    } 

} 
} 
} 
; 
} 

В картине тот же самый код, кажется, не работает, когда я помещаю строкуотправить смс с SIM900 с помощью Arduino

if (gsm.begin(9600)) //Start the GSM COM 
    { 
    (sms.SendSMS("+8613668914901","Your Home Security system is being bridged")); 

, но эти строки отлично работают внутри функции настройки аннулируется.

Image

Как я могу исправить эту проблему? Внутри установки void эскиз отлично работает, но когда я также помещаю код в функцию CheckPassword, он не отправляет SMS.

Я также попытался создать функцию, скажем, пустое SMS и вызвать его в функции checkPassword, но это не решает проблему. Кстати, те же функции, когда вызывается в настройке void, отлично работают.

ответ

1

Вы должны инициализировать gsm только один раз, в функции setup.

В вашем коде вы пытаетесь инициализировать его снова в методе checkPassword, и это, очевидно, не сработает.

Таким образом, вы должны удалить линию gsm.begin(9600) с функции checkPassword.


UPDATE 1:

В вашей схеме вы резервируют булавки9, 8, 7, 6, 5, 4, 3, 2 для клавиатуры. Однако, в то же время вы бронируете булавки 2, 3 для вашего GSM модуля (см GSM.cpp):

#define _GSM_TXPIN_ 2 
#define _GSM_RXPIN_ 3 

Используя те же контакты для нескольких целей часто может привести (если не сделано должным образом) в неопределенном поведение, которое в лучшем случае означает, что ваш эскиз не выполняет то, что он должен делать, а в худшем случае он может повредить ваши компоненты.

Вы уже используете контакты 0, 1 для последовательной библиотеки, но в соответствии с вашим кодом булавки 10, 11, 13 еще должен быть свободен, если вы хотите переместить существующие контакты с компонентами ,

Обратите внимание также следующие предупреждения внутри библиотеки GSM:

[3] Мой щит не работает. Зачем?

Проверьте эти шаги, а затем попросите о помощи на странице проблем в коде google .

1) SIM900 и SIM908 требуют около 1 А во время самых сложных задач. Вы должны иметь внешний источник питания, который может обеспечить около 1 А при 8-12 V

2) Если мигает SIM90X (1 Гц) на несколько секунд и затем выключить, , вероятно, это проблема, либо сообщения. Проверьте переключатель/перемычки для последовательной связи.

3) Arduino Uno имеет 2 КБ ОЗУ. Библиотека занимает около 80% (мы работаем , чтобы уменьшить ее), если вы используете более 20% слева, Arduino может перезапустить или распечатать по серийным странным строкам.

4) Проверьте перемычку связи, источник питания (аккумулятор или внешний источник) и зарядите.

+0

Я удалил gsm.begin (9600) из функции checkPassword, эскиз работает хорошо, но все еще не отправлено сообщение, кажется, что он выполняет линию (sms.SendSMS («+ xxxxx», «xxxxx») и печатает следующую строку «User Warned», но на самом деле она не отправляет сообщение! Как я могу ее решить сейчас! оцените вашу помощь – drexxx

+0

Если вы можете предоставить мне ссылку на используемую вами библиотеку, которую я не смог найти , то я мог бы помочь вам @drexxx –

+0

могу ли я отправить его вам? – drexxx

Смежные вопросы