Advertisement
PowerTGS440

Arduino Nano Przekazniki + Parser

Feb 27th, 2021
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 36.58 KB | None | 0 0
  1. // ---------------------------------------------------------------------------------------------- //
  2. // Relay Controller v0.1 beta for NANO         by PowerTGS440                                     //
  3. // Kontroler Przekaźników v0.1 beta dla NANO   by PowerTGS440                                     //
  4. //                                                                                                //
  5. // e-mail     : powerTGS440@gmail.com                                                             //
  6. // autor      : Tomasz Majcher                                                                    //
  7. // własność   : TransLine Polska                                                                  //
  8. // licencja   : tylko do użytku własnego                                                          //
  9. // ---------------------------------------------------------------------------------------------- //
  10. //
  11. //
  12. // --- F U N C T I O N   D E C L A R A T I O N S ------------------------------------------------ //
  13.                                                                                                   //
  14. void Przekaznik_Start ( void );                                                                   //
  15. void Przekaznik_Raport( int p);                                                                   //
  16. void Przekaznik_Przelacz( int p, bool stan);                                                      //
  17. void ESP_SerialRead ( void );                                                                     //
  18. void ESP_ParseData ( void );                                                                      //
  19. void ESP_ParseSwitch ( void );                                                                    //
  20. void ESP_ShowParsedData ( void );                                                                 //                                                                                                  
  21.                                                                                                   //
  22. // --- D E F I N E    M A K R O ----------------------------------------------------------------- //
  23.                                                                                                   //
  24. #define Terminal      1                 // Serial Terminal                                        //
  25.                                                                                                   //
  26. // ---------------------------------------------------------------------------------------------- //
  27.                                                                                                   //
  28. #if Terminal                                                                                      //
  29.                                                                                                   //
  30.     #define SerialSpeed   19200            // Prędkość transmisji Serial (bezp. prędk. dla NANO   //    
  31.     #define Debug         1                // Debug ON/OFF                                        //
  32.     #define ESPDebug      1                // ESP Serial Debug                                    //
  33.                                                                                                   //    
  34. #endif                                                                                            //
  35.                                                                                                   //
  36. // ---------------------------------------------------------------------------------------------- //
  37. // --- Klasa Przekaznik ------------------------------------------------------------------------- //   <- Klasa Przekaznik
  38. // ---------------------------------------------------------------------------------------------- //
  39.                                                                                                   //
  40. class Przekaznik                                                                                  //
  41. {                                                                                                 //
  42.     protected:                                                                                    //
  43.                                                                                                   //
  44.         uint8_t pin;                                                                              //
  45.         bool state;                                                                               //
  46.         bool normallyOpen;                                                                        //
  47.                                                                                                   //
  48.     public:                                                                                       //
  49.                                                                                                   //
  50.         Przekaznik()                                                                              //
  51.         {                                                                                         //
  52.             #if Terminal                                                                          //
  53.                 Serial.print(F("KONSTRUKTOR domyślny klasy Przekaźnik."));                        //                
  54.             #endif                                                                                //
  55.         }                                                                                         //
  56.                                                                                                   //
  57.         Przekaznik(uint8_t p, bool isNormallyOpen)                                                //
  58.         {                                                                                         //
  59.             pin = p;                                                                              //
  60.             normallyOpen = isNormallyOpen;                                                        //
  61.                                                                                                   //
  62.             #if Terminal                                                                          //
  63.                 Serial.print(F("KONSTRUKTOR klasy Przekaźnik."));                                 //
  64.                 Serial.print(F("Utworzono obiekt. Aktywowano przekaźnik nr : "));                 //
  65.                 Serial.println(p);                                                                //
  66.             #endif                                                                                //
  67.         }                                                                                         //
  68.                                                                                                   //        
  69.         void begin()                                                                              //
  70.         {                                                                                         //
  71.             pinMode(pin, OUTPUT);                                                                 //
  72.             turnOff();                                                                            //
  73.         }                                                                                         //
  74.                                                                                                   //
  75.         bool getState()                                                                           //
  76.         {                                                                                         //
  77.             if (normallyOpen) return !state;                                                      //
  78.             else return state;                                                                    //
  79.         }                                                                                         //
  80.                                                                                                   //
  81.         void turnOn()                                                                             //
  82.         {                                                                                         //
  83.             if (normallyOpen)                                                                     //
  84.             {                                                                                     //
  85.                 if (state == !true) return;                                                       //
  86.                 state = !true;                                                                    //
  87.             }                                                                                     //
  88.             else                                                                                  //
  89.             {                                                                                     //
  90.                 if (state == true) return;                                                        //
  91.                 state = true;                                                                     //
  92.             }                                                                                     //
  93.                                                                                                   //
  94.             digitalWrite(pin, state);                                                             //
  95.                                                                                                   //
  96.             #if Terminal                                                                          //
  97.                 Serial.print(F("Włączono Przekaźnik nr : "));                                     //
  98.                 Serial.println(pin);                                                              //
  99.             #endif                                                                                //
  100.         }                                                                                         //
  101.                                                                                                   //
  102.         void turnOff()                                                                            //
  103.         {                                                                                         //
  104.             if (normallyOpen)                                                                     //
  105.             {                                                                                     //
  106.                 if (state == !false) return;                                                      //
  107.                 state = !false;                                                                   //
  108.             }                                                                                     //
  109.             else                                                                                  //
  110.             {                                                                                     //
  111.                 if (state == false) return;                                                       //
  112.                 state = false;                                                                    //
  113.             }                                                                                     //
  114.                                                                                                   //
  115.             digitalWrite(pin, state);                                                             //
  116.                                                                                                   //
  117.             #if Terminal                                                                          //
  118.                 Serial.print(F("Wyłączono Przekaźnik nr : "));                                    //
  119.                 Serial.println(pin);                                                              //
  120.             #endif                                                                                //
  121.         }                                                                                         //
  122. };                                                                                                //
  123. // ---------------------------------------------------------------------------------------------- //
  124. // --- R E L A Y   O B J E C T   D E C L A R A T I O N   &   D E F I N E ------------------------ //
  125. // ---------------------------------------------------------------------------------------------- //
  126.                                                                                                   //
  127. #define Przekaznik0   0                                           // to jest FAKE, nie ma go :)   //
  128. #define Przekaznik1   1                                           // pin 1 dla Przekaźnik 1       //
  129. #define Przekaznik2   2                                           // pin 2 dla Przekaźnik 2       //
  130. #define Przekaznik3   3                                           // pin 3 dla Przekaźnik 3       //
  131. #define Przekaznik4   4                                           // pin 4 dla Przekaźnik 4       //
  132. #define Przekaznik5   5                                           // pin 5 dla Przekaźnik 5       //
  133. #define Przekaznik6   6                                           // pin 6 dla Przekaźnik 6       //
  134. #define Przekaznik7   7                                           // pin 7 dla Przekaźnik 7       //
  135. #define Przekaznik8   8                                           // pin 8 dla Przekaźnik 8       //
  136.                                                                                                   //
  137. #define P_SIZE        9                                                                           //
  138.                                                                                                   //
  139. Przekaznik P [P_SIZE] = { {Przekaznik0, 1}, {Przekaznik1, 1}, {Przekaznik2, 1},                   //
  140.                           {Przekaznik3, 1}, {Przekaznik4, 1}, {Przekaznik5, 1},                   //
  141.                           {Przekaznik6, 1}, {Przekaznik7, 1}, {Przekaznik8, 1}                    //
  142.                         };                                                                        //
  143.                                                                                                   //                                                                                                  
  144. bool PrzekaznikStan [P_SIZE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };                                     //
  145.                                                                                                   //                                                                                                                                                                                                    
  146. // ---------------------------------------------------------------------------------------------- //
  147. // --- P A R S E   F R O M   E S P   C O N S T   a n d   V A R I A B L E ------------------------ //
  148. // ---------------------------------------------------------------------------------------------- //
  149.                                                                                                   //
  150. const byte numChars = 32;                                                                         //
  151. char receivedChars[numChars];                                                                     //
  152. bool newData = false;                                                                             //
  153. char tempChars[numChars];                                                                         //
  154. char messageFromEsp[numChars] = {0};                                                              //
  155. int codeFromEsp1 = 0;                                                                             //
  156. int codeFromEsp2 = 0;                                                                             //
  157.                                                                                                   //
  158. // ---------------------------------------------------------------------------------------------- //
  159. // ------ S E T U P --- S E T U P --- S E T U P --- S E T U P --- S E T U P --- S E T U P ------- //
  160. // ---------------------------------------------------------------------------------------------- //
  161.                                                                                                   //
  162. void setup( void )                                                                                //   <- SETUP
  163. {                                                                                                 //
  164.                                                                                                   //
  165.    Serial.begin(SerialSpeed);                             // ustaw prędkość SERIAL                //
  166.    Przekaznik_Start();                                    // aktywuj przekaźniki                  //
  167.                                                                                                   //
  168. }                                                                                                 //
  169.                                                                                                   //
  170. // ---------------------------------------------------------------------------------------------- //
  171. // ------ L O O P --- L O O P --- L O O P --- L O O P --- L O O P --- L O O P --- L O O P ------- //   <- LOOP
  172. // ---------------------------------------------------------------------------------------------- //
  173. // pętla główna programu dla NANO. Sprawdza czy napłynęła jakaś wiadomość z ESP (RX,TX)           //
  174.                                                                                                   //                                                                  
  175. void loop ( void )                                                                                //
  176. {                                                        // początek funkcji LOOP (pętli)         //
  177.     ESP_SerialRead();                                    // sprawdź czy nadeszedł rozkaz z ESP    //  
  178. }                                                        // koniec funkcji LOOP (pętli)           //
  179.                                                                                                   //
  180. // ---------------------------------------------------------------------------------------------- //
  181. // --- E S P   S E R I A L   R E A D ------------------------------------------------------------ //   <- ESP Serial Read
  182. // ---------------------------------------------------------------------------------------------- //
  183. // sprawdź czy nadeszła jakaś wiadomość z ESP                                                     //
  184.                                                                                                   //
  185. void ESP_SerialRead ( void )                                                                      //
  186. {                                                                                                 //
  187.     static boolean recvInProgress = false;                                                        //
  188.     static byte ndx = 0;                                                                          //
  189.     char startMarker = '<';                              // marker początku ->   "<"              //
  190.     char endMarker = '>';                                // marker końca    ->   ">"              //
  191.     char rc;                                                                                      //
  192.                                                                                                   //
  193.     while (Serial.available() > 0 && !newData)                                                    //
  194.     {                                                                                             //
  195.         rc = Serial.read();                                                                       //
  196.                                                                                                   //
  197.         if (recvInProgress == true)                                                               //
  198.         {                                                                                         //
  199.             if (rc != endMarker)                       // znak to jeszcze nie marer końca  ">"    //
  200.             {                                                                                     //
  201.                                                                                                   //
  202.                 receivedChars[ndx] = rc;                                                          //
  203.                 ndx++;                                                                            //
  204.                                                                                                   //
  205.                 if (ndx >= numChars) ndx = numChars - 1;                                          //                                                    
  206.                                                                                                   //
  207.             }                                                                                     //
  208.             else                                                                                  //          
  209.             {                                                                                     //
  210.                                                                                                   //
  211.                 receivedChars[ndx] = '\0';              // znak końca                             //
  212.                 recvInProgress = false;                                                           //
  213.                 ndx = 0;                                                                          //
  214.                 newData = true;                                                                   //
  215.                                                                                                   //
  216.             }                                                                                     //
  217.         }                                                                                         //
  218.         else                                                                                      //
  219.         if (rc == startMarker)                           // jeśli znak to startMarker ->   "<"    //        
  220.         {                                                                                         //
  221.                                                                                                   //                                              
  222.             recvInProgress = true;                                                                //
  223.                                                                                                   //
  224.         }                                                                                         //
  225.     }                                                                                             //
  226.                                                                                                   //
  227.     // --- jeśli nowe dane --------------------------------- //                                   //
  228.     if (newData)                                             //                                   //    
  229.     {                                                        //                                   //
  230.                                                              //                                   //
  231.         strcpy(tempChars, receivedChars);                    //                                   //
  232.         ESP_ParseData();                                     //                                   //
  233.         ESP_ShowParsedData();                                //                                   //
  234.         ESP_ParseSwitch();                                   //                                   //
  235.         newData = false;                                     //                                   //
  236.                                                              //                                   //
  237.     }                                                        //                                   //
  238.     // ----------------------------------------------------- //                                   //
  239. }                                                                                                 //
  240.                                                                                                   //
  241. // ---------------------------------------------------------------------------------------------- //
  242. // --- E S P   P A R S E   M E S S A G E -------------------------------------------------------- //   <- Parse data from ESP
  243. // ---------------------------------------------------------------------------------------------- //
  244.                                                                                                   //
  245. void ESP_ParseData ( void )                                                                       //
  246. {                                                                                                 //
  247.     char * strtokIndx;                                                                            //
  248.                                                                                                   //
  249.     strtokIndx = strtok(tempChars,",");                                                           //
  250.     strcpy(messageFromEsp, strtokIndx);                                                           //
  251.                                                                                                   //
  252.     strtokIndx = strtok(NULL, ",");                                                               //
  253.     codeFromEsp1 = atoi(strtokIndx);                                                              //
  254.                                                                                                   //
  255.     strtokIndx = strtok(NULL, ",");                                                               //
  256.     codeFromEsp2 = atof(strtokIndx);                                                              //    
  257. }                                                                                                 //
  258.                                                                                                   //                                                                                                  
  259. // ---------------------------------------------------------------------------------------------- //
  260. // --- E S P   D E B U G   M E S S A G E -------------------------------------------------------- //   <- Show Parsed Data
  261. // ---------------------------------------------------------------------------------------------- //
  262.                                                                                                   //
  263. void ESP_ShowParsedData ( void )                                                                  //
  264. {                                                                                                 //
  265.     #if ESPDebug                                                                                  //
  266.         Serial.print(F("Odebrano z ESP. Code: "));                                                //        
  267.         Serial.print(codeFromEsp1);                                                               //        
  268.         Serial.print(F(" Msg : "));                                                               //
  269.         Serial.print(messageFromEsp);                                                             //        
  270.         Serial.print(F(" Data : "));                                                              //
  271.         Serial.println(codeFromEsp2);                                                             //
  272.     #endif                                                                                        //
  273. }                                                                                                 //
  274.                                                                                                   //
  275. // ---------------------------------------------------------------------------------------------- //
  276. // --- E S P   P A R S E   S W I T C H ---------------------------------------------------------- //   <- Parsed Data Switch
  277. // ---------------------------------------------------------------------------------------------- //
  278.                                                                                                   //
  279. void ESP_ParseSwitch ( void )                                                                     //
  280. {                                                                                                 //
  281.     switch ( codeFromEsp1 )                                    // przełącznik kodów z SERIAL      //
  282.     {                                                                                             //
  283.         case  301 : Przekaznik_Przelacz ( codeFromEsp1 - 300, codeFromEsp2 ); break;    // P1     //
  284.         case  302 : Przekaznik_Przelacz ( codeFromEsp1 - 300, codeFromEsp2 ); break;    // P2     //
  285.         case  303 : Przekaznik_Przelacz ( codeFromEsp1 - 300, codeFromEsp2 ); break;    // P3     //
  286.         case  304 : Przekaznik_Przelacz ( codeFromEsp1 - 300, codeFromEsp2 ); break;    // P4     //
  287.         case  305 : Przekaznik_Przelacz ( codeFromEsp1 - 300, codeFromEsp2 ); break;    // P5     //
  288.         case  306 : Przekaznik_Przelacz ( codeFromEsp1 - 300, codeFromEsp2 ); break;    // P6     //
  289.         case  307 : Przekaznik_Przelacz ( codeFromEsp1 - 300, codeFromEsp2 ); break;    // P7     //
  290.         case  308 : Przekaznik_Przelacz ( codeFromEsp1 - 300, codeFromEsp2 ); break;    // P8     //        
  291.         case  309 : Przekaznik_Wlacz_Wszystkie();                             break;    // P! ON  //
  292.         case  310 : Przekaznik_Wylacz_Wszystkie();                            break;    // P! OFF //
  293.     }                                                                                             //
  294. }                                                                                                 //
  295.                                                                                                   //
  296. // ---------------------------------------------------------------------------------------------- //
  297. // --- R E L A Y   I N I T --- uruchamiane z SETUP ---------------------------------------------- //   <- Przekaznik (INIT)
  298. // ---------------------------------------------------------------------------------------------- //
  299.                                                                                                   //    
  300. void Przekaznik_Start()                                                                           //
  301. {                                                                                                 //  
  302.     for (byte i = 0; i <= P_SIZE; i++)                                                            //
  303.     {                                                                                             //
  304.         P[i].begin();                                                                             //      
  305.         PrzekaznikStan[i] = P[i].getState();                                                      //    
  306.     }                                                                                             //
  307. }                                                                                                 //
  308. // ---------------------------------------------------------------------------------------------- //
  309. // --- R E L A Y   S W I T C H ------------------------------------------------------------------ //   <- Przekaznik (SWITCH)
  310. // ---------------------------------------------------------------------------------------------- //
  311.                                                                                                   //    
  312. void Przekaznik_Przelacz( int p, bool stan)                                                       //
  313. {                                                                                                 //  
  314.     switch ( stan )                                                                               //
  315.     {                                                                                             //
  316.         case  0 : P[p].turnOff(); PrzekaznikStan[p] = P[p].getState(); break;                     //  
  317.         case  1 : P[p].turnOn();  PrzekaznikStan[p] = P[p].getState(); break;                     //  
  318.     }                                                                                             //    
  319.                                                                                                   //
  320.     #if Debug                                                                                     //
  321.         Przekaznik_Raport(p);                                                                     //
  322.     #endif                                                                                        //
  323. }                                                                                                 //
  324.                                                                                                   //
  325. // ---------------------------------------------------------------------------------------------- //
  326. // --- R E L A Y   S W I T C H ------------------------------------------------------------------ //   <- Przekaznik (SWITCH)
  327. // ---------------------------------------------------------------------------------------------- //
  328.                                                                                                   //
  329. void Przekaznik_Wlacz_Wszystkie()                                                                 //
  330. {                                                                                                 //
  331.     for(int i = 1; i < P_SIZE; i ++) Przekaznik_Przelacz( i, 1 );                                 //  
  332. }                                                                                                 //
  333.                                                                                                   //
  334. // ---------------------------------------------------------------------------------------------- //
  335. // --- R E L A Y   S W I T C H ------------------------------------------------------------------ //   <- Przekaznik (SWITCH)
  336. // ---------------------------------------------------------------------------------------------- //
  337.                                                                                                   //
  338. void Przekaznik_Wylacz_Wszystkie()                                                                //
  339. {                                                                                                 //
  340.     for(int i = 1; i < P_SIZE; i ++) Przekaznik_Przelacz( i, 0 );                                 //  
  341. }                                                                                                 //
  342.                                                                                                   //
  343. // ---------------------------------------------------------------------------------------------- //
  344. // --- R E L A Y   S W I T C H ------------------------------------------------------------------ //   <- Przekaznik (RAPORT)
  345. // ---------------------------------------------------------------------------------------------- //
  346.                                                                                                   //    
  347. void Przekaznik_Raport( int p)                                                                    //
  348. {                                                                                                 //  
  349.     #if Terminal                                                                                  //
  350.         Serial.print(F("Stan przekaźnika nr : "));                                                //
  351.         Serial.print(p);                                                                          //        
  352.         if ( PrzekaznikStan[p] ) Serial.println(F(" ON "));                                       //
  353.         else                                                                                      //
  354.         if (!PrzekaznikStan[p] ) Serial.println(F(" OFF "));                                      //
  355.     #endif                                                                                        //      
  356. }                                                                                                 //
  357.                                                                                                   //
  358. // ---------------------------------------------------------------------------------------------- //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement