Krzyspx

router 433 cz.1

Jan 9th, 2018
184
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <EEPROM.h>
  2.  
  3. void sendkod(unsigned long code, int impuls);
  4. long powtorzkod = 0;
  5. long powtorzimpuls = 0;
  6. byte powtorz = 0;
  7.  
  8. struct stadres {
  9.   long kod;
  10.   int impuls;
  11. };
  12.  
  13. #define zal 1  // wartosci pola funkcja
  14. #define przel 2
  15. #define wlsek 3
  16. #define wlmin 4
  17. #define wlh 5
  18.  
  19. struct stfunkcja {
  20.   byte kodwe;
  21.   byte kodwy;  //indeks kodu wyjściowego
  22.   byte funkcja;
  23.   byte czas; // czas lub 2 indeks kodu wyjściowego
  24.   byte stan; //zmienna pomocnicza
  25. };
  26.  
  27. const int rozm_tab_nad = 5; //rozmiar tablicy kodów nadajników
  28. const int rozm_tab_odb = 5; //rozmiar tablicy kodów odbiorników
  29. const int rozm_tab_fun = 5; //rozmiar tablicy kodów funkcji
  30.  
  31. stadres tablica_adres_nad[rozm_tab_nad]; //deklaracja tablicy kodów nadajników
  32. stadres tablica_adres_odb[rozm_tab_odb]; //deklaracja tablicy kodów odb
  33. stfunkcja tablica_adres_fun[rozm_tab_fun]; //deklaracja tablicy kodów funkcji
  34.  
  35.  
  36. byte szukaj_indeks_we(long kod) {
  37.   byte     indekswy = 0;
  38.   for (int i = 1; i < (rozm_tab_nad + 1); i++) if (kod == tablica_adres_nad[i].kod) indekswy = i;
  39.   return indekswy;
  40. }
  41. void powtorz_send() {
  42.   if (powtorz) {
  43.     sendkod(powtorzkod, powtorzimpuls);
  44.     Serial.println("powtarzam send  " + String(powtorz));
  45.     powtorz--;
  46.   }
  47. }
  48.  
  49. void send_indeks(byte ind) {
  50.   powtorzkod = tablica_adres_odb[ind].kod;
  51.   powtorzimpuls = tablica_adres_odb[ind].impuls;
  52.   powtorz = 2;
  53.   sendkod(tablica_adres_odb[ind].kod, tablica_adres_odb[ind].impuls);
  54.   Serial.println ("index wy  " + String (tablica_adres_fun[ind].kodwy) + "  kod wy  " + String (tablica_adres_odb[ind].kod));
  55. }
  56. void gogo(long kod) {
  57.  
  58.   byte indeks_kod_we = szukaj_indeks_we(kod);
  59.   Serial.println ("kod we " + String (kod) + "  index we  " + String (indeks_kod_we));
  60.  
  61.   if (indeks_kod_we != 0) {
  62.  
  63.     for (int i = 1; i < (rozm_tab_fun); i++ )
  64.     {
  65.       if (indeks_kod_we == tablica_adres_fun[i].kodwe) {
  66.  
  67.         if (tablica_adres_fun[i].funkcja == zal) {
  68.           send_indeks(tablica_adres_fun[i].kodwy);
  69.         }
  70.         /*
  71.           if (tablica_adres_fun[i].funkcja == przel) {
  72.           if (tablica_adres_fun[i].stan)send_indeks(tablica_adres_fun[i].kodwy); else send_indeks(tablica_adres_fun[i].czas);
  73.           tablica_adres_fun[i].stan = !tablica_adres_fun[i].stan;
  74.           }
  75.           if (tablica_adres_fun[i].funkcja == wlsek) {
  76.           tablica_adres_fun[i].stan = tablica_adres_fun[i].czas;
  77.           if (tablica_adres_fun[i].funkcja == wlmin)tablica_adres_fun[i].stan = tablica_adres_fun[i].czas;
  78.           if (tablica_adres_fun[i].funkcja == wlh)tablica_adres_fun[i].stan = tablica_adres_fun[i].czas;
  79.           }
  80.         */
  81.       }
  82.     }
  83.   }
  84. }
  85. //-----------------------------------------------  save/read data
  86.  
  87. #define pamkodnad 100    // początek tablicy kodów nadajnikow we flash
  88. #define pamkododb 200    // początek tablicy kodów odbiorników we flash
  89. #define pamkodfun 300    // początek tablicy kodów funkcji we flash
  90.  
  91. stfunkcja wpis_funkcji = {0, 0, 0, 0, 0}; //zapis danych do tablicy funkcji
  92.  
  93. int nrpozkod = 0; //nr pozycji do zapisu kodu pobierany z aplikacji BLYNK
  94. int stan = 1; // nr stanu programu
  95. int p_kod = 0; //stan przycisku aplikacji BLYNK - start programu i zapisu do pamięci
  96. int tablica_nr = 0;
  97.  
  98. long KOD = 0; // kod urządzenia do zapisu w pamięci
  99. int IMPULS = 0; //impuls urządzenia do zapisu w pamięci
  100.  
  101.  
  102. void savetabfun () { //zapisz tabelę kodow do flash
  103.   int  liczadres = pamkodfun;
  104.   EEPROM.begin(512);
  105.   EEPROM.put(liczadres, tablica_adres_fun);
  106.   EEPROM.end(); //  EEPROM.commit();
  107. }
  108.  
  109. void readtabnad() { // odczyt tabeli kodów z flash
  110.   int  liczadres = pamkodnad;
  111.   EEPROM.begin(512);
  112.   EEPROM.get(liczadres, tablica_adres_nad);
  113.   EEPROM.end(); //  EEPROM.commit();
  114. }
  115.  
  116. void readtabodb() { // odczyt tabeli kodów z flash
  117.   int  liczadres = pamkododb;
  118.   EEPROM.begin(512);
  119.   EEPROM.get(liczadres, tablica_adres_odb);
  120.   EEPROM.end(); //  EEPROM.commit();
  121. }
  122.  
  123. void readtabfun() { // odczyt tabeli kodów z flash
  124.   int  liczadres = pamkodfun;
  125.   EEPROM.begin(512);
  126.   EEPROM.get(liczadres, tablica_adres_fun);
  127.   EEPROM.end(); //  EEPROM.commit();
  128. }
  129.  
  130. BLYNK_WRITE(V26) {
  131.   p_kod  = param.asInt(); //stan klawisza "start zapisu kodu" 1 = start procedury
  132. }
  133.  
  134. void zapisz_kod_we() {
  135.   tablica_adres_nad[nrpozkod] = {KOD, IMPULS};
  136.   Serial.print(" nr  " + String(nrpozkod)); Serial.print("  zapisuje kod  " + String(KOD));  Serial.println(" impuls " + String(IMPULS));
  137.   Blynk.virtualWrite(V20, "update", nrpozkod, tablica_adres_nad[nrpozkod].kod, tablica_adres_nad[nrpozkod].impuls);
  138.   EEPROM.begin(512);
  139.   EEPROM.put(pamkodnad, tablica_adres_nad);
  140.   EEPROM.end(); //  EEPROM.commit();
  141. } //procedura wywołania zapisu tablicy kodów do pamięci nieulotnej
  142.  
  143. void reset_all() { // resety po zakończeniu procedury
  144.   o_kod = 0; KOD = 0; p_kod = 0; o_impuls = 0;
  145. }
  146. void zapisz_kod_wy() {
  147.   tablica_adres_odb[nrpozkod] = {KOD, IMPULS};
  148.   Serial.print(" nr  " + String(nrpozkod)); Serial.print("  zapisuje kod  " + String(KOD));  Serial.println(" impuls " + String(IMPULS));
  149.   Blynk.virtualWrite(V30, "update", nrpozkod, tablica_adres_odb[nrpozkod].kod, tablica_adres_odb[nrpozkod].impuls);
  150.   EEPROM.begin(512);
  151.   EEPROM.put(pamkododb, tablica_adres_odb);
  152.   EEPROM.end(); //  EEPROM.commit();
  153. } //procedura wywołania zapisu tablicy kodów do pamięci nieulotnej
  154.  
  155. void do_zapisz_kod() { // resety i zapisz kod
  156.   if (tablica_nr == 1) zapisz_kod_we();
  157.   if (tablica_nr == 2) zapisz_kod_wy();
  158.  
  159.   Blynk.virtualWrite(V27, KOD); //wyświetlanie zapisywanego kodu
  160.   Blynk.virtualWrite(V26, 0); //przełcznik procedury wyłącz
  161.   reset_all();
  162. }
  163.  
  164. void KOD_do_eeprom() { //graf czyli automat skończony procedury zapisu kodu 433MHz do pamięci
  165.   switch (stan) {
  166.     case 1: {
  167.         if (p_kod != 0) stan = 2; else stan = 1;
  168.         o_kod = 0; KOD = 0;
  169.       } break;
  170.     case 2: {
  171.         if (p_kod == 0) stan = 1;
  172.         if (o_kod != 0) stan = 3;
  173.       } break;
  174.     case 3: {
  175.         KOD = o_kod;
  176.         IMPULS = o_impuls;
  177.         o_kod = 0;
  178.         stan = 4;
  179.       } break;
  180.     case 4: {
  181.         if (p_kod == 0) stan = 5;
  182.         if (o_kod != 0) stan = 6;
  183.       } break;
  184.     case 5: {
  185.         do_zapisz_kod();
  186.         stan = 1;
  187.       } break;
  188.     case 6: {
  189.         if (o_kod == KOD) stan = 5; else stan = 3;
  190.       } break;
  191.     default: break;
  192.   }
  193. }
  194.  
  195.  
  196. //--------------------------------------------------setup tablicy funkcji
  197. void wyswietl_start() {
  198.   Blynk.virtualWrite(V21, String ("Wej  " + String (wpis_funkcji.kodwe) ));
  199.   Blynk.virtualWrite(V22, String ("Wyj  " + String (wpis_funkcji.kodwy) ));
  200.   Blynk.virtualWrite(V23, String ("Fun  " + String (0) ));
  201.   Blynk.virtualWrite(V25, 0);
  202.   Blynk.virtualWrite(V27, 0);
  203. }
  204. void wyswietl_nowy_rekord() {
  205.   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)));
  206. }
  207. BLYNK_WRITE(V20) { //wybór kodu wej
  208.   wpis_funkcji.kodwe = param[1].asInt();
  209.   Blynk.virtualWrite (V20, "pick", wpis_funkcji.kodwe);
  210.   Blynk.virtualWrite(V21, String ("Wej  " + String (wpis_funkcji.kodwe) ));
  211.   tablica_nr = 1;
  212.   nrpozkod = param[1].asInt();
  213.   wyswietl_nowy_rekord();
  214. }
  215. BLYNK_WRITE(V30) { //wybór kodu wyj
  216.   wpis_funkcji.kodwy = param[1].asInt();
  217.   Blynk.virtualWrite (V30, "pick", wpis_funkcji.kodwy);
  218.   Blynk.virtualWrite(V22, String ("Wyj  " + String (wpis_funkcji.kodwy) ));
  219.   tablica_nr = 2;
  220.   nrpozkod = param[1].asInt();
  221.   wyswietl_nowy_rekord();
  222. }
  223. BLYNK_WRITE(V40) {//  wybór indeksu i zapis rekordu do tablicy funkcji
  224.   Blynk.virtualWrite(V23, String ("Fun  " + String (param[1].asInt()) ));
  225.   byte i = param[1].asInt();
  226.   tablica_adres_fun[i] = wpis_funkcji;
  227.   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));
  228.   Blynk.virtualWrite(V40, "update", i, s , tablica_adres_fun[i].stan);
  229.   Blynk.virtualWrite (V40, "pick", i);
  230.   Blynk.virtualWrite (V40, "select", i);
  231.   savetabfun ();
  232. }
  233. BLYNK_WRITE(V25) { //wybór funkcji
  234.   wpis_funkcji.funkcja = param.asInt();
  235.   wyswietl_nowy_rekord();
  236. }
  237. //-------------------- koniec programu
  238.  
  239. //--------------------------------------setupy testy
  240.  
  241. void wyswietl_tab_nad() {
  242.   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);
  243. }
  244. void wyswietl_tab_odb() {
  245.   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);
  246. }
  247. void wyswietl_tab_fun() {
  248.   for (int i = 0; i < (rozm_tab_fun + 1); i++ ) {
  249.     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));
  250.     Blynk.virtualWrite(V40, "add", i, s , tablica_adres_fun[i].stan);
  251.   }
  252. }
  253.  
  254. void test_tablica() {
  255.   //-------- ustawienia testowe
  256.   Blynk.virtualWrite(V20, "clr");
  257.   Blynk.virtualWrite(V30, "clr");
  258.   Blynk.virtualWrite(V40, "clr");
  259.  
  260.   tablica_adres_nad[0] = {0 , 0};
  261.   tablica_adres_nad[1] = {5526804 , 320};
  262.   tablica_adres_nad[2] = {5526801 , 320};
  263.   tablica_adres_nad[3] = {5526609 , 320};
  264.   tablica_adres_nad[4] = {5526612 , 320};
  265.   wyswietl_tab_nad();
  266.   tablica_adres_odb[0] = {0 , 0};
  267.   tablica_adres_odb[1] = {5522769 , 320};
  268.   tablica_adres_odb[2] = {5522772 , 320};
  269.   tablica_adres_odb[3] = {5525841 , 320};
  270.   tablica_adres_odb[4] = {5525844 , 320};
  271.   wyswietl_tab_odb();
  272.   tablica_adres_fun[0] = {0, 0, 0, 0, 0};
  273.   tablica_adres_fun[1] = {1, 1, 1, 0, 0};
  274.   tablica_adres_fun[2] = {2, 2, 1, 0, 0};
  275.   tablica_adres_fun[3] = {3, 4, 1, 0, 0};
  276.   tablica_adres_fun[4] = {4, 1, 1, 0, 0};
  277.   wyswietl_tab_fun();
  278. }
  279.  
  280. void read_table_from_eeprom()
  281. {
  282.   readtabnad(); // odczytuje z eepromu
  283.   wyswietl_tab_nad();
  284.   readtabodb(); // odczytuje z eepromu
  285.   wyswietl_tab_odb();
  286.   readtabfun();
  287.   wyswietl_tab_fun();
  288.  
  289. }
  290.  
  291. void   routersetup() {
  292.   wyswietl_nowy_rekord();
  293.   wyswietl_start();
  294.   test_tablica();
  295.   read_table_from_eeprom();
  296. }
  297. void  router() {
  298.   KOD_do_eeprom();
  299. }
RAW Paste Data