PowerTGS440

Tomek

Nov 13th, 2020
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.79 KB | None | 0 0
  1. #include "Arduino.h"
  2.  
  3. // definiowanie pinów dla przekaźników
  4. #define RELAY_1   10    // przekaznik 1 na pin 10
  5. #define RELAY_2   11    // przekaznik 2 na pin 11
  6. #define RELAY_3   12    // przekaznik 3 na pin 12
  7. #define RELAY_4   13    // przekaznik 4 na pin 13
  8.  
  9. // definiowainie pinów dla ledów
  10. #define LED_1      4    // led 1 na pin 4
  11. #define LED_2      5    // led 2 na pin 5
  12. #define LED_3      6    // led 3 na pin 6
  13. #define LED_4      7    // led 4 na pin 7
  14.  
  15. // definiowanie przycisków
  16. #define BUTTON_1   2    // przycisk 1 na pin 1
  17.  
  18. // defincja klasy Relay
  19. class Relay
  20. {
  21.     protected:
  22.         uint8_t pin;
  23.         bool state;
  24.         bool normallyOpen;
  25.  
  26.     public:
  27.         Relay(){}
  28.  
  29.         Relay(uint8_t p, bool isNormallyOpen)
  30.         {
  31.             pin = p;
  32.             normallyOpen = isNormallyOpen;
  33.         } //KONIEC Relay(...)
  34.  
  35.         void begin()
  36.         {
  37.             pinMode(pin, OUTPUT);
  38.         } //KONIEC begin();
  39.  
  40.         bool getState()
  41.         {
  42.             if (normallyOpen) return !state;
  43.             else return state;
  44.         } //KONIEC getState();
  45.  
  46.         void turnOn()
  47.         {
  48.             if (normallyOpen)
  49.             {
  50.               if (state == !true) return;
  51.               state = !true;
  52.             }
  53.             else
  54.             {
  55.               if (state == true) return;
  56.               state = true;
  57.             }
  58.             digitalWrite(pin, state);
  59.         } // KONIEC turnON();
  60.        
  61.         void turnOff()
  62.         {
  63.             if (normallyOpen)
  64.             {
  65.               if (state == !false) return;
  66.               state = !false;
  67.             }
  68.             else
  69.             {
  70.               if (state == false) return;
  71.               state = false;
  72.             }
  73.             digitalWrite(pin, state);
  74.         } // KONIEC turnOFF();
  75. };
  76.  
  77. // defincja klasy Relay
  78. class Leds
  79. {
  80.     protected:
  81.         uint8_t pin;
  82.         bool state;
  83.        
  84.     public:
  85.         Leds(){}
  86.  
  87.         Leds(uint8_t p)
  88.         {
  89.             pin = p;            
  90.         } //KONIEC Leds(...)
  91.  
  92.         void begin()
  93.         {
  94.             pinMode(pin, OUTPUT);
  95.         } //KONIEC begin();
  96.  
  97.         bool getState()
  98.         {
  99.            return state;
  100.         } //KONIEC getState();
  101.  
  102.         void turnOn()
  103.         {
  104.             if(!state) state = true;            
  105.             digitalWrite(pin, state);
  106.         } // KONIEC turnON();
  107.        
  108.         void turnOff()
  109.         {
  110.              if (state) state = !false;            
  111.              digitalWrite(pin, state);
  112.         } // KONIEC turnOFF();
  113. };
  114.  
  115. // defincja klasy Button
  116. class Button
  117. {
  118.    private:
  119.       const int m_pin;
  120.       bool m_lastButtonState;
  121.       long m_lastDebounceTime = 0;  
  122.       const int m_debounceDelay = 50;
  123.       bool m_pressFlag = 0;
  124.  
  125.    public:
  126.       Button(const int pin) : m_pin(pin)
  127.       {
  128.          
  129.       } // KONIEC Button
  130.  
  131.       void init()
  132.       {
  133.           pinMode(m_pin, INPUT);
  134.           m_lastButtonState = read();
  135.       } // KONIEC init();
  136.  
  137.       bool read()
  138.       {
  139.           return digitalRead(m_pin);
  140.       } // KONIEC read();
  141.  
  142.       bool onChange()
  143.       {
  144.           bool reading = read();
  145.          
  146.           if (reading != m_lastButtonState)
  147.           {
  148.               m_lastDebounceTime = millis();
  149.               m_pressFlag = 1;
  150.           }
  151.  
  152.           if ((millis() - m_lastDebounceTime) > m_debounceDelay)
  153.           {
  154.               if (m_pressFlag)
  155.               {
  156.                   m_pressFlag = 0;
  157.                   m_lastButtonState = reading;
  158.                   return 1;
  159.               }
  160.           }
  161.  
  162.           m_lastButtonState = reading;
  163.           return 0;
  164.       } // KONIEC onChange();
  165.  
  166.       bool Button::onPress()
  167.       {
  168.           bool reading = read();
  169.           if (reading == HIGH && m_lastButtonState == LOW)
  170.           {
  171.               m_lastDebounceTime = millis();
  172.               m_pressFlag = 1;
  173.           }
  174.  
  175.           if ((millis() - m_lastDebounceTime) > m_debounceDelay)
  176.           {
  177.               if (m_pressFlag)
  178.               {
  179.                   m_pressFlag = 0;
  180.                   m_lastButtonState = reading;
  181.                   return 1;    
  182.               }
  183.           }
  184.           m_lastButtonState = reading;
  185.           return 0;
  186.       } // KONIEC onPress()
  187.  
  188.       bool onRelease()
  189.       {
  190.           bool reading = read();
  191.           if (reading == LOW && m_lastButtonState == HIGH)
  192.           {
  193.               m_lastDebounceTime = millis();
  194.               m_pressFlag = 1;
  195.           }
  196.  
  197.           if ((millis() - m_lastDebounceTime) > m_debounceDelay)
  198.           {
  199.               if ( m_pressFlag)
  200.               {      
  201.                   m_lastButtonState = reading;
  202.                   m_pressFlag = 0;
  203.                   return 1;    
  204.               }
  205.           }
  206.           m_lastButtonState = reading;
  207.           return 0;
  208.       } // KONIEC onRelease();
  209. }; // KONIEC klasy onsługi przycisków
  210.  
  211. //class Button;  
  212. //class Relay;  
  213. //class Leds;    
  214.  
  215. // stałe
  216. const uint8_t ile_odbiornikow = 4;
  217.  
  218. // tworzenie obiektów
  219. Relay przekaznik[ile_odbiornikow] = { {RELAY_1, true}, {RELAY_2, true}, {RELAY_3, true}, {RELAY_4, true} };  // 4 przekazniki
  220. Leds led[ile_odbiornikow] = { {LED_1}, {LED_2}, {LED_3}, {LED_4} };                                          // 4 ledy
  221. Button przycisk(BUTTON_1);                                                                                   // jeden przycisk
  222.  
  223. uint8_t f_przycisk  = 0;   // ile wcisnięć
  224. uint8_t fake_delay  = 0;  
  225. bool wylaczone = 0;
  226.  
  227. unsigned long actualTime = 0;   // zapamietaj czas
  228. unsigned long timeout = 0;   // powornaj czas
  229. unsigned long saveTime = 0;   // aktualizuj czas
  230.  
  231.  
  232. void setup()
  233. {
  234.     for (uint8_t i = 0; i < ile_odbiornikow; i++)        // aktywacja przekaźników
  235.     {                                      
  236.         przekaznik[i].begin();                           // przekaznik[i] start
  237.         przekaznik[i].turnOff();                         // przekaznik[i] wyłącz
  238.         led[i].begin();                                  // led[i] start
  239.         led[i].turnOff();                                // led[i].wylacz
  240.     }
  241.  
  242.     przycisk.init();                                     // przycisk start
  243.    
  244.     Serial.begin(9600);
  245. }
  246.  
  247.  
  248. void loop()
  249. {
  250.    
  251.     bool wczytaj = 1;
  252.    
  253.     if( przycisk.onPress() )
  254.     {              
  255.         f_przycisk++;
  256.         // coś tam dalej :-)
  257.     }
  258.      
  259.  
  260.     if(wylaczone)
  261.     {
  262.         Serial.print("W fake ");
  263.         Serial.println(f_przycisk);
  264.         delay(5000);
  265.         fake_delay=0;
  266.         f_przycisk=0;
  267.         wylaczone=0;
  268.         Serial.println("GOTOWY");
  269.         actualTime = millis();               // zapamietaj : czas start
  270.         timeout = actualTime - saveTime;
  271.         wczytaj = 0;
  272.     }
  273.  
  274.    
  275. }
Advertisement
Add Comment
Please, Sign In to add comment