Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // eHome MiniSystem v0.9.4 beta (14.11.2020)
- // by Marcin M. Logic
- // e-mail: [email protected]
- //
- // dodano w v0.9.3 beta: poprawa dzialania zegara na 3xLED
- // dodano w v0.9.2 beta: dodano czujnuk ruchu i zegar *** pamięć programu 21550 bajtów (70%) + pamięć dynamiczna 747 bajtów (36%) ***
- // dodano w v0.9.1 beta: dostosowywanie LCD pod odliczanie czasu w doł
- // dodano w v0.9.0 beta: modyfikacje odliczania z 4 przyciskow do 2 przyciskow (button1 start/stop, button2 -15min w pętli)
- // dodano w v0.8.9 beta: moduł LED 128x64 + biblioteki ADAFRUIT *** pamięć programu: 20784 bajtów (67%) + pamięć dynamiczna 673 bajtów (32%) *** pociągło z biblioteki ADAFRUIT
- // dodano w v0.8.8 beta: optymalizacja + T-(minuty % 5) 3xLED *** pamięć programu: 9068 bajtów (29%) + pamięć dynamiczna 443 bajtów (21%) *** :-) WOOOW, pamięć oszczędzona na max !!!
- //
- // dodano w v0.8.7 beta: zmiana INT na uint8_t *** pamięć programu: 10000 bajtów (32%) + pamięć dynamiczna 641 bajtów (31%) ***
- // dodano w v0.8.6 beta: optymalizacja pamięci *** pamięć programu: 10370 bajtów (33%) + pamięć dynamiczna 646 bajtów (31%) ***
- // dodano w v0.8.5 beta: dostosowywanie wyświetlacza 3x LED 8x8 *** pamięć programu: 11364 bajtów (36%) + pamieć dynamiczna 1002 bajtów (48%) ***
- //
- // dodano w v0.8.4 beta: sterowanie countdown (90/75/60/45/30/15 min) stan pamięci (35% : 47%) dla NANO
- // dodano w v0.8.3 beta: countdown gotowy (59.59 to 00.00) na 1 przycisku bez zerowania (32% : 28 %)
- // dodano w v0.8.2 beta: optymalizacja (30% : 29%)
- // dodano w v0.8.1 beta: modyfikacja ZEGARA pod LED&KEY
- // dodano w v0.8 beta: działają ledy, przyciski i wyswietlacz (5,6,7,8) dla przekaznikow
- // dodano w v0.7 beta: LED & KEY (definicje, deklaracje i setup)... dodane funkcje z demo. 32% pamięci programu (9874kb) + 40% pamięci dynamicznej (832 zajęte/1212 wolne)
- // dodano w v0.6 beta: obsługa zegara
- // dodano w v0.5 beta: napis (przekaznik ON/OFF na LED) sprinf + strcat
- // dodano w v0.4 beta: re-deklaracja pinów pod touch (21.10.2020) (23% pamięci programu 7892 bajtów), (34% pamięci dynamicznej 699bajtów)
- // dodano w v0.3 beta: 8x8 led (21.10.2020)
- // dodano w v0.2 beta: przekazniki
- // dodano w v0.1 beta: zarys programu - przekazniki, diody na expander, przyciski
- # define WERSJA "v0.9.4 date: 14/11/2020"
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // dołączone biblioteki do programu
- #include "Arduino.h"
- //#include "Button.h"
- #include "PCF8574.h"
- #include "Relay.h"
- #include <Wire.h>
- #include "MaxMatrix.h" // 8x8 Matrix
- #include <virtuabotixRTC.h> // zegar
- #include "wiring_shift_mod.h"
- #include <SPI.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- // deklaracje dla SSD1306 LED wyświetlacz I2C (SDA na pinie A4, SCL na pinie A5)
- #define OLED_RESET 4 // pin resetu OLED
- #define SCREEN_WIDTH 128 // OLED szerokość
- #define SCREEN_HEIGHT 64 // OLED wysokość
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
- void LedKey_Czas(int flaga);
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- PROGMEM const unsigned char CH[] = {
- 3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
- 1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
- 3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
- 5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
- 4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
- 5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
- 5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
- 1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
- 3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
- 3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
- 5, 8, B10000110, B01000110, B01010000, B01000110, B10000110, // * smutny
- 5, 8, B01000110, B10000110, B10110000, B10000110, B01000110, // + usmiech
- 2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
- 4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
- 2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
- 1, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // / przerobiony na 1 linię dla zegara na 3xLED - pokazuje NIC
- 4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
- 3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
- 4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
- 4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
- 4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
- 4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
- 4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
- 4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
- 4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
- 4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
- 1, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // : przerobiony na 1 linię dla zegara na 3xLED - pokazuje :
- 1, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // ;
- 3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
- 3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
- 3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
- 4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
- 5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
- 4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
- 4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
- 4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
- 4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
- 4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
- 4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
- 4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
- 4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
- 3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
- 4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
- 4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
- 4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
- 5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
- 5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
- 4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
- 4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
- 4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
- 4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
- 4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
- 5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
- 4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
- 5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
- 5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
- 5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
- 5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
- 4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
- 2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
- 4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
- 2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
- 3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
- 4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
- 2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
- 4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
- 4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
- 4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
- 4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
- 4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
- 3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
- 4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
- 4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
- 3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
- 4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
- 4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
- 3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
- 5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
- 4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
- 4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
- 4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
- 4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
- 4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
- 4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
- 3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
- 4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
- 5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
- 5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
- 5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
- 4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
- 3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
- 3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
- 1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
- 3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
- 4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
- };
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // definicje pinów
- //
- // piny DIGIAL dla LED & KEY
- const uint8_t strobe_pin = 4;
- const uint8_t clock_pin = 3;
- const uint8_t data_pin = 2;
- uint8_t przycisk = 0;
- // Pin przekazniki
- #define RELAY4CH_1 5 // przekaznik 4ch kanał 1 na pin 4
- #define RELAY4CH_2 6 // przekaznik 4ch kanał 2 na pin 5
- #define RELAY4CH_3 7 // przekaznik 4ch kanał 3 na pin 6
- #define RELAY4CH_4 8 // przekaznik 4ch kanał 4 na pin 7
- // Led & Key
- #define CLOCK_TYPE CLOCK_INVERT
- #define CLOCK_DELAY_US 1
- #define czujnik_ruchu 9
- // matryce LED 8x8 (3x)
- uint8_t data = 10; // DIN pin of MAX7219 module
- uint8_t load = 11; // CS pin of MAX7219 module
- uint8_t clock = 12; // CLK pin of MAX7219 module
- uint8_t maxInUse = 3; // how many MAX7219 are connected
- ////////////////////////////////
- // FLAGI
- bool flaga_odliczanie = 0; // flaga odliczanie 0 / nieaktywne - 1 / aktywne
- MaxMatrix matryca(data, load, clock, maxInUse); // definicja obiektu matryca
- //const unsigned int c_napisy = 4; // ile naposów
- //char napisy[c_napisy][50] = { "pobawimy sie ? ", "co robimy ? ", "kliknij cos ! ","mam moc, wykorzystaj to ! " };
- //int ile_napisy = c_napisy;
- //int akt_napisy = 0;
- // zegar
- virtuabotixRTC myRTC(A0, A1, A2); // zegar
- // inicjalizacja PRZYCISK i PRZEKAZNIK
- Relay przekaznik[4] = { {RELAY4CH_1, true}, {RELAY4CH_2, true}, {RELAY4CH_3, true}, {RELAY4CH_4, true} }; // inicjalizacja 4 przekazników
- uint8_t LED_adres[] = { 0xC1, 0xC3, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD, 0xCF}; // adresy LED moduły LED & KEY
- uint8_t DIGIT_adres[] = { 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE}; // adresy DIGIT moduły LED & KEY
- /*0*/ /*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/ /*8*/ /*9*/
- uint8_t digits[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; // cyfry bez kropki
- // 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.
- uint8_t digits_dots[] = { 0xBF, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87, 0xff, 0xef }; // cyfry z kropką
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // ustawienie MILLIS
- unsigned long aktualnyCzas = 0;
- unsigned long zapamietanyCzas1 = 0; // co 10 sekund - przerwanie millis() dla odświerzania LCD
- unsigned long roznicaCzasu1 = 0; // co 10 sekund - przerwanie millis() dla odświerzania LCD
- unsigned long zapamietanyCzas2 = 0; // co 60 sekund - przerwanie millis() dla minutnika czasu rzeczywistego
- unsigned long roznicaCzasu2 = 0; // co 60 sekund - przerwanie millis() dla minutnika czasu rzeczywistego
- unsigned long zapamietanyCzas3 = 0; // co 1 sekunde - przerwanie millis() dla sekundnika czasu odliczania (pełzająca dioda + kropka między segmentem 2: 3)
- unsigned long roznicaCzasu3 = 0; // co 1 sekunde - przerwanie millis() dla sekundnika czasu odliczania (pełzająca dioda + kropka między segmentem 2: 3)
- unsigned long zapamietanyCzas4 = 0; // co 1 sekunde - przerwanie millis() dla sekundnika czasu rzeczywistego (pełzająca dioda + kropka między segmentem 2 : 3)
- unsigned long roznicaCzasu4 = 0; // co 1 sekunde przerwanie millis() dla sekundnika czasu rzeczywistego (pełzająca dioda + kropka między segmentem 2 : 3)
- unsigned long zapamietanyCzas5 = 0; // dla przekaznika czasowego (co minute)
- unsigned long roznicaCzasu5 = 0; // dla przekaznika czasowego (co minute)
- bool flaga_przekaznika = 0; // dla przekaznika czasowego (co minute)
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // zmienne globalne domyślne (zamiast lokalnych) dla funkcji ODLICZANIE
- uint8_t digit_m1 = 9; // aktywacja na starcie minuty (9x.xx)
- uint8_t digit_m2 = 0; // aktywacja na starcie minuty (x0.xx)
- uint8_t digit_s1 = 0; // aktywacja na starcie sekundy (xx.0x)
- uint8_t digit_s2 = 0; // aktywacja na starcie sekundy (xx.x0)
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // setup programu
- void
- setup()
- {
- for (uint8_t i = 0; i < 4; i++) // aktywacja przekaźników
- { // start FOR
- przekaznik[i].begin(); // przekaznik[i] start
- przekaznik[i].turnOff(); // przekaznik[i] wyłącz
- } // koniec FOR
- // LCD
- display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicjuj wyświetlacz LCD
- display.display(); // przygotuj wyświetlacz LCD
- myRTC.updateTime(); // aktualizacja: zegar RTC
- LCD_pokaz_czas(1,"godz."); // pokaz godzinę z napisem HelloMarcin
- ////// matryce LED 8x8
- matryca.init(); // init: module MAX7219
- matryca.setIntensity(5); // MAX7219 intensywność wyświetlaczy
- matryca.shiftLeft(false, true); // ustaw scroll
- printStringWithShift("+ hello Marcin, system gotowy + ", 50); // wyślij tekst na scroll
- // ustawienie pinów ANALOGOWYCH jako DIGITAL dla modułu zegar
- pinMode(A0, OUTPUT);
- pinMode(A1, OUTPUT);
- pinMode(A2, OUTPUT);
- // ustawienie pinu 2 pod czujnik ruchu
- pinMode(czujnik_ruchu, INPUT); //pin 2 jako wejście
- //myRTC.setDS1302Time(00, 52, 11, 6, 31, 10, 2020); // reczne ustawienie czasu sec:minuta:godzina:dzień tygodnia:dzien:miesiac:rok
- ///// ustawienie pinów DIGITAL dla LED & KEY
- pinMode(strobe_pin, OUTPUT); // digital 4 OUT dla strobe (LED & KEY)
- pinMode(clock_pin, OUTPUT); // digital 3 OUT dla clock (LED & KEY)
- pinMode(data_pin, OUTPUT); // digital 2 OIT dla data (LED & KEY)
- sendCommand(0x8f); // activate LED & KEY
- reset(); // reset LED & KEY
- start_LEDKEY2(); // aktywacja LED&KEY Digit moduł 2
- flash_LEDKEY(); // mrugnij flash 1-8 LED&KEY na starcie systemu
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // początek głównej petli sterującej LOOP
- void loop()
- {
- przycisk = readButtons();
- switch (przycisk) { // obługa przycisków LED&KEY
- case 1: { // jeśli zwrócono "1" to przycisk nr. 1
- if (flaga_odliczanie == 1) odliczanie_zakoncz(); // jesli odliczanie aktywne przerwij i zeruj
- else if (flaga_odliczanie == 0) flaga_odliczanie = 1; // jesli odliczanie jest wylaczone wlacz odliczanie
- break; } // przerwij bezwarunkowo i nie sprawdzaj dalej
- case 2: { // jeśli zwrócona "2" to przycisk nr. 2
- if (flaga_odliczanie == 1) odliczanie_przestaw(); // jesli tryb odliczanie jest wlaczony
- break; } // przestawiaj czas o -15min w pętli bez końca
- case 4: { // jeśli zwrócona "4" to przycisk nr. 3
- break; } // przerwij bezwarunkowo i nie sprawdzaj dalej
- case 8: { // jeśli zwrócona "8" to przycisk nr. 4
- break; } // przerwij bezwarunkowo i nie sprawdzaj dalej
- case 16: { // jeśli zwrócono "16" to przycisk nr. 5
- RelaySwitch(0); // przekaznik nr. 0 (pierwszy z czterech)
- break; } // przerwij bezwarunkowo i nie sprawdzaj dalej
- case 32: { // jeśli zwrócono "32" to przycisk nr. 5
- RelaySwitch(1); // przekaznik nr. 1 (drugi z czterech)
- break; } // przerwij bezwarunkowo i nie sprawdzaj dalej
- case 64: { // jeśli zwrócono "64" to przycisk nr. 7
- RelaySwitch(2); // przekaznik nr. 2 (trzeci z czterech)
- break; } // przerwij bezwarunkowo i nie sprawdzaj dalej
- case 128:{ // jeśli zwrócono "128 to przycisk nr. 8
- RelaySwitch(3); // przekaznik nr. 3 (czwarty z czterech)
- break; } // przerwij bezwarunkowo i nie sprawdzaj dalej
- } // KONIEC SWITCH
- delay(150); // małe opóźnienie 100ms
- myRTC.updateTime(); // zegar RTC
- aktualnyCzas = millis(); // millis() czas rzeczywisty
- roznicaCzasu1 = aktualnyCzas - zapamietanyCzas1; // dla LCD co 10 sekung
- roznicaCzasu2 = aktualnyCzas - zapamietanyCzas2; // dla ZEGAR co 1 minute
- roznicaCzasu3 = aktualnyCzas - zapamietanyCzas3; // dla ODLICZANIE co 1 sekunde
- roznicaCzasu4 = aktualnyCzas - zapamietanyCzas4; // dla ZEGAR co 1 sekunde
- roznicaCzasu5 = aktualnyCzas - zapamietanyCzas5; // dla przekaznika uruchamianego z czujnika ruchu
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // sprawdzaj co sekundę jeśli flaga odliczanie nie aktywna
- //
- if (roznicaCzasu5 >= 20000UL && flaga_przekaznika == 1) // jesli wlaczono przekaznik przy wykryciu ruchu
- {
- if(przekaznik[0].getState() == 1) wykryto_ruch(0,0); // wylacz przekaznik 1 jesli wlaczony a minela minuta od właczenia
- printStringWithShift("+ AUTO-WYLACZANIE + ", 10);
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // sprawdzaj co sekundę jeśli flaga odliczanie nie aktywna
- //
- if (roznicaCzasu4 >= 1000UL && flaga_odliczanie == 0) // wykonuj co 1 sekundę
- { // start IF
- LedKey_Czas(); // mrugaj kropką na 2 segmencie DIGIT 1
- if (digitalRead(czujnik_ruchu) == HIGH && flaga_przekaznika == 0) // jesli wykryto ruch a przekaznik wylaczony
- {
- if(przekaznik[0].getState() == 0) wykryto_ruch(1,0); // jesli przekaznik 1 wyłączony wykonaj wykryto_ruch
- printStringWithShift("+ WYKRYTO CZLOWIEKA + ", 10);
- }
- zapamietanyCzas4 = aktualnyCzas; // resetuj czas na 0 dla sprawdzanie co sekunde
- } // koniec IF dla time 1000UL
- //
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // sprawdzaj co sekunę jeśli flaga odliczanie nie aktywna
- //
- if (roznicaCzasu3 >= 1000UL && flaga_odliczanie == 1) // wykonuj co 1 sekundę jeśli odliczanie włączone
- { // start IF
- odliczanie(); // wykonaj podprogram odliczanie();
- zapamietanyCzas3 = aktualnyCzas; // resetuj czas na 0 dla sprawdzanie co sekundę
- } // koniec IF dla time 1000UL
- //
- //
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // sprawdzaj co minutę jeśli flaga odliczanie nie aktywna
- //
- if (roznicaCzasu2 >= 60000UL && flaga_odliczanie == 0) // wykonuj co minutę
- { // start IF
- LedKey_Czas(); // wyświetl czas na LED&KEY
- godzina_sprawdz(); // sprawdz ktora godzina i wykonaj zadania wg. czasu
- zapamietanyCzas2 = aktualnyCzas; // resetuj czas na 0 dla sprawdzania co minute
- }
- //
- //
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // sprawdzaj co minutę jeśli flaga odliczanie nie aktywna
- //
- if (roznicaCzasu1 >= 30000UL && flaga_odliczanie == 0) // wykonuj co 30 sekund
- { // start IF
- LCD_pokaz_czas(1,"godz."); // LCD_pokaz_czas(1) flaga 1 = Hello Marcin
- zapamietanyCzas1 = aktualnyCzas; // resetuj czas na 0 dla sprawdzania co sekunde
- } // koniec IF
- // wrzucenie LCD_pokaz_czas co tego millis (co 5 sekund) wymuszone z brakiem synchronizacji (same wyświetlanie) między LCD a LED&KEY
- //
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- }
- // koniec głównej pętli sterującej LOOP
- //
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- //
- void
- odliczanie_przestaw()
- {
- static uint8_t Tflaga = 0;
- switch (Tflaga)
- {
- case 0:
- {
- digit_m1 = 7;
- digit_m2 = 5;
- Tflaga = 1;
- break;
- }
- case 1:
- {
- digit_m1 = 6;
- digit_m2 = 0;
- Tflaga = 2;
- break;
- }
- case 2:
- {
- digit_m1 = 4;
- digit_m2 = 5;
- Tflaga = 3;
- break;
- }
- case 3:
- {
- digit_m1 = 3;
- digit_m2 = 0;
- Tflaga = 4;
- break;
- }
- case 4:
- {
- digit_m1 = 1;
- digit_m2 = 5;
- Tflaga = 5;
- break;
- }
- case 5:
- {
- digit_m1 = 9;
- digit_m2 = 0;
- Tflaga = 0;
- break;
- }
- }
- digit_s1 = 0; // oszczędność 2 bajtów tu zamiast w IF (//) razem 4 bajty z digit_s2
- digit_s2 = 0; // oszczędność 2 bajrów tu zamiast w IF (//) razem 4 bajty z digit_s1
- }
- void
- odliczanie_zakoncz() // przerwij odliczanie i wyzeruj na 90:00
- {
- digit_m1 = 9; // aktywacja na starcie minuty (5x.xx)
- digit_m2 = 0; // aktywacja na starcie minuty (x9.xx)
- digit_s1 = 0; // aktywacja na starcie sekundy (xx.5x)
- digit_s2 = 0; // aktywacja na starcie sekundy (xx.x9)
- flaga_odliczanie = 0; // flaga odliczanie = FALSE, przerwanie bezwarunkowe
- }
- void odliczanie()
- {
- static uint8_t flaga_kropki = 0;
- LedKey_odliczanie(digit_m1, digit_m2, digit_s1, digit_s2); // wyswietl przed operacjami matematycznymi na wyswietlacz
- if (digit_s2 == 0 && digit_s1 == 0 && (digit_m2 % 5) == 0) // jeśli sekundu 0 i reszta z dzielenia jedności minut = 0
- { // pokaz odliczanie T- co 5minut
- char string_czas[20]; // zmienna char czas (wyświetlana na LED)
- char string_minuta1[5]; // zmienna do pobranej godziny typu CHAR
- char string_minuta2[5]; // zmienna do pobranej minuty typu CHAR
- // sklejanie łańcuchów
- sprintf(string_minuta1, "%d", digit_m1); // kopiuj liczbę do tablicy CHAR
- sprintf(string_minuta2, "%d", digit_m2); // kopiuj liczbę do tablicy CHAR
- strcpy(string_czas, "Time -"); // kopiowanie "godzina" do zmiennej string_czas
- strcat(string_czas, string_minuta1); // doklejenie godziny (liczby) do string_czas
- strcat(string_czas, string_minuta2); // doklejenie godziny (liczby) do string_czas
- strcat(string_czas, " "); // doklejenie przestrzeni do string_czas
- printStringWithShift(string_czas, 30); // godzina:minuta na LED
- } // koniec IF
- if (digit_m1 == 0 && digit_m2 == 0 && digit_s1 == 0 && digit_s2 == 0) // auto przywracanie na 90.00 po dojścia do końca odliczania
- {
- flaga_odliczanie = 0;
- digit_m1 = 9;
- digit_m2 = 0;
- digit_s1 = 0;
- digit_s2 = 0;
- }
- if (digit_s2 > 0) // jesli jedności sekund większe niż 0
- {
- digit_s2--; // pomniejsz stan o jeden
- }
- else if (digit_s2 == 0 && digit_s1 != 0) // jesli jedności sekund rowne 0
- {
- digit_s2 = 9; // nowy stan jednosci sekund
- digit_s1 = digit_s1 - 1; // pomniejsz dziesiatki sekund o jeden
- }
- else if (digit_s1 == 0 && digit_s2 == 0) // gdy mamy mamy xx.00
- {
- if (digit_m2 > 0)
- {
- digit_s1 = 5; // z 0 na 5 dziesiatki sekund
- digit_s2 = 9; // z 0 na 9 jednosci sekund
- digit_m2 --; // jednosci minut - 1;
- }
- else if (digit_m2 == 0)
- {
- digit_s1 = 5;
- digit_s2 = 9;
- digit_m2 = 9;
- digit_m1 --;
- }
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- void wykryto_ruch(uint8_t flaga, uint8_t nr_relay) // jesli wykryto ruch lub minal czas
- {
- if(flaga) // jesli flaga = 1 to wlacz przekaznik
- {
- if( przekaznik[1].getState() == 0 ) // jesli przekaznik wylaczony
- {
- uint8_t DIGIT_ADDR = DIGIT_adres[4]; // ustal adres
- setLed(0, 4); // włącz LED & KEY
- przekaznik[nr_relay].turnOn(); // włącz przekaznik
- sendCommand(0x40); // tryb LED&KEY
- digitalWrite(strobe_pin, LOW); // ustaw tryb na LOW
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_ADDR); // ustaw adres
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x63); // wyswietl 1 (0x06)
- digitalWrite(strobe_pin, HIGH); // zapal symbol ON
- flaga_przekaznika = 1; // przekaznik wlaczony na fladze
- zapamietanyCzas5 = aktualnyCzas; // start działania
- }
- }
- else if(flaga==0) // jesli flaga = 0 to wylacz przekaznik
- {
- uint8_t DIGIT_ADDR = DIGIT_adres[4]; // ustal adres
- setLed(0, 4); // wyłącz LED & KEY
- przekaznik[nr_relay].turnOff(); // wyłącz przekaznik
- sendCommand(0x40); // tryb LED&KEY
- digitalWrite(strobe_pin, LOW); // ustaw tryb na LOW
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_ADDR); // ustaw adres
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x5c); // wyswietl 1 (0x06)
- digitalWrite(strobe_pin, HIGH); // zapal symbol ON
- flaga_przekaznika = 0; // przekaznik wlaczony na fladze
- zapamietanyCzas5 = aktualnyCzas; // start działania
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void RelaySwitch(uint8_t i)
- {
- char string_super[50]; // bufor dla super napis
- uint8_t DIGIT_ADDR = DIGIT_adres[i + 4]; // ustal adres
- sprintf(string_super, "Przekaznik nr. %d", i + 1); // napis na 3xLED
- if (przekaznik[i].getState()) // jeśli przekaznik wlaczony to go wylacz
- { // początek warunku
- setLed(0, i + 4); // wyłącz LED & KEY
- przekaznik[i].turnOff(); // wyłącz przekaznik
- strcat(string_super, " OFF "); // napis na 3xLED
- sendCommand(0x40); // obsługa LED&KEY
- digitalWrite(strobe_pin, LOW); // pin strobe na OFF
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_ADDR); // ustaw adres
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x5c); // ustaw 0 (0x3f)
- digitalWrite(strobe_pin, HIGH); // wyswietl 0
- } // koniec warunku
- else // jeśli przekaznik wyłączony to go włącz
- { // poczatek warunku
- setLed(1, i + 4); // wyłącz LED & KEY
- przekaznik[i].turnOn(); // włącz przekaznik
- strcat(string_super, " ON "); // jak wyzej
- sendCommand(0x40); // tryb LED&KEY
- digitalWrite(strobe_pin, LOW); // ustaw tryb na LOW
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_ADDR); // ustaw adres
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x63); // wyswietl 1 (0x06)
- digitalWrite(strobe_pin, HIGH); // wyswietl 1
- }
- printStringWithShift( string_super, 30); // wyślij tekst na scroll
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // wyswietl godzine:minute (LED & KEY)
- void
- LedKey_Czas()
- { // START: LedKey_Czas
- wyswietl_kropke(1, myRTC.hours % 10); // wyswietl godzinę xH.xx z kropką lub bez kropki (sprawdź statyczną zmienna)
- wyswietl_liczbe(0, myRTC.hours / 10); // wyswietl godzine Hx.xx tutaj zamiast w IF (//) 9 bajtów / 26 bajty
- wyswietl_liczbe(2, myRTC.minutes / 10); // wyswietl minutę xx.Mx tutaj zamiast w IF (//) 9 bajtów / 26 bajty
- wyswietl_liczbe(3, myRTC.minutes % 10); // wyswietl minutę xx.xM tutaj zamiast w IF (//) 8 bajtów / 26 bajty
- sec_LEDKEY(); // przesun diodę w prawo (co sekudnę)
- } // KONIEC: LedKey_Czas(int flaga)
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // wyswietl godzine:minute (LED & KEY)
- void
- LedKey_odliczanie(uint8_t h1, uint8_t h2, uint8_t m1, uint8_t m2) // LED&KEY odliczanie
- { // start podprogtamu
- wyswietl_liczbe(0, h1); // wyswietl liczbe bez kropki GODZINA (Dx.xx)
- wyswietl_kropke(1, h2); // wyswietl liczbe z kropka GODZINA (xD.xx)
- wyswietl_liczbe(2, m1); // wyswietl liczbę bez kropki MINUTA (xx.Mx)
- wyswietl_liczbe(3, m2); // wyswietl liczbę bez kropki MINUTA (xx.xM)
- sec_LEDKEY(); // przesun diodę w prawo co sekunę
- LCD_odliczanie(h1,h2,m1,m2); // wyświetl odliczanie na LCD
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // czytaj przycisk, zwrót wartość (LED & KEY)
- uint8_t
- readButtons(void)
- {
- uint8_t buttons = 0;
- digitalWrite(strobe_pin, LOW);
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x42);
- pinMode(data_pin, INPUT);
- for (uint8_t i = 0; i < 4; i++)
- {
- uint8_t v = shiftInMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US) << i;
- buttons |= v;
- }
- pinMode(data_pin, OUTPUT);
- digitalWrite(strobe_pin, HIGH);
- return buttons;
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // zapal diodę lub zgaś (LED & KEY)
- void
- setLed(uint8_t flaga, uint8_t adres)
- {
- pinMode(data_pin, OUTPUT); // yy nie wiem czemu znow
- sendCommand(0x44);
- digitalWrite(strobe_pin, LOW);
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, LED_adres[adres]);
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, flaga);
- digitalWrite(strobe_pin, HIGH);
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void printString(char* s)
- {
- int col = 0;
- byte buffer[10];
- while (*s != 0)
- {
- if (*s < 32) continue;
- char c = *s - 32;
- memcpy_P(buffer, CH + 7*c, 7);
- matryca.writeSprite(col, 0, buffer);
- matryca.setColumn(col + buffer[0], 0);
- col += buffer[0] + 1;
- s++;
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // printCharWithShift(char c, int shift_speed)
- void
- printCharWithShift(char c, int shift_speed) {
- byte buffer[10];
- if (c < 32) return;
- c -= 32;
- memcpy_P(buffer, CH + 7 * c, 7);
- matryca.writeSprite(maxInUse * 8, 0, buffer);
- matryca.setColumn(maxInUse * 8 + buffer[0], 0);
- for (int i = 0; i < buffer[0] + 1; i++)
- {
- delay(shift_speed);
- matryca.shiftLeft(false, false);
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // printStringWithShift(char* s, int shift_speed)
- //
- void
- printStringWithShift(char* s, int shift_speed)
- {
- while (*s != 0)
- {
- printCharWithShift(*s, shift_speed);
- s++;
- }
- }
- // KONIEC: printStringWithShift(char* s, int shift_speed)
- //
- //
- //////////////////////////////////////////////////////////////////////////////////////////
- //
- // funkcja void sprawdz_godzina()
- //
- void godzina_sprawdz()
- {
- uint8_t godzina = (myRTC.hours / 10) + (myRTC.hours % 10);
- }
- //
- /////////////////////////////////////////////////////////////////////////////////////////////
- //
- //
- void
- wyswietl_kropke(int pozycja, int liczba)
- {
- static uint8_t flaga = 0; // flaga stanu kropka / bez kropki
- char string_czas[15]; // zmienna char czas (wyświetlana na LED)
- char string_godzina[4]; // zmienna do pobranej godziny typu CHAR
- char string_minuta[4]; // zmienna do pobranej minuty typu CHAR
- sprintf(string_godzina, "%d", myRTC.hours); // kopiuj liczbę do tablicy CHAR
- sprintf(string_minuta, "%d", myRTC.minutes); // kopiuj liczbę do tablicy CHAR
- strcpy(string_czas, ";");
- sendCommand(0x40); // wyślij komendę
- digitalWrite(strobe_pin, LOW);
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_adres[1]);
- if (flaga) // flaga == 1 (liczba bez kropki na segmencie nr. 2
- {
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, digits[liczba]); // liczba bez kropki
- if(myRTC.hours < 10) strcat(string_czas,"0"); // jesli dzodzina mniejsza niz 10 doklej "0"
- strcat(string_czas, string_godzina); // doklejenie godziny (liczby) do string_czas
- strcat(string_czas, "/"); // doklejenie : do string_czas
- if(myRTC.minutes < 10) strcat(string_czas,"0"); // jesli minuty mniejsze niz 10 doklej "0"
- strcat(string_czas, string_minuta); // doklejenie godziny (liczby) do string_czas
- flaga = 0;
- }
- else // flaga ==0 (liczba z kropka na segmencie nr.2 )
- {
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, digits_dots[liczba]); // liczba z kropka
- if(myRTC.hours < 10) strcat(string_czas,"0"); // jesli dzodzina mniejsza niz 10 doklej "0"
- strcat(string_czas, string_godzina); // doklejenie godziny (liczby) do string_czas
- strcat(string_czas, ":"); // doklejenie : do string_czas
- if(myRTC.minutes < 10) strcat(string_czas,"0"); // jesli minuty mniejsze niz 10 doklej "0"
- strcat(string_czas, string_minuta); // doklejenie godziny (liczby) do string_czas
- flaga = 1;
- }
- digitalWrite(strobe_pin, HIGH);
- printString(string_czas);
- }
- //
- //
- //
- /////////////////////////////////////////////////////////////////////////////////////////////
- // wyswietla liczbę na DIGIT (pozycja, liczba)
- void
- wyswietl_liczbe(uint8_t pozycja, uint8_t liczba)
- {
- sendCommand(0x40);
- digitalWrite(strobe_pin, LOW);
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_adres[pozycja]);
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, digits[liczba]);
- digitalWrite(strobe_pin, HIGH);
- }
- /////////////////////////////////////////////////////////////////////////////////////////////
- //
- // LED flash motyw
- //
- void
- flash_LEDKEY() // funkcja Flash LED&KEY
- { // start
- for (uint8_t i = 0; i < 16; i++) // zapal diody 1-8 z przerwą 100ms
- { // FOR
- if (i < 8) setLed(1, i); // zapal diodę na pozycji i jesli i<8
- else setLed(0, i - 8); // zgas diodę na pozycji i jeśli i>8
- delay(100);
- }
- }
- //
- //
- /////////////////////////////////////////////////////////////////////////////////////////////
- //
- //
- //
- void
- sec_LEDKEY() // step by step 0,1,2,3 diody
- {
- static byte flaga = 0;
- static byte nrled = 0;
- if (nrled == 0) // jesli pierwsza dioda
- {
- setLed(1, nrled); // zapal diode nr. 1
- nrled++;
- setLed(0, 3);
- }
- else if (nrled > 0 && nrled < 4)
- {
- setLed(0, nrled - 1);
- setLed(1, nrled);
- nrled++;
- }
- else if (nrled == 4) // jesli 4 dioda
- {
- setLed(0, 3); // zgas 4 diode
- nrled = 0; // ustaw na diode 1
- setLed(1, nrled); // zapal diode 1
- nrled++;
- }
- }
- /////////////////////////////////////////////////////////////////////////////////////////////
- // LEDKEY1 LEDKEY2 - uruchamiane przy rozruchu
- void start_LEDKEY1() // pokaz czas na segmencie 1
- {
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- //
- //
- void
- start_LEDKEY2() // mrugaj diodami na starcie tylko BAJER
- { // START
- for(uint8_t adr_tab = 4; adr_tab < 8; adr_tab++) // FOR
- { //
- sendCommand(0x40); // obsługa LED&KEY
- digitalWrite(strobe_pin, LOW); // pin strobe na OFF
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, DIGIT_adres[adr_tab]); // 0xc8 - wyswietlacz adr_tab
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x5c); // ustaw 0 (0x3f)
- digitalWrite(strobe_pin, HIGH); // pin strobe na ON
- } // KONIEC FOR
- } // koniec LEDKEY2
- //
- //
- /////////////////////////////////////////////////////////////////////////////////////////////
- //
- // LED & KEY funckje startu
- //
- void
- sendCommand(uint8_t value)
- {
- digitalWrite(strobe_pin, LOW);
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, value);
- digitalWrite(strobe_pin, HIGH);
- }
- //
- //
- /////////////////////////////////////////////////////////////////////////////////////////////
- //
- //
- void
- reset()
- {
- sendCommand(0x40);
- digitalWrite(strobe_pin, LOW);
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0xc0); // reset od adresu 0
- for (uint8_t i = 0; i < 16; i++) // petla 16x
- {
- shiftOutMod(data_pin, clock_pin, LSBFIRST, CLOCK_TYPE, CLOCK_DELAY_US, 0x00); // 8x LED + 8x DIGIT reset
- }
- digitalWrite(strobe_pin, HIGH);
- }
- //
- //
- /////////////////////////////////////////////////////////////////////////////////////////////
- // wyświetla HELLO MARCIN na LCD
- void
- nakarm_rybke() // definicja funkcji hello_marcin()
- { // START
- display.setTextSize(2); // ustaw czcionkę 2x skalowanie domyślnej
- display.setCursor(28, 28); // ustaw kursor na x=40 y=28
- display.println(F("NAKARM")); // przygotuj na x,y napis "HELLO"
- display.setCursor(38,48); // ustaw kursor na x=33 y=48
- display.println(F("RYBKE")); // przygotuj na x,y napis "MARIN"
- }
- /////////////////////////////////////////////////////////////////////////////////////////////
- // wyświetla HELLO MARCIN na LCD
- void
- nakarm_kroliki() // definicja funkcji hello_marcin()
- { // START
- display.setTextSize(2); // ustaw czcionkę 2x skalowanie domyślnej
- display.setCursor(30, 28); // ustaw kursor na x=40 y=28
- display.println(F("NAKARM")); // przygotuj na x,y napis "HELLO"
- display.setCursor(25,48); // ustaw kursor na x=33 y=48
- display.println(F("KROLIKI")); // przygotuj na x,y napis "MARIN"
- }
- /////////////////////////////////////////////////////////////////////////////////////////////
- // wyświetla HELLO MARCIN na LCD
- void
- secret_laboratory() // definicja funkcji hello_marcin()
- { // START
- display.setTextSize(2); // ustaw czcionkę 2x skalowanie domyślnej
- display.setCursor(28, 28); // ustaw kursor na x=40 y=28
- display.println(F("SECRET")); // przygotuj na x,y napis "HELLO"
- display.setCursor(5, 48); // ustaw kursor na x=33 y=48
- display.println(F("LABORATORY")); // przygotuj na x,y napis "MARIN"
- }
- /////////////////////////////////////////////////////////////////////////////////////////////
- // wyświetla HELLO MARCIN na LCD
- void
- hello_marcin() // definicja funkcji hello_marcin()
- { // START
- display.setTextSize(2); // ustaw czcionkę 2x skalowanie domyślnej
- display.setCursor(40, 28); // ustaw kursor na x=40 y=28
- display.println(F("HELLO")); // przygotuj na x,y napis "HELLO"
- display.setCursor(33, 48); // ustaw kursor na x=33 y=48
- display.println(F("MARCIN")); // przygotuj na x,y napis "MARIN"
- } // KONIEC
- /////////////////////////////////////////////////////////////////////////////////////////////
- // wyświetla HELLO MARCIN na LCD
- void
- male_co_nieco() // definicja funkcji hello_marcin()
- { // START
- display.setTextSize(2); // ustaw czcionkę 2x skalowanie domyślnej
- display.setCursor(40, 28); // ustaw kursor na x=40 y=28
- display.println(F("HELLO")); // przygotuj na x,y napis "HELLO"
- display.setCursor(33, 48); // ustaw kursor na x=33 y=48
- display.println(F("MARCIN")); // przygotuj na x,y napis "MARIN"
- }
- /////////////////////////////////////////////////////////////////////////////////////////////
- // wyświetla czas na LCD
- void
- LCD_odliczanie(uint8_t &h1, uint8_t &h2, uint8_t &m1, uint8_t &m2) // definicja funkcji LCD_odliczanie (na wejściu tylko adresy)
- {
- char string_czas[12]; // tu do sklejania godziny:minuty z pojedynczych wynikow h h m m
- char bufor[4]; // bufor char
- strcpy(string_czas, "time-"); // kopiuj na początek łańcucha string_czas napis "time-"
- sprintf(bufor, "%d",h1); // do bufora z h1 (mx.xx)
- strcat(string_czas, bufor); // doklej z bufora (h1) do string czas
- sprintf(bufor, "%d",h2); // do bufora z h2 (xm.xx)
- strcat(string_czas,bufor); // doklej z bufora (h2) do string czas
- strcat(string_czas,":"); // doklej napis ":"
- sprintf(bufor, "%d",m1); // do bufora z m1 (xx.sx)
- strcat(string_czas,bufor); // doklej z bufora (m1) do string czas
- sprintf(bufor, "%d",m2); // do bufora z m2 (xx.xs)
- strcat(string_czas,bufor); // doklej z bufora (m2) do string czas
- display.clearDisplay(); // wyczyść wyświetlacz
- display.setTextSize(2); // ustaw czcionkę 2x skalowanie domyślnej
- display.setTextColor(SSD1306_WHITE); // ustaw kolor
- display.setCursor(5, 0); // ustaw kursor
- display.println(string_czas); // ustaw czas na zółtym module
- switch (h1) // switch do odliczania
- { // SWITCH START
- case 9: { // jeśli 90 min wyświetl NULL
- break; // przerwij sprawdzanie dalej SWITCH - CASE
- }
- case 8: { // jeśli 80 min wyswietl
- if(h2>5) secret_laboratory(); // SECRET LABORATORY przy większe niz 85 min
- else // żeby było szybciej
- if(h2<=5) hello_marcin(); // HELLO MARCIN przy mniejsze niz 85min
- break;
- }
- case 7: { // jesli 70 min wyswietl
- if(h2>5) nakarm_kroliki(); // NAKARM KROLIKI
- else // żeby było szybciej
- if(h2<=5) nakarm_rybke(); // NAKARM RYBKĘ
- break; // przerwij sprawdzanie dalej SWITCH - CASE
- }
- case 6: { // jeśli 60 min wyswietl
- if(h2>5) nakarm_kroliki(); // NAKARM KROLIKI
- else // żeby było szybciej
- if(h2<=5) nakarm_rybke(); // NAKARM RYBKĘ
- break; // przerwij sprawdzanie dalej SWITCH - CASE
- }
- case 5: {
- if(h2>5) secret_laboratory(); // SECRET LABORATORY przy większe niz 85 min
- else // żeby było szybciej
- if(h2<=5) hello_marcin(); // HELLO MARCIN przy mniejsze niz 85min
- break; // przerwij sprawdzanie dalej SWITCH - CASE
- }
- case 4: {
- if(h2>5) secret_laboratory(); // SECRET LABORATORY przy większe niz 85 min
- else // żeby było szybciej
- if(h2<=5) hello_marcin(); // HELLO MARCIN przy mniejsze niz 85min
- break; // przerwij sprawdzanie dalej SWITCH - CASE
- }
- case 3: {
- if(h2>5) secret_laboratory(); // SECRET LABORATORY przy większe niz 85 min
- else // żeby było szybciej
- if(h2<=5) hello_marcin(); // HELLO MARCIN przy mniejsze niz 85min
- break; // przerwij sprawdzanie dalej SWITCH - CASE
- }
- case 2: {
- if(h2>5) secret_laboratory(); // SECRET LABORATORY przy większe niz 85 min
- else // żeby było szybciej
- if(h2<=5) hello_marcin(); // HELLO MARCIN przy mniejsze niz 85min
- break;
- }
- case 1: {
- if(h2>5) secret_laboratory(); // SECRET LABORATORY przy większe niz 85 min
- else // żeby było szybciej
- if(h2<=5) hello_marcin(); // HELLO MARCIN przy mniejsze niz 85min
- break; // przerwij sprawdzanie dalej SWITCH - CASE
- }
- case 0: {
- if(h2>5) secret_laboratory(); // SECRET LABORATORY przy większe niz 85 min
- else // żeby było szybciej
- if(h2<=5) hello_marcin(); // HELLO MARCIN przy mniejsze niz 85min
- break; // przerwij sprawdzanie dalej SWITCH - CASE
- }
- }
- display.display(); // pokaz na ekranie
- }
- /////////////////////////////////////////////////////////////////////////////////////////////
- // wyświetla czas na LCD
- void
- LCD_pokaz_czas(uint8_t flaga, char* str) // definicja funkcji LCD_pokaz_czas(uint8_t)
- { // START
- char string_czas[12]; // tu do sklejania godziny:minuty z pojedynczych wynikow h h m m
- char bufor[4]; // bufor char
- uint8_t dtemp; // bufor int
- strcpy(string_czas,""); // kopiuj na początek łańcucha napis "Time. "
- strcat(string_czas,str); // kopiuj na początek łańcucha napis "Time. "
- dtemp = myRTC.hours / 10; // bez reszty z dzielenia z hours
- sprintf(bufor, "%d",dtemp); // załaduj do bufora bierzącą godzine Hx.
- strcat(string_czas,bufor); // doklej z bufor do string czas
- dtemp = myRTC.hours % 10; // reszta z dzielenia z hours
- sprintf(bufor, "%d",dtemp); // załaduj do bufora bierzącą godzine xH.
- strcat(string_czas,bufor); // doklej z bufor do string czas
- strcat(string_czas,":"); // doklej znak ":" do string czas
- dtemp = myRTC.minutes / 10; // bez reszty z dzielenia z hours
- sprintf(bufor, "%d",dtemp); // załaduj do bufora bierzącą godzine Hx.
- strcat(string_czas,bufor); // doklej z bufor do string czas
- dtemp = myRTC.minutes % 10; // reszta z dzielenia z hours
- sprintf(bufor, "%d",dtemp); // załaduj do bufora bierzącą godzine xH.
- strcat(string_czas,bufor); // doklej z bufor do string czas
- display.clearDisplay(); // wyczyść wyświetlacz
- display.setTextSize(2); // ustaw czcionkę 2x skalowanie domyślnej
- display.setTextColor(SSD1306_WHITE); // ustaw kolor
- display.setCursor(5, 0); // ustaw kursor
- display.println(string_czas); // ustaw czas na zółtym module
- switch (flaga) // napisy niebieskie w zależności od flagi wejściowej
- { // start SWITCH
- case 1 : // jeśli flaga == 1
- hello_marcin(); // ustaw hello marcin na niebieskim mudule
- break; // przerwij sprawdzanie flag
- default: // jeśli flaga domyślna
- break; // przerwij sprawdzanie flag
- } // koniec SWITCH
- display.display(); // pokaz na ekranie
- }
- /////////////////////////////////////////////////////////////////////////////////////////////
- //display.startscrollright(0x00, 0x0F);
- //display.stopscroll();
- //delay(1000);
- //display.startscrollleft(0x00, 0x0F);
- //display.startscrolldiagright(0x00, 0x07);
- //delay(2000);
- //display.startscrolldiagleft(0x00, 0x07);
Advertisement
Add Comment
Please, Sign In to add comment