#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");
}
}
}
}
;
}
在图片中,当我放置线条时,相同的代码似乎不起作用
if (gsm.begin(9600)) //Start the GSM COM
{
(sms.SendSMS("+8613668914901","Your Home Security system is being bridged"));
但是这行代码在 void setup 函数中效果很好。
如何解决这个问题?在 void 设置内,草图工作正常,但当我也将代码放入函数 CheckPassword 中时,它不会发送短信。
我还尝试创建一个函数,比如说 void SMS 并在 checkPassword 函数中调用它,但它不能解决问题,顺便说一句,在 void 设置中调用相同的函数可以正常工作。
您应该在
gsm
函数中仅初始化 setup
一次。
在您的代码中,您尝试在
checkPassword
方法中再次初始化它,这显然是行不通的。
因此,您应该从
gsm.begin(9600)
函数中删除 checkPassword
行。
更新1:
在您的方案中,您为键盘保留 pins 9, 8, 7, 6, 5, 4, 3, 2。但是,同时您为 GSM 模块保留引脚 2、3(参见
GSM.cpp
):
#define _GSM_TXPIN_ 2
#define _GSM_RXPIN_ 3
将相同的引脚用于多种目的通常会导致(如果没有正确完成)未定义的行为,这在最好的情况下意味着您的草图没有做它应该做的事情,而在最坏的情况下,它可能会损坏您的组件.
您已经在 Serial 库中使用引脚 0、1,但根据您的代码,如果您想将现有引脚重新定位到组件,则引脚 10、11、13 应该仍然空闲。
另请注意 GSM 库中的以下 警告:
[3] 我的盾牌不起作用。为什么?
检查此步骤,然后在 Google 上的问题页面上寻求支持 代码。
1) SIM900 和 SIM908 在执行最困难的任务时需要大约 1 A 电流。 您应该有一个可以提供大约 8-12 V 时为 1 A
2) 如果 SIM90X 闪烁 (1 Hz) 几秒钟然后关闭, 可能是沟通的问题。检查开关/跳线 用于串行通信。
3) Arduino Uno 有 2 KB RAM。图书馆大约占用80%(我们正在努力 来减少它),如果你使用了超过20%剩余,Arduino可以重新启动 或打印连续的奇怪字符串。
4)检查通讯跳线、电源(电池或外接)和充电。
如何修复#include“sms.h”没有这样的目录?