Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <EEPROM.h>
- #include "SIM900.h"
- #include "sms.h"
- #include <SoftwareSerial.h>
- #include <LiquidCrystal_I2C.h>
- #include <FreqMeasure.h>
- #include <Keypad.h>
- SMSGSM sms;
- LiquidCrystal_I2C lcd(0x27, 16, 2);
- #define trigPin 3
- #define echoPin 4
- #define Pump_Water_Power_Line 12
- #define Pump_Water_Solar_cell 10
- #define Pump_Water_Battery 11
- #define SW_SMS 2
- #define SW_SYSTEM_ON 5
- #define LED_SMS 13
- #define TANK_FLOAT_SW 6
- #define Volt_Solar_cell A0
- #define Volt_Battery A1
- const byte ROWS = 4; //four rows
- const byte COLS = 4; //three columns
- char keys[ROWS][COLS] = {
- {'1','2','3','A'},
- {'4','5','6','B'},
- {'7','8','9','C'},
- {'*','0','#','D'}
- };
- byte rowPins[ROWS] = {22, 24, 26, 28}; //connect to the row pinouts of the keypad
- byte colPins[COLS] = {30, 32, 34, 36}; //connect to the column pinouts of the keypad
- char key = NULL;
- Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- int DATA_Volt_Solar_cell;
- unsigned char V1;
- unsigned char V2;
- unsigned char V3;
- int DATA_Volt_Battery;
- unsigned char VM1;
- unsigned char VM2;
- unsigned char VM3;
- int SYSTEM = 1;
- int Manual = 0;
- int Menu = 0;
- int DATA_TANK_FLOAT_SW;
- int pump = 0; // 0
- int I = 0;
- int a;
- int MAX = 50;
- int MIN = 150;
- int LIM_SENSOR = 250;
- double sum = 0;
- double frequency;
- int count = 0;
- char reNum[20];
- char Number[20] = "";
- char MaxInput[20] = "";
- char reMax[20] = "";
- int Num_i = 1;
- int i = 1;
- int Num_A = 1;
- void setup()
- {
- pinMode(SW_SMS, INPUT);
- pinMode(SW_SYSTEM_ON, INPUT);
- pinMode(TANK_FLOAT_SW, INPUT);
- pinMode(echoPin,INPUT);
- pinMode(Volt_Solar_cell, INPUT);
- pinMode(Volt_Battery, INPUT);
- pinMode(trigPin,OUTPUT);
- pinMode(LED_SMS,OUTPUT);
- pinMode(Pump_Water_Power_Line,OUTPUT);
- pinMode(Pump_Water_Solar_cell,OUTPUT);
- pinMode(Pump_Water_Battery,OUTPUT);
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- Serial.begin(9600);
- FreqMeasure.begin();
- lcd.begin();
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print(" CONNECTING ");
- lcd.setCursor(0, 1);
- lcd.print(" SIM900A ");
- Serial.println("GSM Shield testing.");
- if (gsm.begin(9600))
- {
- Serial.println("status=READY");
- }
- else
- {
- Serial.println("status=IDLE");
- }
- lcd.clear();
- for (Num_i = 0; Num_i <= 9; Num_i++)
- {
- Number[Num_i] = EEPROM.read(Num_i + 10);
- reNum[Num_i] = Number[Num_i];
- Serial.print(reNum[Num_i]);
- }
- for (Num_i = 0; Num_i <= 9; Num_i++)
- {
- MaxInput[Num_i] = EEPROM.read(Num_i + 10);
- reMax[Num_i] = MaxInput[Num_i];
- Serial.print(reMax[Num_i]);
- }
- Serial.println("");
- }
- void loop()
- {
- key = keypad.getKey();
- DATA_TANK_FLOAT_SW = digitalRead(TANK_FLOAT_SW);
- DATA_Volt_Solar_cell = digitalRead(Volt_Solar_cell);
- DATA_Volt_Battery = digitalRead(Volt_Battery);
- //////////////////////////////////////
- if(SYSTEM == 1)
- {
- //////////////////////////////////////////
- long duration,distance;
- digitalWrite(trigPin,LOW);
- delayMicroseconds(2);
- digitalWrite(trigPin,HIGH);
- delayMicroseconds(10);
- digitalWrite(trigPin,LOW);
- duration = pulseIn(echoPin,HIGH);
- distance = (duration/2) /29.1;
- if(distance >= LIM_SENSOR)
- {
- distance = LIM_SENSOR;
- }
- if(distance <= 0)
- {
- distance = 0;
- }
- Serial.print("distance = ");
- Serial.print(distance);
- lcd.setCursor(0, 0);
- lcd.print("Water height ");
- lcd.setCursor(13, 0);
- lcd.print(" ");
- lcd.setCursor(13, 0);
- lcd.print(distance);
- //////////////////////////////////
- if(DATA_TANK_FLOAT_SW == 0)
- {
- pump = 0;
- }
- if(DATA_TANK_FLOAT_SW == 1)
- {
- pump = 1;
- }
- if(distance <= MAX-20) //20
- {
- pump = 0;
- I = 0;
- }
- if(distance >= MIN+20) //20
- {
- pump = 1;
- I = 1;
- }
- //////////////////////////////////
- lcd.setCursor(0, 1);
- lcd.print("Water pump ");
- ///////////////////////////////
- if(pump == 1)
- {
- Serial.println("");
- ///////////////////////////////////////////////////////////////
- if((DATA_Volt_Solar_cell == 1)&&(DATA_Volt_Battery == 1))
- {
- digitalWrite(Pump_Water_Solar_cell,LOW);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- Serial.println("Pump_Water_Solar_cell");
- }
- ///////////////////////////////////////////////////////////////
- if((DATA_Volt_Solar_cell == 0)&&(DATA_Volt_Battery == 1))
- {
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,LOW);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- Serial.println("Pump_Water_Battery");
- }
- ///////////////////////////////////////////////////////////////
- if((DATA_Volt_Solar_cell == 0)&&(DATA_Volt_Battery == 0))
- {
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,LOW);
- Serial.println("Pump_Water_Power_Line");
- }
- ///////////////////////////////////////////////////////////////
- lcd.setCursor(11, 1);
- lcd.print(" ");
- lcd.setCursor(11, 1);
- lcd.print("ON");
- }
- if(pump == 0)
- {
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- lcd.setCursor(11, 1);
- lcd.print(" ");
- lcd.setCursor(11, 1);
- lcd.print("OFF");
- }
- //////////////////////////////////////////
- if(pump == 1)
- {
- delay(500);
- for(a=0;a<20;a++)
- {
- sum = sum + FreqMeasure.read();
- count = count + 1;
- frequency = F_CPU / (sum / count);
- sum = 0;
- count = 0;
- delay(100);
- }
- Serial.println(frequency);
- if(frequency < 30)
- {
- SYSTEM = 0;
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("SMS");
- if(sms.SendSMS("reNum", "Pump Water NO FIOW"))
- {
- Serial.println("\nSMS sent OK");
- }
- Serial.println("Pump Water NO FIOW");
- digitalWrite(LED_SMS,HIGH);
- delay(500);
- digitalWrite(LED_SMS,LOW);
- delay(500);
- digitalWrite(LED_SMS,HIGH);
- delay(500);
- digitalWrite(LED_SMS,LOW);
- delay(2000);
- lcd.clear();
- }
- }
- }
- //////////////////////////////////////////
- //////////////////////////////////////////
- if(key == '*') //DATA_SW_SYSTEM == '*'
- {
- key = NULL;
- SYSTEM = 1;
- delay(500);
- lcd.clear();
- }
- if(key == 'A') //DATA_SW_Manual == 'A'
- {
- key = NULL;
- Manual = 1;
- lcd.clear();
- loop_Manual();
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- lcd.clear();
- }
- if(key == 'B') //DATA_SW_Telephone == 'B'
- {
- key = NULL;
- Menu = 1;
- lcd.clear();
- }
- if(SYSTEM == 0)
- {
- pump = 0;
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("SYSTEM OFF");
- Serial.println("SYSTEM OFF");
- delay(500);
- }
- //////////////////////////////////////////
- Serial.println("");
- Serial.println("");
- if(pump == 0)
- {
- delay(500);
- }
- }
- void loop_Manual()
- {
- int Solar_cell = 0;
- int Battery = 0;
- int Power_Line = 0;
- int Pump_Water = 0;
- lcd.setCursor(0, 0);
- lcd.print("PV = ");
- lcd.setCursor(8, 0);
- lcd.print("BA = ");
- lcd.setCursor(0, 1);
- lcd.print("PL = ");
- lcd.setCursor(8, 1);
- lcd.print("PW = ");
- lcd.setCursor(4, 0);
- lcd.print("OFF");
- lcd.setCursor(12, 0);
- lcd.print("OFF");
- lcd.setCursor(4, 1);
- lcd.print("OFF");
- lcd.setCursor(12, 1);
- lcd.print("OFF");
- while(Manual == 1)
- {
- key = keypad.getKey();
- if(key == 'A') //DATA_SW_Manual == 'A'
- {
- key = NULL;
- Manual = 0;
- }
- if(key == '1') //DATA_SW_Solar_cell == '1'
- {
- key = NULL;
- lcd.setCursor(4, 0);
- lcd.print("ON ");
- lcd.setCursor(12, 0);
- lcd.print("OFF");
- lcd.setCursor(4, 1);
- lcd.print("OFF");
- Solar_cell = 1;
- Battery = 0;
- Power_Line = 0;
- }
- if(key == '2') //DATA_SW_Battery == '2'
- {
- key = NULL;
- lcd.setCursor(4, 0);
- lcd.print("OFF");
- lcd.setCursor(12, 0);
- lcd.print("ON ");
- lcd.setCursor(4, 1);
- lcd.print("OFF");
- Solar_cell = 0;
- Battery = 1;
- Power_Line = 0;
- }
- if(key == '3') //DATA_SW_Power_Line == '3'
- {
- key = NULL;
- lcd.setCursor(4, 0);
- lcd.print("OFF");
- lcd.setCursor(12, 0);
- lcd.print("OFF");
- lcd.setCursor(4, 1);
- lcd.print("ON ");
- Solar_cell = 0;
- Battery = 0;
- Power_Line = 1;
- }
- if((key == '#')&&(Pump_Water == 0))
- {
- key = NULL;
- Pump_Water = 1;
- lcd.setCursor(12, 1);
- lcd.print("ON ");
- }
- if((key == '#')&&(Pump_Water == 1))
- {
- key = NULL;
- Pump_Water = 0;
- lcd.setCursor(12, 1);
- lcd.print("OFF");
- }
- if(Pump_Water == 1)
- {
- if(Solar_cell == 1)
- {
- digitalWrite(Pump_Water_Solar_cell,LOW);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- }
- if(Battery == 1)
- {
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,LOW);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- }
- if(Power_Line == 1)
- {
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,LOW);
- }
- }
- if(Pump_Water == 0)
- {
- digitalWrite(Pump_Water_Solar_cell,HIGH);
- digitalWrite(Pump_Water_Battery,HIGH);
- digitalWrite(Pump_Water_Power_Line,HIGH);
- }
- delay(50);
- }
- }
- ///////////////////////////////////////////////
- void loop_Menu()
- {
- lcd.setCursor(1, 0);
- lcd.print("A ==> Telephone ");
- lcd.setCursor(0, 1);
- lcd.print("B ==> MAX ");
- switch ( key )
- {
- case'A':
- lcd.clear();
- key = NULL;
- while (key != 'D')
- {
- if (key == 'C' || key == 'A' || key == 'B' || key == '#')
- {
- i = 1;
- key = NULL;
- lcd.clear();
- }
- if ((key != NULL) && (i <= 11))
- {
- Number[i - 1] = key;
- i++;
- key = NULL;
- }
- lcd.clear();
- lcd.setCursor(0, 1);
- lcd.print("Number = ");
- for (Num_A = 0; Num_A <= 9; Num_A++)
- {
- lcd.cursor();
- lcd.setCursor(Num_A + 8, 1);
- lcd.print(Number[Num_A]);
- }
- lcd.cursor();
- lcd.print(" ");
- lcd.setCursor(i + 7, 1);
- delay(100);
- }
- if (key == '*')
- {
- for (Num_i = 0; Num_i <= 9; Num_i++)
- {
- EEPROM.write(Num_i + 10, Number[Num_i]);
- Number[Num_i] = EEPROM.read(Num_i + 10);
- reNum[Num_i] = Number[Num_i];
- } i = 1;
- lcd.clear();
- lcd.setCursor(0, 1);
- lcd.print(" Save Telephone ");
- Serial.println(" Save Telephone ");
- sms.SendSMS(reNum,"SMS Telephone config ");
- Serial.println(reNum);
- delay(1000);
- }
- // lcd.setCursor(1, 3);
- lcd.print("D <== Exit");
- key = keypad.getKey();
- break;
- case '2':
- lcd.clear();
- key = NULL;
- while (key != 'D')
- {
- if (key == 'C' || key == 'A' || key == 'B' || key == '#')
- {
- i = 1;
- key = NULL;
- lcd.clear();
- }
- if ((key != NULL) && (i <= 50))
- {
- MaxInput[i - 1] = key;
- i++;
- key = NULL;
- }
- lcd.clear();
- lcd.setCursor(0, 1);
- lcd.print("Max = ");
- for (Num_A = 0; Num_A <= 9; Num_A++)
- {
- lcd.cursor();
- lcd.setCursor(Num_A + 8, 1);
- lcd.print(MaxInput[Num_A]);
- }
- lcd.cursor();
- lcd.print(" ");
- lcd.setCursor(i + 7, 1);
- delay(100);
- }
- if (key == '*')
- {
- for (Num_i = 0; Num_i <= 9; Num_i++)
- {
- EEPROM.write(Num_i + 10, MaxInput[Num_i]);
- MaxInput[Num_i] = EEPROM.read(Num_i + 10);
- reMax[Num_i] = MaxInput[Num_i];
- } i = 1;
- lcd.clear();
- lcd.setCursor(0, 1);
- lcd.print(" Save Max ");
- Serial.println(" Save Max ");
- //sms.SendSMS(reNum,"Max Telephone config ");
- Serial.println(reMax);
- delay(1000);
- }
- break;
- }
- while (Menu == 1)
- {
- char key = keypad.getKey();
- if(key == 'B') //DATA_SW_ == 'B'
- {
- key = NULL;
- Menu = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement