Advertisement
Guest User

Untitled

a guest
Jan 25th, 2016
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.38 KB | None | 0 0
  1. #include "Access.h"
  2. #include <LiquidCrystal.h>
  3. #include <EEPROM.h>
  4. #include <Time\Time.h>
  5.  
  6. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  7. const int led = 6;
  8.  
  9. enum NavigationButtons
  10. {
  11.     CONFIRM = 10,
  12.     BACKING = 11
  13. };
  14.  
  15. enum Views
  16. {
  17.     LOGIN_VIEW = 0,
  18.     PASSWORD_VIEW = 1,
  19.     ERROR_VIEW = 2,
  20.     USSER_VIEW = 3,
  21.     CHANGE_PASSWORD_VIEW_LOGIN = 5,
  22.     CHANGE_PASSWORD_VIEW_OLD_PASSWORD = 6,
  23.     CHANGE_PASSWORD_VIEW_PASSWORD1 = 7,
  24.     CHANGE_PASSWORD_VIEW_PASSWORD2 = 8,
  25.     ADD_USER_LOGIN = 9,
  26.     ADD_USER_PASSWORD = 10,
  27.     ADD_USER_CONFIRM_PASSWORD = 11,
  28.    
  29. };
  30.  
  31. class User
  32. {
  33. private:
  34.     short _password;
  35.     short _login;
  36.     short _oldPassword1;
  37.     short _oldPassword2;
  38.     bool _wasSet;
  39. public:
  40.     User()
  41.     {
  42.         _login = -1;
  43.     }
  44.     short GetLogin()
  45.     {
  46.         return _login;
  47.     }
  48.     short GetPassword()
  49.     {
  50.         return _password;
  51.     }
  52.     short GetOldPassword1()
  53.     {
  54.         return _oldPassword1;
  55.     }
  56.     short GetOldPassword2()
  57.     {
  58.         return _oldPassword2;
  59.     }
  60.     void SetLogin(short value)
  61.     {
  62.         _login = value;
  63.         _wasSet = true;
  64.     }
  65.     void SetPassword(short value)
  66.     {
  67.         _oldPassword2 = _oldPassword1;
  68.         _oldPassword1 = _password;
  69.         _password = value;
  70.     }
  71.  
  72.     bool IsEmpty()
  73.     {
  74.         return _login == -1;
  75.     }
  76.  
  77.     bool IsSet()
  78.     {
  79.         return _wasSet;
  80.     }
  81. };
  82.  
  83. class SingleHistory
  84. {
  85.     short _id;
  86.  
  87. public:
  88.     SingleHistory()
  89.     {
  90.         _id = -1;
  91.     }
  92.  
  93.     short GetName()
  94.     {
  95.         return _id;
  96.     }
  97.  
  98.     void SetValue(short id)
  99.     {
  100.         _id = id;
  101.     }
  102.  
  103.     bool IsSet()
  104.     {
  105.         return _id != -1;
  106.     }
  107. };
  108.  
  109. class HistoryIterator
  110. {
  111.     SingleHistory* _history;
  112.     short _count;
  113.     short _currentindex;
  114.  
  115. public:
  116.     HistoryIterator(short count, SingleHistory* history)
  117.     {
  118.         _count = count;
  119.         _currentindex = 0;
  120.         _history = history;
  121.     }
  122.  
  123.     bool CanMoveNext()
  124.     {
  125.         return _currentindex < _count;
  126.     }
  127.  
  128.     void MoveNext()
  129.     {
  130.         _currentindex++;
  131.     }
  132.  
  133.     SingleHistory GetValue()
  134.     {
  135.         return _history[_currentindex];
  136.     }
  137.  
  138. };
  139.  
  140. class History
  141. {
  142. public:
  143.     SingleHistory _history[50];
  144.     long count;
  145. public:
  146.     History()
  147.     {
  148.         EEPROM.get(sizeof(short), count);
  149.         if (count == -1)
  150.         {
  151.             count = 0;
  152.             EEPROM.put(sizeof(short), count);
  153.         }
  154.         int index = 0;
  155.         for (int i = sizeof(short) + sizeof(long); i < 50 * sizeof(short); i=i+sizeof(short))
  156.         {
  157.             EEPROM.get(i, _history[index]);
  158.             Serial.println(_history[index].GetName());
  159.             index++;
  160.         }
  161.     }
  162.     void Add(SingleHistory history)
  163.     {
  164.         _history[count] = history;
  165.         EEPROM.put(sizeof(short)+sizeof(long) + (count%50)*sizeof(short), history);
  166.         count++;
  167.         EEPROM.put(sizeof(short), count);
  168.     }
  169. };
  170.  
  171. class EpromAccessService
  172. {
  173. private:
  174.     User _cache;
  175.     short index;
  176. public:
  177.     EpromAccessService()
  178.     {
  179.         User currentUser;  
  180.         EEPROM.get(sizeof(short) , currentUser);
  181.  
  182.         if (currentUser.GetLogin() != 123)
  183.         {
  184.             Serial.println("Serial 123");
  185.             Serial.print("History");
  186.             Serial.println(sizeof(History));
  187.             index = sizeof(short) + sizeof(History);
  188.             User user = User();
  189.             user.SetLogin(123);
  190.             user.SetPassword(321);
  191.             AddUser(user);
  192.         }
  193.         else
  194.         {
  195.             EEPROM.get(0, index);
  196.             Serial.println("Serial else");
  197.         }
  198.     }
  199.     User GetCurrentUser()
  200.     {
  201.         return _cache;
  202.     }
  203.  
  204.     void UpdateUser(User user)
  205.     {
  206.         Serial.println(user.GetPassword());
  207.         _cache = user;
  208.     }
  209.  
  210.     void AddUser(User user)
  211.     {
  212.         EEPROM.put(index, user);
  213.         index = index + sizeof(User);
  214.         EEPROM.write(0, index);
  215.     }
  216.  
  217.     User GetUserById(short id)
  218.     {
  219.         if (_cache.GetLogin() == id)
  220.         {
  221.             return _cache;
  222.         }
  223.  
  224.         int length = EEPROM.length();
  225.         User currentUser;
  226.  
  227.         for (int i = sizeof(short) + sizeof(History); i<length; i = i + sizeof(User))
  228.         {
  229.             EEPROM.get(i, currentUser);
  230.             Serial.print("Id=");
  231.             Serial.println(currentUser.GetLogin());
  232.             if (currentUser.GetLogin() == id)
  233.             {
  234.                 _cache = currentUser;
  235.                 return currentUser;
  236.             }
  237.         }
  238.  
  239.         currentUser = User();
  240.         currentUser.SetLogin(-1);
  241.         return currentUser;
  242.     }
  243.  
  244. };
  245.  
  246. class ValueWrapper
  247. {
  248.     short _values[5];
  249.     int index;
  250.  
  251. public:
  252.     ValueWrapper()
  253.     {
  254.         index = 0;
  255.     }
  256.     void AddValue(short value)
  257.     {
  258.         if (index <5)
  259.         {
  260.             _values[index] = value;
  261.             index++;
  262.         }
  263.     }
  264.  
  265.     short GetValue()
  266.     {
  267.         short resultValue = 0;
  268.         for (int i = 0; i<index; i++)
  269.         {
  270.             if (i<index - 1)
  271.             {
  272.                 resultValue = (resultValue + _values[i]) * 10;
  273.             }
  274.             else
  275.             {
  276.                 resultValue += _values[i];
  277.             }
  278.         }
  279.  
  280.         return resultValue;
  281.     }
  282.  
  283.     void Clear()
  284.     {
  285.         for (int i = 0; i<5; i++)
  286.         {
  287.             _values[i] = -1;
  288.         }
  289.  
  290.         index = 0;
  291.     }
  292. };
  293.  
  294. class ViewManager
  295. {
  296. public:
  297.  
  298.     void SetView(Views view)
  299.     {
  300.         switch (view)
  301.         {
  302.             case LOGIN_VIEW: SetView("Podaj Login"); break;
  303.             case PASSWORD_VIEW:SetView("Haslo"); break;
  304.             case ERROR_VIEW: SetView("Error"); break;
  305.             case USSER_VIEW: SetView("Witaj!"); break;
  306.             case CHANGE_PASSWORD_VIEW_LOGIN:SetView("Podaj Login"); break;
  307.             case CHANGE_PASSWORD_VIEW_OLD_PASSWORD:SetView("Old password"); break;
  308.             case CHANGE_PASSWORD_VIEW_PASSWORD1:SetView("Nowe haslo"); break;
  309.             case CHANGE_PASSWORD_VIEW_PASSWORD2:SetView("Potwierdz"); break;
  310.             case ADD_USER_LOGIN:SetView("Podaj Login"); break;
  311.             case ADD_USER_PASSWORD:SetView("Podaj haslo"); break;
  312.             case ADD_USER_CONFIRM_PASSWORD:SetView("Potwierdz haslo"); break;
  313.             default:
  314.                 break;
  315.         }
  316.     }
  317.  
  318.     static void Clear()
  319.     {
  320.         lcd.clear();
  321.     }
  322.  
  323. private:
  324.     void SetView(String content)
  325.     {
  326.         Clear();
  327.         lcd.print(content);
  328.         lcd.setCursor(0, 1);
  329.     }
  330. }; ViewManager viewManager;
  331.  
  332. class ActionManager
  333. {
  334.     Views _currentView;
  335.     ValueWrapper _valueWrapper;
  336.     EpromAccessService _accessService;
  337.     short _newPassword;
  338.     unsigned long time;
  339.  
  340.     void OnLoginView()
  341.     {
  342.         short id = _valueWrapper.GetValue();
  343.         User currentUser = _accessService.GetUserById(id);
  344.         if (!currentUser.IsEmpty())
  345.         {
  346.             viewManager.SetView(PASSWORD_VIEW);
  347.             SetCurrentView(PASSWORD_VIEW);
  348.         }
  349.         else
  350.         {
  351.             OnError(LOGIN_VIEW);
  352.         }
  353.     }
  354.  
  355.     void OnPasswordView()
  356.     {
  357.         User currentUser = _accessService.GetCurrentUser();
  358.         if (!currentUser.IsEmpty())
  359.         {
  360.             short password = _valueWrapper.GetValue();
  361.             if (password == currentUser.GetPassword())
  362.             {
  363.                 viewManager.SetView(USSER_VIEW);
  364.                 SetCurrentView(USSER_VIEW);
  365.                 digitalWrite(led, LOW);
  366.             }
  367.             else
  368.             {
  369.                 OnError(PASSWORD_VIEW);
  370.             }
  371.         }
  372.     }
  373.  
  374.     void OnUserView()
  375.     {
  376.         short number = _valueWrapper.GetValue();
  377.         Serial.print(number);
  378.         switch (number)
  379.         {
  380.         case CHANGE_PASSWORD_VIEW_LOGIN:
  381.             viewManager.SetView(CHANGE_PASSWORD_VIEW_LOGIN);
  382.             SetCurrentView(CHANGE_PASSWORD_VIEW_LOGIN);
  383.             break;
  384.         case ADD_USER_LOGIN:viewManager.SetView(ADD_USER_LOGIN);
  385.             SetCurrentView(ADD_USER_LOGIN);
  386.             break;
  387.         default: OnError(USSER_VIEW);
  388.             break;
  389.         }
  390.     }
  391.  
  392.     void OnChangePasswordLogin()
  393.     {
  394.         User user = _accessService.GetCurrentUser();
  395.         short login = _valueWrapper.GetValue();
  396.         if (login == user.GetLogin())
  397.         {
  398.             viewManager.SetView(CHANGE_PASSWORD_VIEW_OLD_PASSWORD);
  399.             SetCurrentView(CHANGE_PASSWORD_VIEW_OLD_PASSWORD);
  400.         }
  401.         else
  402.         {
  403.             OnError(CHANGE_PASSWORD_VIEW_LOGIN);
  404.         }
  405.     }
  406.  
  407.     void OnChangeOldPassword()
  408.     {
  409.         User user = _accessService.GetCurrentUser();
  410.         short oldPassword = _valueWrapper.GetValue();
  411.  
  412.         if (user.GetPassword() == oldPassword)
  413.         {
  414.             viewManager.SetView(CHANGE_PASSWORD_VIEW_PASSWORD1);
  415.             SetCurrentView(CHANGE_PASSWORD_VIEW_PASSWORD1);
  416.         }
  417.         else
  418.         {
  419.             OnError(CHANGE_PASSWORD_VIEW_OLD_PASSWORD);
  420.         }
  421.     }
  422.  
  423.     void OnChangePasswordNewPassword()
  424.     {
  425.         _newPassword = _valueWrapper.GetValue();
  426.         viewManager.SetView(CHANGE_PASSWORD_VIEW_PASSWORD2);
  427.         SetCurrentView(CHANGE_PASSWORD_VIEW_PASSWORD2);
  428.     }
  429.  
  430.     void OnConfirmPassword()
  431.     {
  432.         short password = _valueWrapper.GetValue();
  433.         if (password == _newPassword)
  434.         {
  435.             viewManager.SetView(USSER_VIEW);
  436.             SetCurrentView(USSER_VIEW);
  437.             User user = _accessService.GetCurrentUser();
  438.             user.SetPassword(password);
  439.             _accessService.UpdateUser(user);
  440.         }
  441.         else
  442.         {
  443.             OnError(CHANGE_PASSWORD_VIEW_PASSWORD2);
  444.         }
  445.     }
  446.  
  447.     short _login;
  448.     void OnAddUserLogin()
  449.     {
  450.         _login = _valueWrapper.GetValue();
  451.         viewManager.SetView(ADD_USER_PASSWORD);
  452.         SetCurrentView(ADD_USER_PASSWORD);
  453.     }
  454.  
  455.     short _newUserPassword;
  456.     void OnAddUserPassword()
  457.     {
  458.         _newUserPassword = _valueWrapper.GetValue();
  459.         viewManager.SetView(ADD_USER_CONFIRM_PASSWORD);
  460.         SetCurrentView(ADD_USER_CONFIRM_PASSWORD);
  461.     }
  462.  
  463.     void OnConfirmAddUserPassword()
  464.     {
  465.         short password = _valueWrapper.GetValue();
  466.         if (password == _newUserPassword)
  467.         {
  468.             User newUser = User();
  469.             newUser.SetPassword(password);
  470.             newUser.SetLogin(_login);
  471.             SetCurrentView(USSER_VIEW);
  472.             _accessService.AddUser(newUser);
  473.             viewManager.SetView(USSER_VIEW);
  474.         }
  475.         else
  476.         {
  477.             OnError(ADD_USER_CONFIRM_PASSWORD);
  478.         }
  479.     }
  480.  
  481.     void OnError(Views afterError)
  482.     {
  483.         viewManager.SetView(ERROR_VIEW);
  484.         delay(2000);
  485.         viewManager.SetView(afterError);
  486.     }
  487.  
  488.     void SetCurrentView(Views view)
  489.     {
  490.         if (view == USSER_VIEW)
  491.         {
  492.             digitalWrite(led, LOW);
  493.             time = millis();
  494.         }
  495.         else
  496.         {
  497.             digitalWrite(led, HIGH);
  498.         }
  499.         _currentView = view;
  500.     }
  501.  
  502. public:
  503.     ActionManager()
  504.     {
  505.         _valueWrapper = ValueWrapper();
  506.         _currentView = LOGIN_VIEW;
  507.     }
  508.  
  509.     void OnKey(short value)
  510.     {
  511.         if (value == CONFIRM)
  512.         {
  513.             switch (_currentView)
  514.             {
  515.                 case LOGIN_VIEW: OnLoginView(); break;
  516.                 case PASSWORD_VIEW: OnPasswordView(); break;
  517.                 case USSER_VIEW:OnUserView(); break;
  518.                 case CHANGE_PASSWORD_VIEW_LOGIN:OnChangePasswordLogin(); break;
  519.                 case CHANGE_PASSWORD_VIEW_OLD_PASSWORD:OnChangeOldPassword(); break;
  520.                 case CHANGE_PASSWORD_VIEW_PASSWORD1:OnChangePasswordNewPassword(); break;
  521.                 case CHANGE_PASSWORD_VIEW_PASSWORD2:OnConfirmPassword(); break;
  522.                 case ADD_USER_LOGIN:OnAddUserLogin(); break;
  523.                 case ADD_USER_PASSWORD:OnAddUserPassword(); break;
  524.                 case ADD_USER_CONFIRM_PASSWORD:OnConfirmAddUserPassword(); break;
  525.                 default:break;
  526.             }
  527.             _valueWrapper.Clear();
  528.         }
  529.         else
  530.         {
  531.             _valueWrapper.AddValue(value);
  532.         }
  533.     }
  534.  
  535.     void Check()
  536.     {
  537.         if (_currentView == USSER_VIEW)
  538.         {
  539.             if (millis() - time > 15000)
  540.             {
  541.                 viewManager.SetView(LOGIN_VIEW);
  542.                 SetCurrentView(LOGIN_VIEW);
  543.                 digitalWrite(led, HIGH);
  544.             }
  545.         }
  546.     }
  547. };
  548. ActionManager actionManager;
  549.  
  550. const int BUTTONS_L[] = { 8,9,10 };
  551. const int BUTTONS_R[4] = { A0,A1,A2,A3 };
  552. short lastValueR = -1;
  553. short lastValueL = -1;
  554. short int m = 0;
  555. ValueWrapper wrapper;
  556.  
  557. void setup()
  558. {  
  559.     /*for (int i = 0; i < EEPROM.length(); i++) {
  560.         EEPROM.write(i, -1);
  561.     }*/
  562.     lcd.begin(16, 2);
  563.     Serial.begin(9600);
  564.     pinMode(led, OUTPUT);
  565.     digitalWrite(led, HIGH);
  566.  
  567.     History a = History();
  568.  
  569.     for (int i = 0; i< 3; i++)
  570.     {
  571.         pinMode(BUTTONS_L[i], OUTPUT);
  572.         digitalWrite(BUTTONS_L[i], HIGH);
  573.     }
  574.     for (int i = 0; i< 4; i++)
  575.     {
  576.         pinMode(BUTTONS_R[i], INPUT_PULLUP);
  577.         digitalWrite(BUTTONS_R[i], HIGH);
  578.     }
  579.  
  580.     actionManager = ActionManager();
  581.     wrapper = ValueWrapper();
  582.     viewManager = ViewManager();
  583.     viewManager.SetView(LOGIN_VIEW);
  584. }
  585.  
  586. void loop()
  587. {
  588.     for (int i = 0; i<3; i++)
  589.     {
  590.         digitalWrite(BUTTONS_L[i], LOW);
  591.         for (int j = 0; j<4; j++)
  592.         {
  593.             int rValue = digitalRead(BUTTONS_R[j]);
  594.             if (rValue == LOW)
  595.             {
  596.                 m++;
  597.                 if (m>40)
  598.                 {
  599.                     if (!(lastValueR == BUTTONS_R[j] && lastValueL == BUTTONS_L[i]))
  600.                     {
  601.                         lastValueR = BUTTONS_R[j];
  602.                         lastValueL = BUTTONS_L[i];
  603.                         short currentValue = j * 3 + i;
  604.                         actionManager.OnKey(currentValue);
  605.                         if (currentValue != CONFIRM)
  606.                         {
  607.                             lcd.print(currentValue);
  608.                         }
  609.                     }
  610.                     m = 0;
  611.                 }
  612.                 digitalWrite(BUTTONS_L[i], HIGH);
  613.             }
  614.             else
  615.             {
  616.                 actionManager.Check();
  617.             }
  618.         }
  619.     }
  620. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement