Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // //
- // Wiki E-HOME project (2021) start buid : 24.01.2021 //
- // autor : Wiki i Marcin
- // e-mail: [email protected] //
- // //
- // v0.2.1 -> wyrzucona biblioteka Timers.h !!! stworzona wlasna obsluga watkow, pilot działa znow jak powinien //
- // v0.2 -> budowa programu i klasy obsługującej adresowalne diody RGB //
- // v0.1 -> budowa programu i klas obsługujących urządzenia : biblioteki wikiLCD.h, wikiMP3.h, panel.h //
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // --- pliki nagłówkowe ---------------------------------------------------------------------------------------------- //
- #include <Adafruit_NeoPixel.h>
- #ifdef __AVR__
- #include <avr/power.h>
- #endif
- #include <LiquidCrystal_I2C.h>
- #include <Wire.h>
- #include <TM1638.h>
- #include <TM1638QYF.h>
- #include "RichUNOIRremote.h";
- #include "DHT.h"
- #include "Arduino.h"
- #include "virtuabotixRTC.h"
- #include "wikilcd.h"
- #include "wikimp3.h"
- #include "panel.h"
- #include <SoftwareSerial.h>
- #include <MD_YX5300.h>
- #include <MD_UISwitch.h>
- #include "fire.h"
- #include "Przekaznik.h" // --- Relay --- klasa obsługi przekaźników -------------------------------------------- //
- // --- DEFINICJE ----------------------------------------------------------------------------------------------------- //
- // --- PRZEKAZNIKI --------------------------------------------------------------------------------------------------- //
- #define RELAY1 30 // przekaznik 1 -> PIN 30 ------------------------ //
- #define RELAY2 31 // przekaznik 2 -> PIN 31 ------------------------ //
- #define RELAY3 32 // przekaznik 3 -> pin 32 ------------------------ //
- #define RELAY4 33 // przekaznik 4 -> pin 33 ------------------------ //
- #define RELAY5 34 // przekaznik 5 -> pin 34 ------------------------ //
- #define RELAY6 35 // przekaznik 6 -> pin 35 ------------------------ //
- #define RELAY7 36 // przekaznik 7 -> pin 36 ------------------------ //
- #define RELAY8 37 // przekaznik 8 -> pin 37 ------------------------ //
- //
- #define FOTOREZYSTOR1 A6 // fotorezystor 1 na pinie A6 -------------------- //
- #define FOTOREZYSTOR2 A7 // fotorezystor 2 na pinie A7 -------------------- //
- //
- #define LED1_PIN 4 // RGB na pinie DIGITAL 4 ------------------------ //
- #define LED2_PIN 5 // RGB na pinie DIGITAL 5 ------------------------ //
- #define LED3_PIN 6 // RGB na pinie DIGITAL 6 ------------------------ //
- #define LED4_PIN 7 // RGB na pinie DIGITAL 7 ------------------------ //
- //
- #define RGB_VU_METER 8 // --- ilość diód RGB dla VU --------------------- //
- #define RGB_RAINBOW 16 // --- ilość diód RGB dla RAINOW ----------------- //
- //
- // jeśli DEBUG_MODE jest TRUE włącza wszystkie debugery bibliotek, jeśli FALSE to je wyłącza ------------------------- //
- #define DEBUG_MODE false
- #define DEBUG_MAIN false
- // --- MP3 ----------------------------------------------------------------------------------------------------------- //
- const uint8_t ARDUINO_RX = 18; // connect to TX of MP3 Player module -------------------- //
- const uint8_t ARDUINO_TX = 19; // connect to RX of MP3 Player module -------------------- //
- SoftwareSerial MP3Stream(ARDUINO_RX, ARDUINO_TX); // MP3 player serial stream for comms -------------------- //
- MD_YX5300 mp3(MP3Stream); //
- // --- tworzenie obiektów -------------------------------------------------------------------------------------------- //
- Adafruit_NeoPixel rgb1P = Adafruit_NeoPixel(16, LED1_PIN, NEO_GRB + NEO_KHZ800);
- Adafruit_NeoPixel rgb1L = Adafruit_NeoPixel(16, LED2_PIN, NEO_GRB + NEO_KHZ800);
- Adafruit_NeoPixel rgb2L = Adafruit_NeoPixel( 8, LED3_PIN, NEO_GRB + NEO_KHZ800);
- Adafruit_NeoPixel rgb2P = Adafruit_NeoPixel( 8, LED4_PIN, NEO_GRB + NEO_KHZ800);
- NeoFire fire1(rgb2L);
- NeoFire fire2(rgb2P);
- NeoFire fire3(rgb1L);
- NeoFire fire4(rgb1P);
- LiquidCrystal_I2C LCD(0x27, 20, 4); // --- adres i rozmiar wyświetlacza LCD ---------------------------- //
- TLCD *lcd = new TLCD; // --- obiekt obsługujący wyświetlacz LCD -------------------------- //
- WIKIMP3 wikiMP3(mp3); // --- obiekt obsługujący odtwarzacz MP3 --------------------------- //
- virtuabotixRTC CLOCK(A2, A1, A0); // --- zegar - obiekt klasy virtuabotixRTC ------------------------- //
- TM1638QYF PANEL(50,51,52); // --- stwórz obiekt mod_KEY ( 16 x przycisków, 2x LCD ) ----------- //
- TPANEL *panel = new TPANEL; //
- DHT POGODA; // --- sensor pogody ----------------------------------------------- //
- IRrecv PILOT(11); // --- obiekt klasy IRrecv do obsługi pilota ----------------------- //
- Relay R [8] = { {RELAY1, 1}, {RELAY2, 1}, {RELAY3, 1}, {RELAY4, 1}, //
- {RELAY5, 1}, {RELAY6, 1}, {RELAY7, 1}, {RELAY8, 1} }; //
- // --- Z M I E N N E G L O B A L N E ------------------------------------------------------------------------------- //
- volatile uint_fast8_t czas[6] = { 0,0,0,0,0,0 }; // --- h,h,m,m,s,s -------------------------------------- //
- volatile uint_fast16_t data[4] = { 0,0,0,0 }; // --- dzien tygodnia, dzien, miesiac, rok -------------- //
- volatile uint_fast8_t godzina = 0; // --- przechowuj tu aktualną godzinę ------------------- //
- volatile uint_fast8_t minuta = 0; // --- przechowuj tu aktualną minutę -------------------- //
- volatile int_fast8_t temperatura = 0; // --- przechowuj tu temperaturę ------------------------ //
- volatile int_fast8_t wilgotnosc = 0; // --- przechowuj tu wilgotność ------------------------- //
- volatile int_fast8_t oswietlenie1 = 0; // --- przechowuj tu swiatlo ---------------------------- //
- volatile int_fast8_t oswietlenie2 = 0; // --- przechowuj tu swiatlo ---------------------------- //
- bool RelayStatus[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; // --- 0 -> OFF, 1 -> ON -------------------------------- //
- // --- F L A G I G L O B A L N E ----------------------------------------------------------------------------------- //
- bool F_reset_run = true; // --- synchronizacja wątku 5 do pełnej godziny --------- //
- // --- bool'e dla LCD ------------------------------------------------------------------------------------------------ //
- bool F_music_play = false; // --- tylko dla LCD --- gdy TRUE pokazuje progresBAR --- //
- bool F_music_start = false; // --- tylko dla LCD --- gdy TRUE wyświetla statusBAR --- //
- bool F_music_stop = false; // --- tylko dla LCD --- gdy TRUE czyści progresBAR ----- //
- // --- bool dla Continous MP3 Play ----------------------------------------------------------------------------------- //
- bool F_music_auto = false; // --- jeśli TRUE co 1 sekundę kontroluje MP3Playerem --- //
- bool F_timer_auto = false; // --- jeśli TRUE co 1 godzinę kontroluje TimeSpekar'em - //
- // --- bool dla Continous MP3 Play (paski LED) ----------------------------------------------------------------------- //
- bool F_NeoFire_stop = false; // --- jeśli TRUE to wygasza paski LED ------------------ //
- bool F_NeoFire_play = false; // --- jeśli TRUE to RGB LED są zajęte, nie można ich --- //
- bool step_fire = true; //
- // --- używać ------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- bool F_dataShow = true; // wyswietl datę jeśli nie gra muzyka //
- char data_to_lcd[21]; // --- przechowuje tu string do wyswietlenia na LCD---- //
- //char msg_bufor [21]; // --- bufor msg -------------------------------------- //
- // --- MESSAGE ------- do pamięci PROGMEM ---------------------------------------------------------------------------- //
- const char msg0[] PROGMEM = " Witaj Wiktoria :-) ";
- const char msg1[] PROGMEM = " Uruchomiono: Setup ";
- const char msg2[] PROGMEM = " Juz prawie gotowe! ";
- const char msg3[] PROGMEM = " .................. ";
- const char* const msg[] PROGMEM = {msg0, msg1, msg2, msg3};
- //
- // --- MIESIACE ------- do pamięci PROGMEM --------------------------------------------------------------------------- //
- // const char *monthMap[12] = {"styczen","luty","marzec","kwiecien","maj","czerwiec",
- // "lipiec","sierpien","wrzesien","pazdziernik","listopad","grudzien"};
- // z 2018kbyts pamięci dynamiczne redukcja do 1898kbyts //
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- const char dayMonth00[] PROGMEM = "NULL";
- const char dayMonth01[] PROGMEM = "styczen";
- const char dayMonth02[] PROGMEM = "luty";
- const char dayMonth03[] PROGMEM = "marzec";
- const char dayMonth04[] PROGMEM = "kwiecien";
- const char dayMonth05[] PROGMEM = "maj";
- const char dayMonth06[] PROGMEM = "czerwiec";
- const char dayMonth07[] PROGMEM = "lipiec";
- const char dayMonth08[] PROGMEM = "sierpien";
- const char dayMonth09[] PROGMEM = "wrzesien";
- const char dayMonth10[] PROGMEM = "pazdziernik";
- const char dayMonth11[] PROGMEM = "listopad";
- const char dayMonth12[] PROGMEM = "grudzien";
- const char* const month_table[] PROGMEM = {dayMonth00,dayMonth01,dayMonth02,dayMonth03,dayMonth04,dayMonth05,dayMonth06,
- dayMonth07,dayMonth08,dayMonth09,dayMonth10,dayMonth11,dayMonth12};
- //
- // --- DNI TYGODNIA --- do pamięci PROGMEM --------------------------------------------------------------------------- //
- //const char *dayMap[14] = {"poniedzialek","wtorek","sroda","czwartek","piatek","sobota","niedziela"}; --- old version
- // z 2106bytes pamięci dynamicznej redukcja do 2018 pamięci dynamicznej //
- // ------------------------------------------------------------------------------------------------------------------- //
- const char dayMap0[] PROGMEM = "NULL";
- const char dayMap1[] PROGMEM = "poniedzialek";
- const char dayMap2[] PROGMEM = "wtorek";
- const char dayMap3[] PROGMEM = "sroda";
- const char dayMap4[] PROGMEM = "czwartek";
- const char dayMap5[] PROGMEM = "piatek";
- const char dayMap6[] PROGMEM = "sobota";
- const char dayMap7[] PROGMEM = "niedziela";
- const char* const day_table[] PROGMEM = {dayMap0,dayMap1,dayMap2,dayMap3,dayMap4,dayMap5,dayMap6,dayMap7};
- //
- // -- T H R E A D S O L D S C H O O L : - ) M A D E B Y P O W E R T O M E K ------------------------------- //
- unsigned long czasZERO = 0; // --- czas ZERO dla funkcji MILLIS() --------------------------------------------- //
- unsigned long czas01SEC = 0; // --- czas01SEC dla sprawdzania co 1 sekundę ------------------------------------- //
- unsigned long czas50MSC = 0; // --- czas05SEC dla sprawdzania co 50 ms---- ------------------------------------- //
- unsigned long czas10SEC = 0; // --- czas30SEC dla sprawdzania co 30 sekund ------------------------------------- //
- unsigned long czas01MIN = 0; // --- czas01MIN dla sprawdzania co 1 minutę -------------------------------------- //
- unsigned long czas30SEC = 0; // --- czas05MIN dla sprawdzania co 5 minut --------------------------------------- //
- unsigned long czas30MIN = 0; // --- czas30MIN dla sprawdzania co 30 minut -------------------------------------- //
- unsigned long czas01HRS = 0; // --- czas01HRS dla sprawdzania co 1 godzine ------------------------------------- //
- unsigned long timeout01SEC = 0; // --- timeout dla 1 sekundy ------------------------------------------------------ //
- unsigned long timeout50MSC = 0; // --- timeout dla 50 msekundy ---------------------------------------------------- //
- unsigned long timeout10SEC = 0; // --- timeout dla 30sekundy ------------------------------------------------------ //
- unsigned long timeout01MIN = 0; // --- timeout dla 1 minuty ------------------------------------------------------ //
- unsigned long timeout30SEC = 0; // --- timeout dla 5 minuty ------------------------------------------------------ //
- unsigned long timeout30MIN = 0; // --- timeout dla 30 minut ------------------------------------------------------ //
- unsigned long timeout01HRS = 0; // --- timeout dla 1 godziny ------------------------------------------------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- // progressBAR dla wyswietlacza LCD. Czas trwania utworu jest mapowany, 0 to znak pusty, nie wyswietla sie nic, gdy //
- // jest jedynka na wyświetlaczu LCD pojawia się znak PEŁNY //
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- volatile uint_fast8_t progressBar[17] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; // progress BAR 16 - segmentów --------- //
- //
- // --- SETUP & UPDATE CLOCK ---------------------------------------------------------------------------------------------
- void CLOCK_init() // --- ustaw godzinę i datę ------------------------------ //
- { //
- CLOCK.setDS1302Time(00, 17, 15, 7, 24, 01, 2021); // --- reczne ustawienie czasu ss:min:hh:dayw,day,mm,y --- //
- #if DEBUG_MAIN
- Serial.println(F("Inside: ClockInit(); Dokonano przestawienia czasu "));
- #endif
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- void ClockTimeUpdate() //
- { //
- CLOCK.updateTime(); // ... aktualizacja czasu rzeczywistego ................... //
- czas[0] = CLOCK.hours / 10; //
- czas[1] = CLOCK.hours % 10; //
- czas[2] = CLOCK.minutes / 10; //
- czas[3] = CLOCK.minutes % 10; //
- czas[4] = CLOCK.seconds / 10; //
- czas[5] = CLOCK.seconds % 10; //
- godzina = CLOCK.hours; //
- minuta = CLOCK.minutes; //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // zwraca ilość wolnej pamięci RAM ----------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- unsigned int FreeRam()
- {
- extern int __heap_start, *__brkval;
- unsigned int v;
- return (unsigned int)&v - (__brkval == 0 ? (unsigned int)&__heap_start : (unsigned int)__brkval);
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- void TypeWriter(const String & message, unsigned int wait, byte position)
- {
- LCD.setCursor(0,position);
- for (const char c: message)
- {
- LCD.print(c);
- delay(wait);
- }
- }
- //
- void LcdArrayCenter(char *text, byte max_size) //
- { //
- char bufor[24]; // mała rezerwa, bo nie obsługuje błedów :-) ---- //
- byte n = strlen(text); //
- byte l = (max_size - n) / 2; //
- //
- if(n<17) // jesli max 16 znakow to cos zrobimy ----------- //
- { //
- for(int i = 0; i < l - 1; i++ ) //
- { //
- if(!i) strcpy(bufor, "*"); // jesli krok 0 (i = 0) --- strcpy --- poczatek //
- else strcat(bufor, "*"); // jesli krok 1 (i = 1) --- strcat --- dalej //
- } //
- strcat(bufor, " "); //
- strcat(bufor,text); //
- strcat(bufor, " "); //
- for(int i = 0; i< l -1; i++ ) strcat(bufor,"*"); //
- if(n%2) strcat(bufor,"*"); // jesli zostala reszta z dzielenia jeden blok + //
- strcpy(data_to_lcd, bufor); // bufor zbudowany, przekopiuj do zmiennej ------ //
- } //
- else strcpy(data_to_lcd, text); // poza zakresem, tylko przekopiuj -------------- //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- D A Y L C D U P D A T E ---------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // żeby uniknąć ciągłych i zbędnych obliczeń funkcja została przeniesiona z klasy WIKILCD do programu głównego, jest //
- // tylko wywyływana przy starcie systemu i sprawdzana co godzinę czy zmienił się dzień, jeśli tak następuje wejście tu //
- // i wygenerowanie w tablilcy data_to_lcd nowego ciągu znaków dzien tygodnia, dzien miesiaca, miesiac, rok //
- // ------------------------------------------------------------------------------------------------------------------- //
- void DayLcdUpdate() //
- { //
- char bufor[22]; // bufor lancucha do zbudowania ciagu znakow do wyswietlenia //
- strcpy(bufor, "dzis: "); //
- strcat_P( bufor, (char*) pgm_read_word ( & (day_table[data[0]] ) ) ); // kopiuj z PROGMEM dzien tygodnia ---- //
- //strcat(bufor, dayMap[ data[0]-1] ); // kopiuj do bufora nazwe dnia (z tablicy dayMAP) //
- #if DEBUG_MAIN //
- Serial.println(F("Inside: DayLcdUpdate(); Zbudowano lancuch data_to_lcd dla wyswietlacza LCD."));
- #endif
- LcdArrayCenter(bufor, 20); //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- void DataLcdUpdate() //
- { //
- char bufor[25]; // bufor lancucha do zbudowania ciagu znakow do wyswietlenia //
- char bufch[4]; // bufor dla sprinf //
- //
- sprintf(bufch, "%d", data[1] ); // konwersja do bufch //
- //
- if ( data[1] < 10 ) //
- { //
- strcpy(bufor, "0"); // jeśli dzien miesiaca mniejszy od 10 doklej liczbę 0 ---------- //
- strcat(bufor, bufch); //
- } //
- else strcpy(bufor, bufch); // na początek, bo więcej niż 9 dni ------------------------------ //
- //
- strcat(bufor, " ");
- strcat_P( bufor, (char*) pgm_read_word ( & (month_table[data[2]] ) ) ); //
- strcat(bufor, " "); //
- //
- sprintf(bufch, "%d", data[3] ); // rok ----------------------------------------------------------- //
- strcat(bufor, bufch); //
- //
- //strcat(bufor, "\0");
- #if DEBUG_MAIN
- Serial.println(F("Inside: DataLcdUpdate(); Zbudowano lancuch data_to_lcd dla wyswietlacza LCD."));
- #endif
- LcdArrayCenter(bufor, 20); //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- T E M P L C D U P D A T E --------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // aktualizator temperatury dla wyświetlacza LCD -> podwójnie buforowany - przechowywane w tej samej tablicy co DATA //
- // ------------------------------------------------------------------------------------------------------------------- //
- void TempLcdUpdate() //
- { //
- char bufor[25]; //
- char bufch[4]; //
- strcpy(bufor,"Temperatura: "); //
- sprintf(bufch, "%d", temperatura); //
- strcat(bufor, bufch); //
- strcat(bufor, " st.C"); //
- //strcat(bufor, "\0");
- #if DEBUG_MAIN
- Serial.println(F("Inside: TempLcdUpdate(); Zbudowano lancuch data_to_lcd dla wyswietlacza LCD."));
- #endif //
- LcdArrayCenter(bufor, 20); //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- H I G R L C D U P D A T E --------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // aktualizator wilgotnosci dla wyświetlacza LCD -> podwójnie buforowany - przechowywane w tej samej tablicy co DATA //
- // ------------------------------------------------------------------------------------------------------------------- //
- void HigrLcdUpdate() //
- { //
- char bufor[25]; //
- char bufch[4]; //
- strcpy(bufor,"Wilgotnosc : ");
- sprintf(bufch, "%d", wilgotnosc); //
- strcat(bufor, bufch); //
- strcat(bufor, " %"); //
- //strcat(bufor, "\0");
- #if DEBUG_MAIN
- Serial.println(F("Inside: HigrLcdUpdate(); Zbudowano lancuch data_to_lcd dla wyswietlacza LCD."));
- #endif
- LcdArrayCenter(bufor, 20); //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- L I G H T L C D U P D A T E ------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // aktualizator oswietlenia dla wyświetlacza LCD -> podwójnie buforowany - przechowywane w tej samej tablicy co DATA //
- // ------------------------------------------------------------------------------------------------------------------- //
- void LightLcdUpdate() //
- { //
- char bufor[25]; //
- char bufch[4]; //
- strcpy(bufor,"Oswietlenie : "); //
- sprintf(bufch, "%d", oswietlenie1); //
- strcat(bufor, bufch); //
- strcat(bufor, " %"); //
- //strcat(bufor, "\0");
- #if DEBUG_MAIN
- Serial.println(F("Inside: LightLcdUpdate(); Zbudowano lancuch data_to_lcd dla wyswietlacza LCD."));
- #endif //
- LcdArrayCenter(bufor, 20); //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- void ClockDateUpdate() //
- { //
- CLOCK.updateTime(); // ... aktualizacja czasu rzeczywistego ................... //
- data[0] = CLOCK.dayofweek; //
- data[1] = CLOCK.dayofmonth; //
- data[2] = CLOCK.month; //
- data[3] = CLOCK.year; //
- #if DEBUG_MAIN
- Serial.println(F("Inside: ClockDateUpdate(); Dokonano aktualizacji daty z modulu zegara."));
- #endif //
- } //
- // --- SENSOR UPDATE ------------------------------------------------------------------------------------------------- //
- void SensorUpdate() //
- { //
- int_fast8_t w = POGODA.getHumidity(); // --- wilgotnosc ------------------------------ //
- int_fast8_t t = POGODA.getTemperature(); // --- temperatura ----------------------------- //
- oswietlenie1 = map(analogRead(FOTOREZYSTOR1), 0, 1023, 99, 0); // --- oswietlenie ----------------------------- //
- oswietlenie2 = map(analogRead(FOTOREZYSTOR2), 0, 1023, 99, 0); // --- oswietlenie ----------------------------- //
- if(w) wilgotnosc = w; // --- jeśli nie błąd odczytu ------------------ //
- if(t) temperatura = t; // --- jeśli nie błąd odczytu ------------------ //
- #if DEBUG_MAIN
- Serial.println(F("Inside: SensorUpdate(); Wykonano aktualizacje wartosci z sensorow. "));
- #endif //
- } //
- // --- SETUP & INIT NEOPIXEL ----------------------------------------------------------------------------------------- //
- void NeoPixelInit() //
- { //
- rgb1L.begin(); // start dla strip 1 --------------------------- //
- rgb1L.setBrightness(20); // set ----------------------------------------- //
- rgb1L.show(); // wszystkie pixele wyłącz --------------------- //
- //
- rgb1P.begin(); // start dla strip 2 --------------------------- //
- rgb1P.setBrightness(20); // set ----------------------------------------- //
- rgb1P.show(); // wszystkie pixele wyłącz --------------------- //
- //
- rgb2L.begin(); // start dla strip 3 --------------------------- //
- rgb2L.setBrightness(20); // set ----------------------------------------- //
- rgb2L.show(); // wszystkie pixele wyłącz --------------------- //
- //
- rgb2P.begin(); // start dla strip 4 --------------------------- //
- rgb2P.setBrightness(20); // set ----------------------------------------- //
- rgb2P.show(); // wszystkie pixele wyłącz --------------------- //
- // --- jeśli DEBUG_MAIN jest TRUE --- to pokaż na konsolę SERIALA komunikat -------------------------------------- //
- #if DEBUG_MAIN
- Serial.println(F("Inside: NeoPixelInit(); Wykonano inicjacje NeoPixel !!! "));
- #endif //
- } //
- // --- THREAD MY OLD SCHOOL :-) -------------------------------------------------------------------------------------- //
- void MyThread() //
- { //
- czasZERO = millis(); // --- zapamiętaj pod zmienną czasZERO z millis() -------- //
- czas01SEC = czasZERO - timeout01SEC; // --- przypisz nowy czas do warunków millis() ----------- //
- czas50MSC = czasZERO - timeout50MSC; // --- przypisz nowy czas do warunków millis() ----------- //
- czas10SEC = czasZERO - timeout10SEC; // --- przypisz nowy czas do warunków millis() ----------- //
- czas30SEC = czasZERO - timeout30SEC; // --- przypisz nowy czas do warunków millis() ----------- //
- czas01MIN = czasZERO - timeout01MIN; // --- przypisz nowy czas do warunków millis() ----------- //
- czas30MIN = czasZERO - timeout30MIN; // --- przypisz nowy czas do warunków millis() ----------- //
- czas01HRS = czasZERO - timeout01HRS; // --- przypisz nowy czas do warunkow millis() ----------- //
- // --- wykonaj co 1 sekundę ---------------------------------------------------------------------------------------- //
- if(czas01SEC >= 1000UL) // --- wykonaj co sekundę -------------------------------- //
- { //
- Thread_01s();
- timeout01SEC = czasZERO; // --- resetuj i ustaw 0UL ------------------------------- //
- //Serial.println( FreeRam() );
- } //
- // --- wykonaj co 5 sekund ----------------------------------------------------------------------------------------- //
- if(czas50MSC >= 51UL) // --- wykonaj co 51 ms - ------------------------------ //
- { //
- Thread_50us(); // wątek nr. 1 -> wykonuj co 51 ms ---------------------- //
- timeout50MSC = czasZERO; // --- resetuj i ustaw 0UL ------------------------------- //
- } //
- // --- wykonaj co 10 sekund ---------------------------------------------------------------------------------------- //
- if(czas10SEC >= 10000UL) // --- wykonaj co 10 sekund ------------------------------ //
- { //
- timeout10SEC = czasZERO; // --- resetuj i ustaw 0UL ------------------------------- //
- } //
- // --- wykonaj co 30 sekund----------------------------------------------------------------------------------------- //
- if(czas30SEC >= 30000UL) // --- wykonaj 30 sekund --------------------------------- //
- { //
- timeout30SEC = czasZERO; // --- resetuj i ustaw 0UL ------------------------------- //
- } //
- // --- wykonaj co 1 minutę ----------------------------------------------------------------------------------------- //
- if(czas01MIN >= 60000UL) // --- wykonaj co 1 minutę ------------------------------- //
- {
- Thread_01m(); //
- timeout01MIN = czasZERO; // --- resetuj i ustaw 0UL ------------------------------- //
- } //
- // --- wykonaj co 30 minut ----------------------------------------------------------------------------------------- //
- if(czas30MIN >= 500UL) // --- wykonuj co 0.30 s --------------------------------- //
- { //
- if(!F_music_auto)
- {
- fire3.TicTac16(0);
- fire4.TicTac16(1);
- }
- timeout30MIN = czasZERO; // --- resetuj i ustaw 0UL ------------------------------- //
- } //
- // --- wykonaj co 60 minut ----------------------------------------------------------------------------------------- //
- if(czas01HRS >= 6000000UL) // --- wykonaj co 60 minut ------------------------------- //
- { //
- Thread_01h();
- timeout01HRS = czasZERO; // --- resetuj i ustaw 0UL ------------------------------- //
- } //
- // ----------------------------------------------------------------------------------------------------------------- //
- } //
- // --- RELAY SETUP & INIT -------------------------------------------------------------------------------------------- //
- void RelayInit() //
- { //
- for (uint_fast8_t i = 0; i < 8; i++) //
- { //
- R[i].begin(); //
- R[i].turnOff(); // do stanu niskiego ------------------------------------- //
- RelayStatus[i] = R[i].getState(); // zapisz status przekaznikow ---------------------------- //
- } //
- // -- jeśli DEBUG_MAIN jest TRUE --- to pokaż na konsolę SERIALA komunikat --------------------------------------- //
- #if DEBUG_MAIN
- Serial.println(F("Inside: RelayInit(); Wykonano instukcje ustawien !!! "));
- #endif
- }
- // --- S E T U P ----------------------------------------------------------------------------------------------------- //
- void setup() //
- { //
- //#if DEBUG_MODE
- Serial.begin(57600);
- //#endif
- POGODA.setup(2); //
- RelayInit(); //
- PANEL.setupDisplay(true, 1); // --- ustaw wyświetlacz na PANELU ------------------------- //
- PILOT.enableIRIn(); //
- lcd -> init(&LCD); // --- włącz LCD ------------------------------------------- //
- panel -> init(&PANEL); //
- panel -> showPanel(); //
- ClockTimeUpdate(); // --- aktualizuj czas ------------------------------------- //
- ClockDateUpdate(); // --- aktualizuj datę ------------------------------------- //
- NeoPixelInit(); // --- inicjuj NeoPixel ------------------------------------ //
- SensorUpdate(); // --- pobierz temperaturę, wilgotność, oświetlenie -------- //
- //
- MP3Stream.begin(MD_YX5300::SERIAL_BPS); //
- mp3.begin(); //
- mp3.setSynchronous(true); //
- //
- fire1.Init(8); // --- init fire1 ------------------------------------------ //
- fire2.Init(8); // --- init fire2 ------------------------------------------ //
- fire3.Init(16); // --- init fire3 ------------------------------------------ //
- fire4.Init(16); // --- init fire4 ------------------------------------------ //
- //
- char msg_bufor [21]; // --- bufor msg ------------------------------------ //
- strcpy_P(msg_bufor, (char*)pgm_read_word(&(msg[0]))); // --- skopiuj z pamięci PROGMEM do bufora ---------- //
- TypeWriter(msg_bufor, 100, 0); // --- wyświetl na LCD --- typewriter --------------- //
- fire1.RelayStrobe(); // --- pokaż efekt na fire1 ------------------------- //
- //
- strcpy_P(msg_bufor, (char*)pgm_read_word(&(msg[1]))); // --- skopiuj z pamięci PROGMEM do bufora ---------- //
- TypeWriter(msg_bufor, 100, 1); // --- wyświetl na LCD --- typewriter --------------- //
- fire2.RelayStrobe(); // --- pokaż efekt na fire2 ------------------------- //
- //
- strcpy_P(msg_bufor, (char*)pgm_read_word(&(msg[2]))); // --- skopiuj z pamięci PROGMEM do bufora ---------- //
- TypeWriter(msg_bufor, 100, 2); // --- wyświetl na LCD --- typewriter --------------- //
- fire3.RelayStrobe(); // --- pokaż efekt na fire3 ------------------------- //
- //
- strcpy_P(msg_bufor, (char*)pgm_read_word(&(msg[3]))); // --- skopiuj z pamięci PROGMEM do bufora ---------- //
- TypeWriter(msg_bufor, 100, 3); // 29934 - 1892 // --- wyświetl na LCD --- typewriter --------------- //
- fire4.RelayStrobe(); // --- pokaż efekt na fire 4 ------------------------ //
- //
- //
- wikiMP3.init(); // --- inicjuj odtwarzacz mp3 ------------------------------ //
- // --- jeśli DEBUG_MAIN jest TRUE --- to pokaż na konsolę SERIALA komunikat ---------------------------------------- //
- #if DEBUG_MAIN
- Serial.println(F("Inside: setup(); Wykonano instukcje ustawien !!! "));
- #endif //
- } //
- //
- // --- L O O P ------------------------------------------------------------------------------------------------------- //
- void loop() //
- { //
- PilotUpdate(); // --- sprawdź odczyty z pilota ---------------------------- // //
- PanelUpdate(); // --- sprawdź odczyty z panela ---------------------------- //
- MyThread();
- } //
- // --- W Ą T K I ----------------------------------------------------------------------------------------------------- //
- void Thread_01s() //
- { //
- ClockTimeUpdate(); // aktualizuj co 1 sekundę (CZAS) ------ //
- lcd -> WyswietlCzas(); //
- if(F_music_auto ) // jeśli muzyka jest włączona ---------- //
- { //
- wikiMP3.PlayerUpdate(0); // aktualizuj odtwarzanie -------------- //
- }
- else
- {
- fire1.TicTac();
- fire2.TicTac();
- }
- }
- // --- W Ą T K I ----------------------------------------------------------------------------------------------------- //
- void Thread_50us() //
- { //
- if( F_music_auto ) // jeśli muzyka gra --------------------------------------------- //
- { // i F_NeoFire_fake jest FALSE ---------------------------------- //
- if(step_fire)
- {
- fire1.Draw(); // fire1 -> zapalaj diody --------------------------------------- //
- fire3.Draw(); // fire3 -> zapalaj diody --------------------------------------- //
- step_fire = false; // koniec instrukcji w tym wątku, tylko Draw dla fire 1 i fire 3 //
- }
- else
- {
- fire2.Draw(); // fire2 -> zapalaj diody --------------------------------------- //
- fire4.Draw(); // fire4 -> zapalaj diody --------------------------------------- //
- step_fire = true; // koniec instrukcji w tym wątku, tylko Draw dla fire 2 i fire 4 //
- } //
- //
- F_NeoFire_play = true; // blokuj !!! --------------------------------------------------- //
- } // Flaga F_NeoFire jest ustawiana tylko z PILITA !!! ON/OFF ----- //
- //
- //
- // --- MUZYKA ZATRZYMANA ------------------------------------------------------------------------------------------- //
- if( F_NeoFire_stop ) // jeśli muzyka gra i F_NeoFire_fake jest FALSE ---------------- //
- { //
- fire1.StopDraw(); // fire1 -> zgas diody ----------------------------------------- //
- fire2.StopDraw(); // fire2 -> zgas diody ----------------------------------------- //
- fire3.StopDraw(); // fire3 -> zgas diody ----------------------------------------- //
- fire4.StopDraw(); // fire4 -> zgas diody ----------------------------------------- //
- F_NeoFire_stop = false; // zatrzymanie wykonani, przestaw flagę ------------------------ //
- F_NeoFire_play = false; // odblokuj !!! ------------------------------------------------ //
- } //
- } //
- // --- W Ą T K I ----------------------------------------------------------------------------------------------------- //
- void Thread_10s() //
- { //
- } //
- // --- W Ą T K I ----------------------------------------------------------------------------------------------------- //
- void Thread_01m() //
- { //
- SensorUpdate(); // aktualizuj co 1 minutę (SENSORY) ------------------------------------------------ //
- SystemAutoControl(); // AutoBOT !!! --------------------------------------------------------------------- //
- if(!F_music_auto)
- {
- LCDAutoControl(); // przełączaj informację na wyświetlaczu LCD --------------------- //
- //fire3.CyclonEffect();
- //fire4.CyclonEffect();
- }
- // --- synchronizacja wątku godzinnego --------------------------------------------------------------------------- //
- if(F_reset_run) //
- { //
- if(!minuta) // jeśli pełna godzina synchronizuj wątek ----------------------- //
- { //
- czasZERO = millis(); // --- zapamiętaj pod zmienną czasZERO z millis() -------- //
- timeout01HRS = czasZERO;
- F_reset_run = false; //
- // --- jeśli DEBUG_MAIN jest TRUE --- to pokaż na konsolę SERIALA komunikat ---------------------------------- //
- #if DEBUG_MAIN
- Serial.println(F("Inside: Thread_01m; Dokonano synchronizacji watku Thread_01h "));
- #endif
- } //
- } //
- // --- koniec synchronizacji ------------------------------------------------------------------------------------- //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- W Ą T E K 1 G O D Z I N A --------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // Wątek wykonywany co jedną godzinę, jest synchronizowany flagą F_reset_run, po uruchomieniu Arduino dopiero wtedy //
- // gdy minuta aktualnego czasu to 00 jest dołączony do wykonywania, interwał to 3.600.000 sekund //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Thread_01h() //
- { //
- if( F_timer_auto ) wikiMP3.SpeakTime(); // jeśli muzyka nie gra (F_timer_auto) jest TRUE powiedz czas //
- if( data[0] != CLOCK.dayofweek ) // jeśli zmieniła się data //
- { //
- ClockDateUpdate(); // aktualizuj datę z zegara //
- } //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- S Y S T E M A U T O C O N T R O L ------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // SystemAutoControl(); Funkcja automatycznego sterowanie całym systemem --- jesnym słowem AutoBOT wywyływany loopem //
- // ------------------------------------------------------------------------------------------------------------------- //
- void SystemAutoControl() //
- { //
- if(!F_music_auto) // jeśli muzyka nie gra -------------------------------------- //
- { //
- if(data[0] < 6) // jeśli mieści się w zakresie : poniedziałek - piątek ------- //
- { //
- if(godzina == 6 && 29 > minuta < 32) wikiMP3.PlayerUpdate(1); // włącz budzik o 6:30 ---------------- //
- } //
- else //
- if(data[0] == 6) // jeśli sobota --------------------------------------------- //
- { //
- if(godzina == 8 && 29 > minuta < 32 ) wikiMP3.PlayerUpdate(1); // włącz budzik o 8:30 ---------------- //
- } //
- else //
- if(data[0] > 6) // jeśli niedziela ------------------------------------------ //
- { //
- if(godzina == 9 && 00 > minuta < 03 ) wikiMP3.PlayerUpdate(1); // włącz budzik o 9:01 ---------------- //
- } //
- } // koniec !F_music_auto --- //
- // --------------------------------------------------------------------------------------------------------------- //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- L C D A U T O C O N T R O L ------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // Funkcja na podstawie statycznego licznika buduje tablicę znaków data_to_lcd do wyświetlenia na LCD. Nie ma zatem //
- // potrzeby ingerować w funkcję obsługi w klasie wikiLCD gdyż korzysta ona z extern tablicy która tu zostanie stworzona//
- // ------------------------------------------------------------------------------------------------------------------- //
- void LCDAutoControl() //
- { //
- static byte licznik = 0; // licznik przełącznika do budowania komunikatow //
- //
- //
- switch (licznik) // przełącznik na podstawie statycznego licznika //
- {
- case 0 : // jeśli 0 ------------------------------------- //
- { //
- DayLcdUpdate(); // zbuduj łańcuch z bieżące daty i dnia tygodnia //
- licznik ++; // inkrementuj o 1 ----------------------------- //
- }
- break; //
- case 1 : // jeśli 1 ------------------------------------- //
- { //
- DataLcdUpdate(); // zbuduj łańcuch z bieżące daty i dnia tygodnia //
- licznik ++; // inkrementuj o 1 ----------------------------- //
- } //
- break; //
- case 2: // jeśli 2 ------------------------------------- //
- { //
- TempLcdUpdate(); // zbuduj łańcuch z aktualnej temp w pokoju ---- //
- licznik ++; // inkrementuj o 1 ----------------------------- //
- } //
- break; //
- case 3: // jeśli 3 ------------------------------------- //
- { //
- HigrLcdUpdate(); // zbuduj łańcuch z aktualnej wilgotnosci ------ //
- licznik ++; // inkrementuj o 1 ----------------------------- //
- } //
- break; //
- case 4: // jeśli 4 ------------------------------------- //
- { //
- LightLcdUpdate(); // zbuduj łańcuch z aktualnego swiatla --------- //
- licznik ++; // inkrementuj o 1 ----------------------------- //
- } //
- break; //
- default : //
- { //
- licznik = 0; //
- } //
- break; // auto-zerowanie ------------------------------ //
- } //
- F_dataShow = true; // pozwól na zmianę na wyświetlaczu LCD -------- //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- P I L O T ----------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // Funkcja PilotUpdate -> odczytuje dane z pilota, wykorzystana do tego jest biblioteka RichUNOIRRemote //
- // Biblioteka jest spora, ale oddaje kody w czytelnej postaci, nie trzeba interprerować kodów //
- // bo dostajemy tylko liczby całkowite, które łatwo ogarnąć. //
- // ------------------------------------------------------------------------------------------------------------------- //
- void PilotUpdate() //
- { //
- if (PILOT.decode()) // jeśli przycisk zdekodowany ------------------------------------ //
- { //
- if(PILOT.isReleased()) //
- { //
- #if DEBUG_MAIN
- Serial.print(F("Inside: PilotUpdate(); Odczyt z pilota !!! Kod to : "));
- Serial.println(PILOT.keycode);
- #endif
- switch (PILOT.keycode) // sprawdz jaki przycisk ------------------------------ //
- { //
- case 7: wikiMP3.PlayerUpdate(2); // utwór poprzedni --- klawisz PREV //
- break; //
- case 8: RelaySwitch(3); break; // 8 to klawisz 4 ------------------------------------ //
- case 9: wikiMP3.PlayerUpdate(3); // utwór nastepny --- klawisz NEXT //
- break; //
- case 12: RelaySwitch(0); break; // 12 to klawisz 1 ------------------------------------ //
- case 13: break; // 13 to klawisz C ------------------------------------ //
- case 21: wikiMP3.PlayerUpdate(1); // 21 to klawisz PLAY --------------------------------- //
- case 22: break; // 22 to klawisz 0 ------------------------------------ //
- case 24: RelaySwitch(1); break; // 24 to klawisz 2 ------------------------------------ //
- case 25: if(F_music_auto) wikiMP3.PlayerUpdate(5); // volume DOWN --- klawisz MINUS --- //
- break; //
- case 28: RelaySwitch(4); break; // 28 to klawisz 5 ------------------------------------ //
- case 66: RelaySwitch(6); break; // 66 to klawisz 7 ------------------------------------ //
- case 64: if(F_music_auto) wikiMP3.PlayerUpdate(4); // volume UP --- klawisz PLUS ------ //
- break; //
- case 67: if(F_music_auto) wikiMP3.PlayerUpdate(3); // utwór poprzedni ---------------- //
- break; // 67 to klawisz BACK ------------- //
- case 68: if(F_music_auto) wikiMP3.PlayerUpdate(2); // utwór poprzedni --- klawisz TEST //
- break;
- case 69: break; // 69 to klawisz ON/OFF ------------------------------- //
- case 71: break; // 71 to klawisz MENU --------------------------------- //
- case 74: break; // 74 to klawisz 9 ------------------------------------ //
- case 82: RelaySwitch(7); break; // 82 to klawisz 8 ------------------------------------ //
- case 90: RelaySwitch(5); break; // 90 to klawisz 6 ------------------------------------ //
- case 94: RelaySwitch(2); break; // 94 to klawisz 3 ------------------------------------ //
- default : break; // DOMYŚLNIE ------------------------------------------ //
- } //
- delay(100); //
- } //
- PILOT.resume(); //
- } //
- //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- P A N E L U P D A T E --------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // Funkcja wywoływana z pętli LOOP, sprawdza czy został wciśnięty klawisz na PANELU. Przyciski od 1 do 8 sterują //
- // przekażnikami. Jeśli przekaźnij jest włączony to go wyłącza, jeśli wyłączony to go włącza - nie po za tym //
- // Przyciski nr. 9,10,11,12 - sterują zmianą koloru adresowalnych diód RGB, wszystko odbywa się w klasie fire która //
- // znajduje się w pliku fire.h Przyciski aktywne dla klasy pod warunkiem, że flaga F_music_auto jest TRUE czyli //
- // muzyka gra, jeśli nie jest odwarzany żaden plik MP3 nie ma podmiany kolorów. //
- // Przyciski 13,14,15,16 - sterują odwarzaczem MP3, 13 - przycisk włącza PLAY, jego ponowne wciśniecie powoduje STOP //
- // przycisk 14 włącza STOP, jego ponowne wciśnięcie powoduje PLAY. Przycisk 15 to przełącznik odtwarzanego utworu //
- // na poprzedni pod warunkiem, że gra muzyka -> flaga F_music_auto jest TRUE, inaczej nic nie robi narazie. //
- // Przycisk 16 to przełącznik odwarzanego utworu na następny pod warunkiem, że gra muzyka, inaczej nic nie robi //
- // ------------------------------------------------------------------------------------------------------------------- //
- void PanelUpdate() // funkcja MOD_KEY do obsługi przycisków ----------------- //
- { //
- word keys = PANEL.getButtons(); // zapisz do keys kod przycisku -------------------------- //
- if(keys>0 && keys<17) //
- { //
- delay(100); // jeśli odczytano kod klawiatury z PANEL poczekaj 150ms - //
- #if DEBUG_MAIN
- Serial.print(F("Inside: PanelUpdate(); Odczyt z PANEL !!! Kod to : "));
- Serial.println(keys);
- #endif //
- } //
- // --- S W I T C H ------------------------------------------------------------------------------------------------- //
- switch(keys) //
- { //
- case 1: RelaySwitch(0); break; // przełącz przekaźnik nr. 1 ----------------------------- //
- case 2: RelaySwitch(1); break; // przełącz przekaźnik nr. 2 ----------------------------- //
- case 3: RelaySwitch(2); break; // przełącz przekaźnik nr. 3 ----------------------------- //
- case 4: RelaySwitch(3); break; // przełącz przekaźnik nr. 4 ----------------------------- //
- case 5: RelaySwitch(4); break; // przełącz przekaźnik nr. 5 ----------------------------- //
- case 6: RelaySwitch(5); break; // przełącz przekaźnik nr. 6 ----------------------------- //
- case 7: RelaySwitch(6); break; // przełącz przekaźnik nr. 7 ----------------------------- //
- case 8: RelaySwitch(7); break; // przełącz przekaźnik nr. 8 ----------------------------- //
- case 9: // przycisk nr. 9 ---------------------------------------- //
- { //
- if( F_music_auto ) fire1.SwapColor(); // jeśli gra muzyka, zmień kolory dla fire1 --- //
- }
- break; // o ile LEDY są włączone - F_NeoFire is FALSE //
- case 10: // przycisk nr. 10 --------------------------------------- //
- { //
- if( F_music_auto ) fire2.SwapColor(); // jeśli gra muzyka, zmień kolory dla fire2 --- //
- }
- break; // o ile LEDY są włączone - F_NeoFire is FALSE //
- case 11: // przycisk nr. 11 --------------------------------------- //
- { //
- if( F_music_auto ) fire3.SwapColor(); // jeśli gra muzyka, zmień kolory dla fire3 --- //
- }
- break; // o ile LEDY są włączone - F_NeoFire is FALSE //
- case 12: // przycisk nr. 12 --------------------------------------- //
- { //
- if( F_music_auto ) fire4.SwapColor(); // jeśli gra muzyka, zmień kolory dla fire4 --- //
- }
- break; // o ile LEDY są włączone - F_NeoFire is FALSE //
- case 13: // przycisk nr. 13 --------------------------------------- //
- { //
- if(!F_music_auto) wikiMP3.PlayerUpdate(1); // jeśli nie gra muzyka czyli flaga jest FALSE //
- }
- break; // jeśli przycisk nr. 13 włącz PLAY MP3 ------------------ //
- case 14: // przycisk nr. 14 --------------------------------------- //
- { //
- if( F_music_auto) wikiMP3.PlayerUpdate(1); // jeśli przycisk nr. 14 włącz STOP MP3 ------------------ //
- }
- break; //
- case 15: //
- { // jeśli gra muzyka czyli flaga jest TRUE //
- if( F_music_auto) wikiMP3.PlayerUpdate(2); // jeśli przycisk nr. 15 włącz PREV MP3 FILE ------------- //
- }
- break; //
- case 16: //
- { // jeśli gra muzyka czyli flaga jest TRUE //
- if (F_music_auto) wikiMP3.PlayerUpdate(3); // jeśli przycisk nr. 16 włącz NEXT MP3 FILE ------------- //
- }
- break; //
- default: break; //
- } //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
- // R E L A Y S W I T C H ------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // przełącznik stanów przekaźników, jeśli przekaźnik włączony getState() jest TRUE to wyłącza i zapisuje 0 w tablicy //
- // Jeśli przekaźnik wyłączony getState() jest FALSE to włącza przekaźnik i zapisuje 1 w tablicy. Tablica w któej //
- // przechowywane są stany RelayStatus[nr_przekaznika] jest pomocnicza, korzysta z nie funkcja która wyświetla stany //
- // ma panelu TM1638 //
- // ------------------------------------------------------------------------------------------------------------------- //
- void RelaySwitch(int keys) // funkcja RelaySwitch() na wejsciu nr. przekaznika -- //
- { //
- if(R[keys].getState()) // sprawdz czy przekaznik wlaczony -------------------- //
- { //
- RelayStatus[keys] = 0; // ustaw status przekaznika na 0 ---------------------- //
- R[keys].turnOff(); // wyłącz przekaźnik ---------------------------------- //
- if(!F_music_play)
- {
- fire3.RelayEffect();
- }
- } //
- else // jeśli przekaźnik wyłączony ------------------------- //
- { //
- RelayStatus[keys] = 1; // ustaw status przekaźnika na 1 ---------------------- //
- R[keys].turnOn(); // włącz przekaźnik ----------------------------------- //
- if(!F_music_play)
- {
- fire4.RelayEffect();
- }
- } //
- panel -> showPanel(); // zmieniły się stany, więc wyświetl to na PANEL ------ //
- } //
- // ------------------------------------------------------------------------------------------------------------------- //
Advertisement
Add Comment
Please, Sign In to add comment