Advertisement
Guest User

Untitled

a guest
May 21st, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.69 KB | None | 0 0
  1. #include <EEPROM.h>
  2. #include "SIM900.h"
  3. #include "sms.h"
  4. #include <SoftwareSerial.h>
  5. #include <LiquidCrystal_I2C.h>
  6. #include <FreqMeasure.h>
  7. #include <Keypad.h>
  8.  
  9. SMSGSM sms;
  10.  
  11. LiquidCrystal_I2C lcd(0x27, 16, 2);
  12.  
  13. #define trigPin 3
  14. #define echoPin 4
  15. #define Pump_Water_Power_Line 12
  16. #define Pump_Water_Solar_cell 10
  17. #define Pump_Water_Battery 11
  18. #define SW_SMS 2
  19. #define SW_SYSTEM_ON 5    
  20. #define LED_SMS 13
  21. #define TANK_FLOAT_SW 6
  22.  
  23. #define Volt_Solar_cell A0
  24. #define Volt_Battery A1
  25.  
  26. const byte ROWS = 4; //four rows
  27. const byte COLS = 4; //three columns
  28. char keys[ROWS][COLS] = {
  29.   {'1','2','3','A'},
  30.   {'4','5','6','B'},
  31.   {'7','8','9','C'},
  32.   {'*','0','#','D'}
  33. };
  34.  
  35. byte rowPins[ROWS] = {22, 24, 26, 28}; //connect to the row pinouts of the keypad
  36. byte colPins[COLS] = {30, 32, 34, 36}; //connect to the column pinouts of the keypad
  37.  
  38. char key = NULL;
  39.  
  40. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
  41.  
  42. int DATA_Volt_Solar_cell;
  43. unsigned char V1;
  44. unsigned char V2;
  45. unsigned char V3;
  46. int DATA_Volt_Battery;
  47. unsigned char VM1;
  48. unsigned char VM2;
  49. unsigned char VM3;
  50.      
  51. int SYSTEM = 1;
  52. int Manual = 0;
  53. int Menu = 0;
  54. int DATA_TANK_FLOAT_SW;
  55.  
  56. int pump = 0;  // 0
  57. int I = 0;
  58. int a;
  59.  
  60. int MAX = 50;  
  61. int MIN = 150;  
  62.  
  63. int LIM_SENSOR = 250;
  64.  
  65. double sum = 0;
  66. double frequency;
  67. int count = 0;
  68.  
  69. char reNum[20];
  70. char Number[20] = "";  
  71. char MaxInput[20] = "";  
  72. char reMax[20] = "";  
  73. int Num_i = 1;
  74. int i = 1;
  75. int Num_A = 1;
  76.  
  77. void setup()
  78. {
  79.   pinMode(SW_SMS, INPUT);
  80.   pinMode(SW_SYSTEM_ON, INPUT);
  81.   pinMode(TANK_FLOAT_SW, INPUT);
  82.   pinMode(echoPin,INPUT);
  83.  
  84.   pinMode(Volt_Solar_cell, INPUT);
  85.   pinMode(Volt_Battery, INPUT);
  86.  
  87.   pinMode(trigPin,OUTPUT);
  88.   pinMode(LED_SMS,OUTPUT);
  89.  
  90.   pinMode(Pump_Water_Power_Line,OUTPUT);
  91.   pinMode(Pump_Water_Solar_cell,OUTPUT);
  92.   pinMode(Pump_Water_Battery,OUTPUT);
  93.  
  94.   digitalWrite(Pump_Water_Solar_cell,HIGH);
  95.   digitalWrite(Pump_Water_Battery,HIGH);
  96.   digitalWrite(Pump_Water_Power_Line,HIGH);
  97.  
  98.   Serial.begin(9600);
  99.   FreqMeasure.begin();
  100.   lcd.begin();
  101.   lcd.clear();
  102.   lcd.setCursor(0, 0);
  103.   lcd.print("   CONNECTING  ");
  104.   lcd.setCursor(0, 1);
  105.   lcd.print("    SIM900A    ");
  106.  
  107.   Serial.println("GSM Shield testing.");
  108.  
  109.   if (gsm.begin(9600))
  110.   {
  111.     Serial.println("status=READY");
  112.   }
  113.   else
  114.   {
  115.     Serial.println("status=IDLE");
  116.   }
  117.   lcd.clear();
  118.   for (Num_i = 0; Num_i <= 9; Num_i++)  
  119.   {
  120.     Number[Num_i] = EEPROM.read(Num_i + 10);    
  121.     reNum[Num_i] = Number[Num_i];    
  122.     Serial.print(reNum[Num_i]);
  123.   }  
  124.   for (Num_i = 0; Num_i <= 9; Num_i++)  
  125.   {
  126.     MaxInput[Num_i] = EEPROM.read(Num_i + 10);    
  127.     reMax[Num_i] = MaxInput[Num_i];    
  128.     Serial.print(reMax[Num_i]);
  129.   }  
  130.     Serial.println("");
  131. }
  132.  
  133.    
  134.  
  135. void loop()
  136. {
  137.   key = keypad.getKey();
  138.   DATA_TANK_FLOAT_SW = digitalRead(TANK_FLOAT_SW);
  139.  
  140.   DATA_Volt_Solar_cell = digitalRead(Volt_Solar_cell);
  141.   DATA_Volt_Battery = digitalRead(Volt_Battery);
  142. //////////////////////////////////////
  143.   if(SYSTEM == 1)
  144.   {
  145. //////////////////////////////////////////  
  146.     long duration,distance;
  147.     digitalWrite(trigPin,LOW);
  148.     delayMicroseconds(2);
  149.     digitalWrite(trigPin,HIGH);
  150.     delayMicroseconds(10);
  151.     digitalWrite(trigPin,LOW);
  152.     duration = pulseIn(echoPin,HIGH);
  153.     distance = (duration/2) /29.1;
  154.  
  155.     if(distance >= LIM_SENSOR)
  156.     {
  157.       distance = LIM_SENSOR;
  158.     }
  159.     if(distance <= 0)
  160.     {
  161.       distance = 0;
  162.     }
  163.  
  164.     Serial.print("distance = ");
  165.     Serial.print(distance);
  166.  
  167.     lcd.setCursor(0, 0);
  168.     lcd.print("Water height ");
  169.     lcd.setCursor(13, 0);
  170.     lcd.print("   ");
  171.     lcd.setCursor(13, 0);
  172.     lcd.print(distance);
  173. //////////////////////////////////      
  174.  
  175.     if(DATA_TANK_FLOAT_SW == 0)
  176.     {
  177.       pump = 0;
  178.     }      
  179.     if(DATA_TANK_FLOAT_SW == 1)
  180.     {
  181.       pump = 1;
  182.     }
  183.    
  184.     if(distance <= MAX-20) //20
  185.     {
  186.       pump = 0;
  187.       I = 0;
  188.     }
  189.     if(distance >= MIN+20) //20
  190.     {
  191.       pump = 1;
  192.       I = 1;
  193.     }    
  194. //////////////////////////////////
  195.     lcd.setCursor(0, 1);
  196.     lcd.print("Water pump ");
  197. ///////////////////////////////
  198.     if(pump == 1)
  199.     {
  200.       Serial.println("");
  201. ///////////////////////////////////////////////////////////////
  202.       if((DATA_Volt_Solar_cell == 1)&&(DATA_Volt_Battery == 1))
  203.       {      
  204.         digitalWrite(Pump_Water_Solar_cell,LOW);
  205.         digitalWrite(Pump_Water_Battery,HIGH);
  206.         digitalWrite(Pump_Water_Power_Line,HIGH);
  207.  
  208.         Serial.println("Pump_Water_Solar_cell");
  209.       }
  210. ///////////////////////////////////////////////////////////////
  211.       if((DATA_Volt_Solar_cell == 0)&&(DATA_Volt_Battery == 1))
  212.       {      
  213.         digitalWrite(Pump_Water_Solar_cell,HIGH);
  214.         digitalWrite(Pump_Water_Battery,LOW);
  215.         digitalWrite(Pump_Water_Power_Line,HIGH);
  216.  
  217.         Serial.println("Pump_Water_Battery");
  218.       }
  219. ///////////////////////////////////////////////////////////////
  220.       if((DATA_Volt_Solar_cell == 0)&&(DATA_Volt_Battery == 0))
  221.       {      
  222.         digitalWrite(Pump_Water_Solar_cell,HIGH);
  223.         digitalWrite(Pump_Water_Battery,HIGH);
  224.         digitalWrite(Pump_Water_Power_Line,LOW);
  225.  
  226.         Serial.println("Pump_Water_Power_Line");
  227.       }
  228. ///////////////////////////////////////////////////////////////
  229.       lcd.setCursor(11, 1);
  230.       lcd.print("   ");
  231.       lcd.setCursor(11, 1);
  232.       lcd.print("ON");
  233.     }
  234.     if(pump == 0)
  235.     {
  236.       digitalWrite(Pump_Water_Solar_cell,HIGH);
  237.       digitalWrite(Pump_Water_Battery,HIGH);
  238.       digitalWrite(Pump_Water_Power_Line,HIGH);      
  239.      
  240.       lcd.setCursor(11, 1);
  241.       lcd.print("   ");
  242.       lcd.setCursor(11, 1);
  243.       lcd.print("OFF");
  244.     }
  245.  
  246. //////////////////////////////////////////
  247.     if(pump == 1)
  248.     {
  249.       delay(500);
  250.       for(a=0;a<20;a++)
  251.       {
  252.         sum = sum + FreqMeasure.read();
  253.         count = count + 1;
  254.         frequency = F_CPU / (sum / count);
  255.         sum = 0;
  256.         count = 0;
  257.         delay(100);
  258.       }  
  259.       Serial.println(frequency);
  260.       if(frequency < 30)
  261.       {
  262.         SYSTEM = 0;
  263.         lcd.clear();
  264.         lcd.setCursor(0, 0);
  265.         lcd.print("SMS");
  266.  
  267.         if(sms.SendSMS("reNum", "Pump Water NO FIOW"))
  268.         {
  269.           Serial.println("\nSMS sent OK");
  270.         }
  271.  
  272.         Serial.println("Pump Water NO FIOW");
  273.         digitalWrite(LED_SMS,HIGH);
  274.         delay(500);
  275.         digitalWrite(LED_SMS,LOW);  
  276.         delay(500);
  277.         digitalWrite(LED_SMS,HIGH);
  278.         delay(500);  
  279.         digitalWrite(LED_SMS,LOW);  
  280.         delay(2000);  
  281.         lcd.clear();
  282.       }
  283.     }  
  284.   }
  285. //////////////////////////////////////////
  286.  
  287. //////////////////////////////////////////
  288.   if(key == '*')  //DATA_SW_SYSTEM == '*'
  289.   {
  290.     key = NULL;
  291.     SYSTEM = 1;
  292.     delay(500);
  293.     lcd.clear();      
  294.   }
  295.   if(key == 'A')  //DATA_SW_Manual == 'A'
  296.   {
  297.     key = NULL;
  298.     Manual = 1;
  299.     lcd.clear();
  300.     loop_Manual();
  301.     digitalWrite(Pump_Water_Solar_cell,HIGH);
  302.     digitalWrite(Pump_Water_Battery,HIGH);
  303.     digitalWrite(Pump_Water_Power_Line,HIGH);
  304.     lcd.clear();
  305.   }
  306.   if(key == 'B') //DATA_SW_Telephone == 'B'
  307.   {
  308.     key = NULL;
  309.     Menu = 1;
  310.     lcd.clear();
  311.   }
  312.   if(SYSTEM == 0)
  313.   {
  314.     pump = 0;
  315.     digitalWrite(Pump_Water_Solar_cell,HIGH);
  316.     digitalWrite(Pump_Water_Battery,HIGH);
  317.     digitalWrite(Pump_Water_Power_Line,HIGH);
  318.     lcd.clear();
  319.     lcd.setCursor(0, 0);
  320.     lcd.print("SYSTEM OFF");
  321.  
  322.     Serial.println("SYSTEM OFF");
  323.     delay(500);
  324.   }
  325. //////////////////////////////////////////
  326.   Serial.println("");
  327.   Serial.println("");
  328.   if(pump == 0)
  329.   {
  330.     delay(500);
  331.   }        
  332. }
  333.  
  334. void loop_Manual()
  335. {
  336.   int Solar_cell  = 0;
  337.   int Battery     = 0;
  338.   int Power_Line  = 0;
  339.   int Pump_Water  = 0;
  340.  
  341.   lcd.setCursor(0, 0);
  342.   lcd.print("PV = ");
  343.  
  344.   lcd.setCursor(8, 0);
  345.   lcd.print("BA = ");
  346.  
  347.   lcd.setCursor(0, 1);
  348.   lcd.print("PL = ");
  349.  
  350.   lcd.setCursor(8, 1);
  351.   lcd.print("PW = ");
  352.  
  353.   lcd.setCursor(4, 0);
  354.   lcd.print("OFF");
  355.   lcd.setCursor(12, 0);
  356.   lcd.print("OFF");
  357.   lcd.setCursor(4, 1);
  358.   lcd.print("OFF");
  359.   lcd.setCursor(12, 1);
  360.   lcd.print("OFF");
  361.  
  362.   while(Manual == 1)
  363.   {
  364.     key = keypad.getKey();
  365.  
  366.     if(key == 'A')  //DATA_SW_Manual == 'A'
  367.     {
  368.       key = NULL;
  369.       Manual = 0;
  370.     }
  371.     if(key == '1')  //DATA_SW_Solar_cell == '1'
  372.     {
  373.       key = NULL;
  374.      
  375.       lcd.setCursor(4, 0);
  376.       lcd.print("ON ");
  377.       lcd.setCursor(12, 0);
  378.       lcd.print("OFF");
  379.       lcd.setCursor(4, 1);
  380.       lcd.print("OFF");
  381.      
  382.       Solar_cell  = 1;
  383.       Battery     = 0;
  384.       Power_Line  = 0;
  385.     }
  386.     if(key == '2')  //DATA_SW_Battery == '2'
  387.     {
  388.       key = NULL;
  389.  
  390.       lcd.setCursor(4, 0);
  391.       lcd.print("OFF");
  392.       lcd.setCursor(12, 0);
  393.       lcd.print("ON ");
  394.       lcd.setCursor(4, 1);
  395.       lcd.print("OFF");
  396.      
  397.       Solar_cell  = 0;
  398.       Battery     = 1;
  399.       Power_Line  = 0;
  400.     }
  401.     if(key == '3')  //DATA_SW_Power_Line == '3'
  402.     {
  403.       key = NULL;
  404.  
  405.       lcd.setCursor(4, 0);
  406.       lcd.print("OFF");
  407.       lcd.setCursor(12, 0);
  408.       lcd.print("OFF");
  409.       lcd.setCursor(4, 1);
  410.       lcd.print("ON ");
  411.      
  412.       Solar_cell  = 0;
  413.       Battery     = 0;
  414.       Power_Line  = 1;
  415.     }
  416.     if((key == '#')&&(Pump_Water == 0))
  417.     {
  418.       key = NULL;
  419.       Pump_Water = 1;
  420.       lcd.setCursor(12, 1);
  421.       lcd.print("ON ");
  422.     }
  423.     if((key == '#')&&(Pump_Water == 1))
  424.     {
  425.       key = NULL;
  426.       Pump_Water = 0;
  427.       lcd.setCursor(12, 1);
  428.       lcd.print("OFF");
  429.     }
  430.    
  431.     if(Pump_Water == 1)
  432.     {
  433.       if(Solar_cell == 1)
  434.       {
  435.         digitalWrite(Pump_Water_Solar_cell,LOW);
  436.         digitalWrite(Pump_Water_Battery,HIGH);
  437.         digitalWrite(Pump_Water_Power_Line,HIGH);  
  438.       }
  439.       if(Battery == 1)
  440.       {
  441.         digitalWrite(Pump_Water_Solar_cell,HIGH);
  442.         digitalWrite(Pump_Water_Battery,LOW);
  443.         digitalWrite(Pump_Water_Power_Line,HIGH);  
  444.       }
  445.       if(Power_Line == 1)
  446.       {
  447.         digitalWrite(Pump_Water_Solar_cell,HIGH);
  448.         digitalWrite(Pump_Water_Battery,HIGH);
  449.         digitalWrite(Pump_Water_Power_Line,LOW);  
  450.       }
  451.     }
  452.     if(Pump_Water == 0)
  453.     {
  454.       digitalWrite(Pump_Water_Solar_cell,HIGH);
  455.       digitalWrite(Pump_Water_Battery,HIGH);
  456.       digitalWrite(Pump_Water_Power_Line,HIGH);  
  457.     }
  458.  
  459.     delay(50);
  460.   }
  461. }
  462. ///////////////////////////////////////////////
  463. void loop_Menu()
  464. {
  465.     lcd.setCursor(1, 0);        
  466.     lcd.print("A ==> Telephone         ");        
  467.     lcd.setCursor(0, 1);        
  468.     lcd.print("B ==> MAX               ");        
  469.     switch ( key )
  470.     {
  471.         case'A':
  472.             lcd.clear();      
  473.             key = NULL;
  474.             while (key != 'D')
  475.             {  
  476.                 if (key == 'C' || key == 'A' || key == 'B' || key == '#')
  477.                 {
  478.                     i = 1;
  479.                     key = NULL;    
  480.                     lcd.clear();
  481.                 }            
  482.                 if ((key != NULL) && (i <= 11))      
  483.                 {              
  484.                     Number[i - 1] = key;      
  485.                     i++;            
  486.                     key = NULL;
  487.                 }            
  488.                 lcd.clear();
  489.                 lcd.setCursor(0, 1);        
  490.                 lcd.print("Number = ");        
  491.                 for (Num_A = 0; Num_A <= 9; Num_A++)
  492.                 {              
  493.                     lcd.cursor();        
  494.                     lcd.setCursor(Num_A + 8, 1);                    
  495.                     lcd.print(Number[Num_A]);            
  496.                 }  
  497.                 lcd.cursor();        
  498.                 lcd.print(" ");        
  499.                 lcd.setCursor(i + 7, 1);    
  500.                 delay(100);
  501.             }
  502.             if (key == '*')              
  503.             {  
  504.                 for (Num_i = 0; Num_i <= 9; Num_i++)                
  505.                 {                  
  506.                     EEPROM.write(Num_i + 10, Number[Num_i]);
  507.                     Number[Num_i] = EEPROM.read(Num_i + 10);
  508.                     reNum[Num_i] = Number[Num_i];
  509.                 }     i = 1;                
  510.                 lcd.clear();                      
  511.                 lcd.setCursor(0, 1);                
  512.                 lcd.print("   Save Telephone   ");
  513.                 Serial.println("    Save  Telephone    ");
  514.                 sms.SendSMS(reNum,"SMS Telephone config ");  
  515.                 Serial.println(reNum);                
  516.                 delay(1000);  
  517.             }              
  518.             // lcd.setCursor(1, 3);    
  519.             lcd.print("D <== Exit");  
  520.             key = keypad.getKey();    
  521.             break;
  522.         case '2':
  523.             lcd.clear();      
  524.             key = NULL;
  525.             while (key != 'D')
  526.             {  
  527.                 if (key == 'C' || key == 'A' || key == 'B' || key == '#')
  528.                 {
  529.                     i = 1;
  530.                     key = NULL;    
  531.                     lcd.clear();
  532.                 }            
  533.                 if ((key != NULL) && (i <= 50))      
  534.                 {              
  535.                     MaxInput[i - 1] = key;      
  536.                     i++;            
  537.                     key = NULL;
  538.                 }            
  539.                 lcd.clear();
  540.                 lcd.setCursor(0, 1);        
  541.                 lcd.print("Max = ");        
  542.                 for (Num_A = 0; Num_A <= 9; Num_A++)
  543.                 {              
  544.                     lcd.cursor();        
  545.                     lcd.setCursor(Num_A + 8, 1);                    
  546.                     lcd.print(MaxInput[Num_A]);            
  547.                 }  
  548.                 lcd.cursor();        
  549.                 lcd.print(" ");        
  550.                 lcd.setCursor(i + 7, 1);    
  551.                 delay(100);
  552.             }
  553.             if (key == '*')              
  554.             {  
  555.                 for (Num_i = 0; Num_i <= 9; Num_i++)                
  556.                 {                  
  557.                     EEPROM.write(Num_i + 10, MaxInput[Num_i]);
  558.                     MaxInput[Num_i] = EEPROM.read(Num_i + 10);
  559.                     reMax[Num_i] = MaxInput[Num_i];
  560.                 }     i = 1;                
  561.                 lcd.clear();                      
  562.                 lcd.setCursor(0, 1);                
  563.                 lcd.print("   Save Max   ");
  564.                 Serial.println("    Save  Max    ");
  565.                 //sms.SendSMS(reNum,"Max Telephone config ");  
  566.                 Serial.println(reMax);                
  567.                 delay(1000);  
  568.             }
  569.            
  570.         break;
  571.     }
  572.     while (Menu == 1)
  573.     {          
  574.         char key = keypad.getKey();
  575.         if(key == 'B')  //DATA_SW_ == 'B'
  576.         {
  577.             key = NULL;
  578.             Menu = 0;
  579.         }
  580.     }  
  581.      
  582.      
  583. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement