Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- #include <SoftwareSerial.h>
- #include "cuGSM_basic_lbr.h"
- #include "cuGSM_SMS_lbr.h"
- #include "DHT.h"
- #define dhtTYPE DHT11
- #define UNO_MODE /** USED BY MODEM LIBRARY **/
- #define next_it {delay(5000); continue;}
- /********************************* CONSTANTS VARIABLES *********************************/
- const int pumpPIN = 9; /** DEFINE PUMP WATER **/
- const int dhtPIN = 8; /** DEFINE DHT11 AIR SENSOR **/
- const int powerPIN = 7; /** PIN USED TO ON/OFF GSM MODEM **/
- const int resetPIN = 6; /** PIN USED TO RESET GSM MODEM **/
- const int statusPIN = 5; /** PIN USED TO ON/OFF GSM MODEM **/
- const int relayPIN = 4; /** PIN USED TO ON/OFF RELAY **/
- const int soilPIN = A2; /** DEFINE SOIL SENSOR **/
- const int lightPIN = A1; /** DEFINE LIGHT SENSOR **/
- const int swimmerPIN = A0; /** DEFINE SWOMMER SENSOR **/
- const int BUFFDSIZE = 160; /** USED BY MODEM LIBRARY **/
- const int ORDERS_COUNT = 5; /** AMOUNT OF COMMANDS **/
- const int SENSORS_COUNT = 5; /** AMOUNT OF SENSORS **/
- const int smsInterval = 30000; /** INTERVAL TIME TO CHECK MESSAGES **/
- const int intervalCheck = 30000; /** ... **/
- int i_sensorValue = 0;
- float fl_sensorValue = 0;
- char ch_sensorValue[] = {0};
- /********************************* LIBRARY VARIABLES *********************************/
- char buffd[BUFFDSIZE];
- char readBuffer[160];
- char tmpChar[20];
- char secvar[40];
- char ch;
- int res = 0;
- int i = 0;
- int powerState = 0;
- int state = 0;
- /********************************* GLOBAL VARIABLES *********************************/
- bool relayPOWER = false; /** DEFINE RELAY STATE **/
- bool pumpPOWER = false; /** DEFINE PUMP WATER STATE **/
- bool registerSim = false; /** IF TRUE SIM CARD REGISTER SUCCESS **/
- int timeToCheckSMS = 0; /** PRIMARY VALUE TO CHECK SMS **/
- int timeToMeasure = 0; /** PRIMARY VALUE TO EXECUTE MEASURES **/
- char* testNumber = {0}; /** PHONE NUMBER TO AUTHORIZATION **/
- static char batteryLevel[5]; /** BATTERY LEVEL - VALUE IN mV **/
- static char phoneNumber[11] = "48537037054"; /** ADMIN PHONE NUMBER **/
- static char *SMS_ORDERS[] = {"BATTERY", "MEASURE", "PUMP", "USSD", "RESTART"}; /** SMS ORDER **/
- static char *SMS_ORDERS_VALUES[] = {"TEMP", "HUMI", "LIGHT", "SOIL", "SWIMMER"}; /** SMS ORDER VALUE **/
- static char *MEASURE_NAME[]= {"TEMPERATURE (C): ", "HUMIDITY (%): ", "LIGHT (%): ", "SOIL (%): ", "SWIMMER (%): "}; /** RESPONSE SMS MEASURE **/
- SoftwareSerial agsmSerial(2, 3); /** GSM RX => 2 ,GSM TX => 3 **/
- DHT dht(dhtPIN, dhtTYPE);
- /********************************* GLOBAL FUNCTIONS *********************************/
- void setupDevice(){
- pinMode(resetPIN, OUTPUT);
- digitalWrite(resetPIN, HIGH);
- pinMode(powerPIN, OUTPUT);
- digitalWrite(powerPIN, HIGH);
- pinMode(statusPIN, INPUT);
- pinMode(relayPIN, OUTPUT);
- digitalWrite(relayPIN, relayPOWER);
- pinMode(pumpPIN, OUTPUT);
- digitalWrite(pumpPIN, pumpPOWER);
- delay(100);
- }
- char* getBatteryLevel(){
- fATcmd(F("+CBC"));
- parseResponce("OK", "+CBC:", batteryLevel, ",", 2);
- return batteryLevel;
- }
- int getSmsOrder(char order[]) {
- for (int i = 0; i < ORDERS_COUNT; i++) {
- if (strcmp(SMS_ORDERS[i], order) == 0)
- return i;
- }
- return -1;
- }
- int getSmsOrderValue(char order[]) {
- for (int i = 0; i < ORDERS_COUNT; i++) {
- if (strcmp(SMS_ORDERS_VALUES[i], order) == 0)
- return i;
- }
- return -1;
- }
- void relayChangeState() {
- relayPOWER=!(relayPOWER);
- digitalWrite(relayPIN, relayPOWER);
- }
- void pumpChangeState(){
- pumpPOWER=!(pumpPOWER);
- digitalWrite(pumpPIN, pumpPOWER);
- }
- bool authNumber(int l){
- char delimiter[] = ",";
- char tmpIndex[] = {0};
- char* cutBuffd = {0};
- *tmpChar = {0};
- strcpy(tmpChar, "+CMGR=");
- sprintf(tmpIndex,"%d", l);
- strcat(tmpChar, tmpIndex);
- sendATcommand(tmpChar, "OK", "+CMS ERROR:", 1);
- cutBuffd = strtok(buffd, delimiter);
- testNumber = strtok(NULL, delimiter);
- for(int k = 2; k < strlen(testNumber) - 1; k++){
- Serial.println("leci for");
- if(strcmp(testNumber[k], phoneNumber[k-2]) != 0){
- Serial.println("leci if");
- clearBUFFD();
- clearagsmSerial();
- return false;
- }
- }
- clearBUFFD();
- clearagsmSerial();
- Serial.flush();
- agsmSerial.flush();
- return true;
- }
- void setup(){
- /********************** PREPARE DEVICE TO WORK **********************/
- Serial.begin(57600); /** START SERIAL CONNECTION **/
- agsmSerial.begin(9600); /** NEXT, MODEM SETUP **/
- clearagsmSerial();
- clearSerial();
- Serial.flush();
- agsmSerial.flush();
- /********************** SET UP GSM MODEM ******************************/
- setupDevice(); /** CONFIGURE UNO I/O TO BE USED WITH MODEM **/
- delay(500);
- powerOnModem(); /** POWER ON MODEM **/
- clearBUFFD();
- while (!registerSim) {
- Serial.println(F("CHECKING SIM CARD STATUS...")); /** CHECK REGISTER IN NETWORK **/
- res = fATcmd(F("+CREG?"));
- res = parseResponce("OK", "+CREG:", tmpChar, ",", 1);
- res = atoi(tmpChar);
- if (res == 0) {
- fATcmd(F("+CPIN=5024"), 20, "OK", "+CMS ERROR:");
- delay(3000);
- }
- registerSim = true;
- }
- /** SEND MESSAGE TO ADMIN **/
- //sendSMS(phoneNumber, "SIM CARD REGISTER SUCCESS. AHOJ DEVICE IS READY.");
- Serial.println("[STS] - SIM CARD IS REGISTERED.");
- }
- int doSMSOrders(int counterSMS){
- int accIndex = 1; /** ACTUAL INDEX OF SMS **/
- char delimiters[] = ":";
- char* order_type = {0};
- char* order_value = {0};
- char sms[20];
- char smsResponce[] = {0};
- Serial.print("[STS]: SMS NUMBER IN QUEUE: "); /** WHILE MESSAGES ARE IN QUEUE **/
- Serial.println(counterSMS);
- Serial.println("---- START READING ORDERS ----");
- Serial.flush();
- clearagsmSerial();
- while(accIndex < counterSMS+1){
- order_type = strtok(buffd, delimiters);
- order_value = strtok(NULL, delimiters);
- Serial.print("[STS]: READING SMS: ");
- Serial.println(accIndex);
- Serial.flush();
- readSMS(accIndex);
- if(authNumber(accIndex) != false){
- Serial.println("[RES]: SENDER: ADMINISTRATOR");
- accIndex++;
- }
- else{
- Serial.println("[RES]: SENDER: UNKOWN");
- accIndex++;
- }
- }
- fATcmd(F("+CMGD=1,4"), 20, "OK", "+CMS ERROR:");
- Serial.println("--- END CHECK LOOP --- ");
- }
- void loop(){
- Serial.println("\n--- CHECK MESSAGE LOOP ---");
- if((timeToCheckSMS <= 0) && (registerSim == true)){
- Serial.print("[STS] - CHECKING MESSAGES...");
- noSMS = 0;
- listSMS();
- if(noSMS > 0){
- Serial.print("\n[STS] - WE HAVE SOME SMS...: ");
- Serial.println(noSMS);
- doSMSOrders(noSMS);
- }
- if(noSMS <= 0)
- Serial.print("\n[STS] - MESSAGE BOX IS EMPTY.\n");
- Serial.flush();
- timeToCheckSMS = smsInterval;
- Serial.println("--- WAIT FOR NEXT CHECK ---");
- delay(15000); /** INTERVAL CHECK **/
- timeToCheckSMS = timeToCheckSMS - intervalCheck;
- timeToMeasure = timeToMeasure - intervalCheck;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement