Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <EEPROM.h>
- void sendkod(unsigned long code, int impuls);
- long powtorzkod = 0;
- long powtorzimpuls = 0;
- byte powtorz = 0;
- struct stadres {
- long kod;
- int impuls;
- };
- #define zal 1 // wartosci pola funkcja
- #define przel 2
- #define wlsek 3
- #define wlmin 4
- #define wlh 5
- struct stfunkcja {
- byte kodwe;
- byte kodwy; //indeks kodu wyjściowego
- byte funkcja;
- byte czas; // czas lub 2 indeks kodu wyjściowego
- byte stan; //zmienna pomocnicza
- };
- const int rozm_tab_nad = 5; //rozmiar tablicy kodów nadajników
- const int rozm_tab_odb = 5; //rozmiar tablicy kodów odbiorników
- const int rozm_tab_fun = 5; //rozmiar tablicy kodów funkcji
- stadres tablica_adres_nad[rozm_tab_nad]; //deklaracja tablicy kodów nadajników
- stadres tablica_adres_odb[rozm_tab_odb]; //deklaracja tablicy kodów odb
- stfunkcja tablica_adres_fun[rozm_tab_fun]; //deklaracja tablicy kodów funkcji
- byte szukaj_indeks_we(long kod) {
- byte indekswy = 0;
- for (int i = 1; i < (rozm_tab_nad + 1); i++) if (kod == tablica_adres_nad[i].kod) indekswy = i;
- return indekswy;
- }
- void powtorz_send() {
- if (powtorz) {
- sendkod(powtorzkod, powtorzimpuls);
- Serial.println("powtarzam send " + String(powtorz));
- powtorz--;
- }
- }
- void send_indeks(byte ind) {
- powtorzkod = tablica_adres_odb[ind].kod;
- powtorzimpuls = tablica_adres_odb[ind].impuls;
- powtorz = 2;
- sendkod(tablica_adres_odb[ind].kod, tablica_adres_odb[ind].impuls);
- Serial.println ("index wy " + String (tablica_adres_fun[ind].kodwy) + " kod wy " + String (tablica_adres_odb[ind].kod));
- }
- void gogo(long kod) {
- byte indeks_kod_we = szukaj_indeks_we(kod);
- Serial.println ("kod we " + String (kod) + " index we " + String (indeks_kod_we));
- if (indeks_kod_we != 0) {
- for (int i = 1; i < (rozm_tab_fun); i++ )
- {
- if (indeks_kod_we == tablica_adres_fun[i].kodwe) {
- if (tablica_adres_fun[i].funkcja == zal) {
- send_indeks(tablica_adres_fun[i].kodwy);
- }
- /*
- if (tablica_adres_fun[i].funkcja == przel) {
- if (tablica_adres_fun[i].stan)send_indeks(tablica_adres_fun[i].kodwy); else send_indeks(tablica_adres_fun[i].czas);
- tablica_adres_fun[i].stan = !tablica_adres_fun[i].stan;
- }
- if (tablica_adres_fun[i].funkcja == wlsek) {
- tablica_adres_fun[i].stan = tablica_adres_fun[i].czas;
- if (tablica_adres_fun[i].funkcja == wlmin)tablica_adres_fun[i].stan = tablica_adres_fun[i].czas;
- if (tablica_adres_fun[i].funkcja == wlh)tablica_adres_fun[i].stan = tablica_adres_fun[i].czas;
- }
- */
- }
- }
- }
- }
- //----------------------------------------------- save/read data
- #define pamkodnad 100 // początek tablicy kodów nadajnikow we flash
- #define pamkododb 200 // początek tablicy kodów odbiorników we flash
- #define pamkodfun 300 // początek tablicy kodów funkcji we flash
- stfunkcja wpis_funkcji = {0, 0, 0, 0, 0}; //zapis danych do tablicy funkcji
- int nrpozkod = 0; //nr pozycji do zapisu kodu pobierany z aplikacji BLYNK
- int stan = 1; // nr stanu programu
- int p_kod = 0; //stan przycisku aplikacji BLYNK - start programu i zapisu do pamięci
- int tablica_nr = 0;
- long KOD = 0; // kod urządzenia do zapisu w pamięci
- int IMPULS = 0; //impuls urządzenia do zapisu w pamięci
- void savetabfun () { //zapisz tabelę kodow do flash
- int liczadres = pamkodfun;
- EEPROM.begin(512);
- EEPROM.put(liczadres, tablica_adres_fun);
- EEPROM.end(); // EEPROM.commit();
- }
- void readtabnad() { // odczyt tabeli kodów z flash
- int liczadres = pamkodnad;
- EEPROM.begin(512);
- EEPROM.get(liczadres, tablica_adres_nad);
- EEPROM.end(); // EEPROM.commit();
- }
- void readtabodb() { // odczyt tabeli kodów z flash
- int liczadres = pamkododb;
- EEPROM.begin(512);
- EEPROM.get(liczadres, tablica_adres_odb);
- EEPROM.end(); // EEPROM.commit();
- }
- void readtabfun() { // odczyt tabeli kodów z flash
- int liczadres = pamkodfun;
- EEPROM.begin(512);
- EEPROM.get(liczadres, tablica_adres_fun);
- EEPROM.end(); // EEPROM.commit();
- }
- BLYNK_WRITE(V26) {
- p_kod = param.asInt(); //stan klawisza "start zapisu kodu" 1 = start procedury
- }
- void zapisz_kod_we() {
- tablica_adres_nad[nrpozkod] = {KOD, IMPULS};
- Serial.print(" nr " + String(nrpozkod)); Serial.print(" zapisuje kod " + String(KOD)); Serial.println(" impuls " + String(IMPULS));
- Blynk.virtualWrite(V20, "update", nrpozkod, tablica_adres_nad[nrpozkod].kod, tablica_adres_nad[nrpozkod].impuls);
- EEPROM.begin(512);
- EEPROM.put(pamkodnad, tablica_adres_nad);
- EEPROM.end(); // EEPROM.commit();
- } //procedura wywołania zapisu tablicy kodów do pamięci nieulotnej
- void reset_all() { // resety po zakończeniu procedury
- o_kod = 0; KOD = 0; p_kod = 0; o_impuls = 0;
- }
- void zapisz_kod_wy() {
- tablica_adres_odb[nrpozkod] = {KOD, IMPULS};
- Serial.print(" nr " + String(nrpozkod)); Serial.print(" zapisuje kod " + String(KOD)); Serial.println(" impuls " + String(IMPULS));
- Blynk.virtualWrite(V30, "update", nrpozkod, tablica_adres_odb[nrpozkod].kod, tablica_adres_odb[nrpozkod].impuls);
- EEPROM.begin(512);
- EEPROM.put(pamkododb, tablica_adres_odb);
- EEPROM.end(); // EEPROM.commit();
- } //procedura wywołania zapisu tablicy kodów do pamięci nieulotnej
- void do_zapisz_kod() { // resety i zapisz kod
- if (tablica_nr == 1) zapisz_kod_we();
- if (tablica_nr == 2) zapisz_kod_wy();
- Blynk.virtualWrite(V27, KOD); //wyświetlanie zapisywanego kodu
- Blynk.virtualWrite(V26, 0); //przełcznik procedury wyłącz
- reset_all();
- }
- void KOD_do_eeprom() { //graf czyli automat skończony procedury zapisu kodu 433MHz do pamięci
- switch (stan) {
- case 1: {
- if (p_kod != 0) stan = 2; else stan = 1;
- o_kod = 0; KOD = 0;
- } break;
- case 2: {
- if (p_kod == 0) stan = 1;
- if (o_kod != 0) stan = 3;
- } break;
- case 3: {
- KOD = o_kod;
- IMPULS = o_impuls;
- o_kod = 0;
- stan = 4;
- } break;
- case 4: {
- if (p_kod == 0) stan = 5;
- if (o_kod != 0) stan = 6;
- } break;
- case 5: {
- do_zapisz_kod();
- stan = 1;
- } break;
- case 6: {
- if (o_kod == KOD) stan = 5; else stan = 3;
- } break;
- default: break;
- }
- }
- //--------------------------------------------------setup tablicy funkcji
- void wyswietl_start() {
- Blynk.virtualWrite(V21, String ("Wej " + String (wpis_funkcji.kodwe) ));
- Blynk.virtualWrite(V22, String ("Wyj " + String (wpis_funkcji.kodwy) ));
- Blynk.virtualWrite(V23, String ("Fun " + String (0) ));
- Blynk.virtualWrite(V25, 0);
- Blynk.virtualWrite(V27, 0);
- }
- void wyswietl_nowy_rekord() {
- Blynk.virtualWrite(V24, String ("We " + String (wpis_funkcji.kodwe) + " Wy " + String (wpis_funkcji.kodwy) + " Fun " + String (wpis_funkcji.funkcja) + " Czas " + String (wpis_funkcji.czas) + " Stan " + String (wpis_funkcji.stan)));
- }
- BLYNK_WRITE(V20) { //wybór kodu wej
- wpis_funkcji.kodwe = param[1].asInt();
- Blynk.virtualWrite (V20, "pick", wpis_funkcji.kodwe);
- Blynk.virtualWrite(V21, String ("Wej " + String (wpis_funkcji.kodwe) ));
- tablica_nr = 1;
- nrpozkod = param[1].asInt();
- wyswietl_nowy_rekord();
- }
- BLYNK_WRITE(V30) { //wybór kodu wyj
- wpis_funkcji.kodwy = param[1].asInt();
- Blynk.virtualWrite (V30, "pick", wpis_funkcji.kodwy);
- Blynk.virtualWrite(V22, String ("Wyj " + String (wpis_funkcji.kodwy) ));
- tablica_nr = 2;
- nrpozkod = param[1].asInt();
- wyswietl_nowy_rekord();
- }
- BLYNK_WRITE(V40) {// wybór indeksu i zapis rekordu do tablicy funkcji
- Blynk.virtualWrite(V23, String ("Fun " + String (param[1].asInt()) ));
- byte i = param[1].asInt();
- tablica_adres_fun[i] = wpis_funkcji;
- String s = String (String (tablica_adres_fun[i].kodwe) + " " + String (tablica_adres_fun[i].kodwy) + " " + String (tablica_adres_fun[i].funkcja) + " " + String (tablica_adres_fun[i].czas));
- Blynk.virtualWrite(V40, "update", i, s , tablica_adres_fun[i].stan);
- Blynk.virtualWrite (V40, "pick", i);
- Blynk.virtualWrite (V40, "select", i);
- savetabfun ();
- }
- BLYNK_WRITE(V25) { //wybór funkcji
- wpis_funkcji.funkcja = param.asInt();
- wyswietl_nowy_rekord();
- }
- //-------------------- koniec programu
- //--------------------------------------setupy testy
- void wyswietl_tab_nad() {
- for (int i = 0; i < (rozm_tab_nad + 1); i++) Blynk.virtualWrite(V20, "add", i, tablica_adres_nad[i].kod, tablica_adres_nad[i].impuls);
- }
- void wyswietl_tab_odb() {
- for (int i = 0; i < (rozm_tab_odb + 1); i++) Blynk.virtualWrite(V30, "add", i, tablica_adres_odb[i].kod, tablica_adres_odb[i].impuls);
- }
- void wyswietl_tab_fun() {
- for (int i = 0; i < (rozm_tab_fun + 1); i++ ) {
- String s = String (String (tablica_adres_fun[i].kodwe) + " " + String (tablica_adres_fun[i].kodwy) + " " + String (tablica_adres_fun[i].funkcja) + " " + String (tablica_adres_fun[i].czas));
- Blynk.virtualWrite(V40, "add", i, s , tablica_adres_fun[i].stan);
- }
- }
- void test_tablica() {
- //-------- ustawienia testowe
- Blynk.virtualWrite(V20, "clr");
- Blynk.virtualWrite(V30, "clr");
- Blynk.virtualWrite(V40, "clr");
- tablica_adres_nad[0] = {0 , 0};
- tablica_adres_nad[1] = {5526804 , 320};
- tablica_adres_nad[2] = {5526801 , 320};
- tablica_adres_nad[3] = {5526609 , 320};
- tablica_adres_nad[4] = {5526612 , 320};
- wyswietl_tab_nad();
- tablica_adres_odb[0] = {0 , 0};
- tablica_adres_odb[1] = {5522769 , 320};
- tablica_adres_odb[2] = {5522772 , 320};
- tablica_adres_odb[3] = {5525841 , 320};
- tablica_adres_odb[4] = {5525844 , 320};
- wyswietl_tab_odb();
- tablica_adres_fun[0] = {0, 0, 0, 0, 0};
- tablica_adres_fun[1] = {1, 1, 1, 0, 0};
- tablica_adres_fun[2] = {2, 2, 1, 0, 0};
- tablica_adres_fun[3] = {3, 4, 1, 0, 0};
- tablica_adres_fun[4] = {4, 1, 1, 0, 0};
- wyswietl_tab_fun();
- }
- void read_table_from_eeprom()
- {
- readtabnad(); // odczytuje z eepromu
- wyswietl_tab_nad();
- readtabodb(); // odczytuje z eepromu
- wyswietl_tab_odb();
- readtabfun();
- wyswietl_tab_fun();
- }
- void routersetup() {
- wyswietl_nowy_rekord();
- wyswietl_start();
- test_tablica();
- read_table_from_eeprom();
- }
- void router() {
- KOD_do_eeprom();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement