Advertisement
Krzyspx

MISv1

Oct 11th, 2016
5,054
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.06 KB | None | 0 0
  1. /*******************************************************************
  2. V1 - vLED OK - tak
  3.  
  4. v7 - vLED przełącznik OnOff na A6
  5.  
  6. v10 - przycisk pompa
  7. v11 - temp set pieca
  8. V12 - ds18b20
  9. v13 - terminal
  10. v14 - +temperatura
  11. v15 - -temmperatura
  12. v16 - MIS
  13.  
  14. v20 - menu wybór pilota
  15. v21 - button pilota
  16. v30 - timer do pompy
  17.  
  18. ********************************************************************/
  19.  
  20. char kod[] = "**MIS  v1.0**";
  21. char auth[] = "xxxxxxxxxxxxxxxxxxxxx"; //MIS
  22. char ssid[] = "aaa";
  23. char pass[] = "bbbbbbbbbbbbbbb";
  24.  
  25.  
  26. #define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
  27. #include <ESP8266_Lib.h>
  28. #include <BlynkSimpleShieldEsp8266.h>
  29. #define resetesp  4
  30.  
  31. #include <Timers.h> // ulubiona biblioteka Timers
  32. Timers <6> akcja; // n niezależnych wątków
  33.  
  34. #include <RCSwitch.h>
  35. RCSwitch mySwitch = RCSwitch(); //nie wiem co to - pewnie nadanie nazwy własnej procedurze
  36.  
  37. #define BLYNK_GREEN     "#23C48E"
  38. #define BLYNK_BLUE      "#04C0F8"
  39. #define BLYNK_YELLOW    "#ED9D00"
  40. #define BLYNK_RED       "#D3435C"
  41. #define BLYNK_DARK_BLUE "#5F7CD8"
  42. #define _RED            "#FF0000"
  43. #define _GREEN          "#00FF00"
  44.  
  45. #define EspSerial Serial // Set ESP8266 Serial object
  46. ESP8266 wifi(&EspSerial);
  47.  
  48. #include <OneWire.h>
  49. #include <DS18B20.h>
  50. const byte ONEWIRE_PIN = 13; // 1-Wire bus Arduino pin
  51. byte sensorAddress[8] = {0x28, 0xFF, 0x46, 0xD2, 0x46, 0x16, 0x3, 0x7F}; // // brama2 płytka2
  52. OneWire onewire(ONEWIRE_PIN); // 1-Wire object
  53. DS18B20 sensors(&onewire); // DS18B20 sensors object
  54.  
  55.  
  56. WidgetLED led1(V1); // vLED_ok
  57. WidgetLED led9(V9); // test timer
  58. WidgetTerminal terminal(V13);
  59.  
  60. #define led_ok  7  //na D7
  61. #define led_error  8 // na D8
  62. #define czasobiegu  5  // ilość sek włączenia pompy x 20
  63.  
  64. #define k1on 5522769
  65. #define k1off 5522772
  66. #define k2on 5525841
  67. #define k2off 5525844
  68.  
  69. #define piecon 5592332
  70. #define piecoff 5592323
  71.  
  72. #define pompaoff 266580
  73. #define pompaon 266577
  74.  
  75. #define pirpompa 14013756
  76.  
  77. #define piechistereza 2
  78. int temppiec = 210; //temparatura zadana o włączeniu urządzenia
  79.  
  80. void test1s()
  81. {
  82.  
  83. }
  84.  void printverMIS()
  85.  {
  86.  // String str = String(temperature) + "." + String(dziesietne) + " ℃"; // oszczedzam 3 kB pamieci
  87.   Blynk.virtualWrite(V16, kod);
  88.  }
  89.  
  90. void wyborwifi() {
  91.   Blynk.begin(auth, wifi, ssid, pass);
  92. }
  93.  
  94. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                setup
  95. void setup()
  96. {
  97.  
  98.  
  99.   pinMode(led_ok, OUTPUT); // dioda sygnalizacyjna pracy pętli 1 sek w przerwaniu
  100.   pinMode(led_error, OUTPUT); // dioda sygnalizacyjna pracy pętli 1 sek w przerwaniu
  101.   pinMode(A5, INPUT_PULLUP); //przełącznik
  102.  
  103.   digitalWrite(led_ok, HIGH);
  104.   digitalWrite(led_error, HIGH);
  105.  
  106.   //reset ESP
  107.   pinMode(resetesp, OUTPUT);
  108.   digitalWrite(resetesp, LOW); //reset esp
  109.   digitalWrite(led_ok, LOW);
  110.   delay(2000);
  111.   digitalWrite(resetesp, HIGH);
  112.   delay(200); //stany przejściowe esp
  113.   digitalWrite(led_ok, HIGH);
  114.  
  115.  
  116.   akcja.attach(0, 3000, timer1sek); // uruchamianie timera 3 sek
  117.   akcja.attach(1, 30000, restartArduino); // pętla dłuższa 30 s reset BLYNK gdy nie ma połączenia
  118.   akcja.attach(2, 10000, licznikobiegu); // pętla dłuższa 10 s licznik grzania
  119.    akcja.attach(3, 5000, pieconoff);
  120.    
  121.   Serial.begin(115200);  // Set console baud rate
  122.   EspSerial.begin(115200);  // Set ESP8266 baud rate
  123.  
  124.   wyborwifi();
  125.   Serial.println(__FILE__);
  126.  
  127.   mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
  128.   mySwitch.enableTransmit(3); // Transmiter pin D3
  129.  
  130.   sensors.begin();  // DS18B20 sensors setup
  131.   sensors.request(sensorAddress);  // Requests sensor for measurement
  132. }
  133. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    loop
  134. void loop()
  135. {
  136.   akcja.process(); // inicjalizacja lub aktualizacja wszystkich procedur(wątków, zdarzeń itp.)
  137.   Blynk.run();
  138.   kod_run();
  139. }
  140. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> procedury
  141.  
  142. void timer1sek() //coś do zrobienia co 1 sek
  143. {
  144.  
  145.   sprawdzBLYNK();
  146.   miganieLED_ok();
  147.   miganievLED();
  148.   sensorT();        // czytanie DS18b20
  149.   transmitBLYNK();   // wysyłanie różnych danych do APP
  150.   miganiegrzanie(); //miganie v12 kiedy piec grzeje
  151.   printverMIS();
  152.   test1s();
  153. }
  154. bool stanLED_ok = HIGH;
  155. void miganieLED_ok()
  156. {
  157.   stanLED_ok = !stanLED_ok;
  158.   if (stanLED_ok == 0) {
  159.     digitalWrite(led_ok, LOW);
  160.   }
  161.   else {
  162.     digitalWrite(led_ok, HIGH);
  163.   }
  164. }
  165.  
  166.  
  167. bool wskrunAr = 0; //vLED miga co sek
  168. void miganievLED()
  169. {
  170.   wskrunAr = !wskrunAr ;
  171.   if (wskrunAr == 0) {
  172.     led1.on(); //miganie vLED dla kontroli połączenia z UNO
  173.     Blynk.setProperty(V1, "color", "#007700");
  174.   }
  175.   else {
  176.     led1.on();
  177.     Blynk.setProperty(V1, "color", _GREEN);
  178.   }
  179. }
  180.  
  181. bool isFirstConnect = true;
  182. // This function will run every time Blynk connection is established
  183. BLYNK_CONNECTED() {
  184.   if (isFirstConnect) {
  185.     Blynk.syncAll();  //ważna procedura - po starcie arduino synchronizuje wszystkiw wirtualne piny ze zmiennymi programu
  186.     isFirstConnect = false;
  187.     wyslij_V11(); //synchro wartości początkowej po resecie
  188.   }
  189. }
  190.  
  191. int tempx10; // temperatura z czujnika x 10 liczba całkowita
  192. void sensorT()  
  193. {
  194.   if (sensors.available())
  195.   {
  196.     tempx10 = ((sensors.readTemperature(sensorAddress) * 10) - 5); // x 10 i kalibracja
  197.     sensors.request(sensorAddress);
  198.   }
  199. }
  200.  
  201.  
  202. bool piecgrzanie = 0; //flaga grzania on/off
  203. void pieconoff()
  204. {
  205.   if (tempx10 < (temppiec - piechistereza))
  206.   {
  207.     piecgrzanie = 1;//włącz grzanie
  208.     sendkodpiec(piecon);
  209.     Blynk.setProperty(V12, "color", BLYNK_BLUE);
  210.   }
  211.     if (tempx10 > (temppiec + piechistereza))
  212.   {
  213.     piecgrzanie = 0;//wyłącz grzanie
  214.     sendkodpiec(piecoff);
  215.     Blynk.setProperty(V12, "color", _RED);
  216.   }
  217.  
  218. }
  219. bool flagagrzanie = 0;
  220. void miganiegrzanie()
  221. {
  222.   flagagrzanie = !flagagrzanie;
  223.   if (piecgrzanie)
  224.   {
  225.     if (flagagrzanie)
  226.     {
  227.     Blynk.setProperty(V12, "color", _RED);
  228.   }else
  229.   {
  230.     Blynk.setProperty(V12, "color", BLYNK_BLUE);
  231.   }
  232.   }
  233. }
  234.  
  235. void sendkodpiec (unsigned long codeA) //transmisja kodu dla termostatu
  236. {
  237.   mySwitch.setPulseLength(210);
  238.   mySwitch.setProtocol(1);
  239.   mySwitch.setRepeatTransmit(4);
  240.   mySwitch.send(codeA, 24);
  241. }
  242.  
  243. byte klawtemp_p = 0;
  244. BLYNK_WRITE(V14) //zwiekszanie setup temperatury co 0,5 oC
  245. {
  246.   if (param.asInt())  //sprawdzanie zmiany stanu przycisku  vPIN V10 załączenie pompy
  247.   {
  248.     temppiec = temppiec + 5;
  249.     if (temppiec > 260)
  250.     {
  251.       temppiec = 260;
  252.     }
  253.     wyslij_V11();
  254.   }
  255. }
  256.  
  257. byte klawtemp_m = 0;
  258. BLYNK_WRITE(V15) //zmniejszanie setup temperatury co 0,5 oC
  259. {
  260.   if (param.asInt()) //sprawdzanie zmiany stanu przycisku  vPIN V10 załączenie pompy
  261.   {
  262.     temppiec = temppiec - 5;
  263.     if (temppiec < 130)
  264.     {
  265.       temppiec = 130;
  266.     }
  267.     wyslij_V11();
  268.   }
  269. }
  270.  
  271.  
  272.  
  273. void transmitBLYNK() { //procedura wysyłania do serwera BLYNK
  274.   wyslij_V12();
  275. //  wyslij_V11();
  276. }
  277.  
  278. void wyslij_V12() { //real T
  279.   int temperature = 0;  // część całkowita mierzonej temperatury
  280.   int dziesietne = 0;   // część dziesietna mierzonej temperatury
  281.       temperature = (tempx10 / 10);
  282.     dziesietne = (tempx10 % 10);
  283.   String str = String(temperature) + "." + String(dziesietne) + " ℃"; // oszczedzam 3 kB pamieci
  284.   Blynk.virtualWrite(V12, str);
  285. }
  286.  
  287. void wyslij_V11() //setup T
  288. {
  289.     int temperature = 0;  // część całkowita mierzonej temperatury
  290.   int dziesietne = 0;   // część dziesietna mierzonej temperatury
  291.       temperature = (temppiec / 10);
  292.     dziesietne = (temppiec % 10);
  293.   String str = String(temperature) + "." + String(dziesietne) + " ℃"; // oszczedzam 3 kB pamieci
  294.   Blynk.virtualWrite(V11, str);
  295. }
  296.  
  297. byte vPin20 = 0;
  298. BLYNK_WRITE(V20) //wybór pilota - menu rozwijane
  299. {
  300.   vPin20 = param.asInt();
  301. }
  302.  
  303.  
  304. bool ppilotold = 0;
  305.  
  306. BLYNK_WRITE(V21) //vprzycisk do pilotów on/off
  307. {
  308.   unsigned long codeA = 0;
  309.  
  310.   if (ppilotold == param.asInt()) {} //sprawdzanie zmiany stanu przycisku  vPIN pilot (V3)
  311.   else {
  312.     ppilotold = param.asInt();
  313.     if ((ppilotold)) {
  314.       Blynk.setProperty(V21, "color", "#FFFFFF");
  315.       Blynk.setProperty(V21, "offLabel", "ON");
  316.       switch (vPin20)  // Switch on Elro - wybór kodu pilota w zależności od ustawienia w menu rozwijanym
  317.       {
  318.         case 1: codeA = k1on;  break;
  319.         case 2: codeA = k2on;  break;
  320.         default: codeA = k1on;
  321.       }
  322.  
  323.     } else {
  324.       Blynk.setProperty(V21, "color", BLYNK_BLUE);
  325.       Blynk.setProperty(V21, "offLabel", "PILOT");
  326.       switch (vPin20)  // Switch on Elro - wybór kodu pilota w zależności od ustawienia w menu rozwijanym
  327.       {
  328.         case 1: codeA = k1off;  break;
  329.         case 2: codeA = k2off;  break;
  330.         default: codeA = k1off;
  331.       }
  332.     }
  333.     sendkodpilot(codeA);
  334.   }
  335. }
  336.  
  337. void sendkodpilot (unsigned long codeA)
  338. {
  339.   mySwitch.setPulseLength(320);
  340.   mySwitch.setProtocol(1);
  341.   mySwitch.setRepeatTransmit(4);
  342.   mySwitch.send(codeA, 24);
  343. }
  344.  
  345. int obieg = -1; //licznik czasu włączenia pompy
  346. byte oldtimeronoff = 1;
  347.  
  348. BLYNK_WRITE(V30) //timer do pompy obiegowej
  349. {
  350.   if (oldtimeronoff == param.asInt()) {}
  351.   else {
  352.     obieg = czasobiegu; // 2 razy na dobę załączanie pompy dla celów sanitarnych
  353.     oldtimeronoff = param.asInt();
  354.     if (oldtimeronoff == 0)
  355.     {
  356.       Blynk.setProperty(V30, "color", BLYNK_RED);
  357.     }
  358.     else {
  359.       Blynk.setProperty(V30, "color", BLYNK_GREEN);
  360.     }
  361.   }
  362. }
  363.  
  364. void licznikobiegu()
  365. {
  366.   obieg--;
  367.   if (obieg < 0) {
  368.     obieg = -1;
  369.   }
  370.   else {
  371.     if (obieg == 0) {
  372.       sendkodpilot(pompaoff);
  373.       //  sendkodpilot(pompaoff);
  374.       Blynk.setProperty(V10, "color", "#00FF00");
  375.       Blynk.setProperty(V10, "offLabel", "POMPA");
  376.     }
  377.     else {
  378.       pompazal();
  379.     }
  380.   }
  381. }
  382.  
  383. void pompazal()
  384. {
  385.   //   sendkodpilot(pompaon);
  386.   sendkodpilot(pompaon);
  387.  
  388.   String xString = String(obieg);
  389.   Blynk.setProperty(V10, "color", "#FFFFFF");
  390.   Blynk.setProperty(V10, "offLabel", xString); // wyświetlanie czasu obiegu
  391. }
  392.  
  393. byte pompaonoffold = 0;
  394. BLYNK_WRITE(V10) //vprzycisk załączenia pompy
  395. {
  396.   if (pompaonoffold == param.asInt()) {} //sprawdzanie zmiany stanu przycisku  vPIN V10 załączenie pompy
  397.   else {
  398.     pompaonoffold = param.asInt();
  399.     obieg = czasobiegu;
  400.     pompazal();
  401.   }
  402. }
  403.  
  404. void  kod_run()
  405. { // procedyra obsługi odebranego z 433MHz
  406.   if (mySwitch.available()) {
  407.  
  408.     int value = mySwitch.getReceivedValue();
  409.     //      Serial.print(F("----------------------kod ")); //testowanie co jest odbierane
  410.     //      Serial.println( mySwitch.getReceivedValue() );
  411.     terminal.println(mySwitch.getReceivedValue());
  412.     terminal.flush();
  413.  
  414.     if ( pirpompa == mySwitch.getReceivedValue()) {
  415.       if (oldtimeronoff == 1) {
  416.         obieg = czasobiegu;
  417.         pompazal();
  418.       }
  419.     }
  420.     mySwitch.resetAvailable();
  421.   }
  422. }
  423.  
  424. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>restart
  425. byte noconnection = 0;
  426. byte czyrestartESP = 0;
  427. byte czyrestart = 0;
  428.  
  429. void sprawdzBLYNK()
  430. {
  431.   digitalWrite(resetesp, HIGH); //dla pewności
  432.   bool r = Blynk.connected();
  433.   if (r == 1) { //jeśli jest połączenie to zgaś LED
  434.     digitalWrite(led_error, LOW);  //zgaszenie LED gdy jest połaczenie z BLYNK server
  435.     noconnection = 0;
  436.     czyrestartESP = 0;
  437.     czyrestart = 0;
  438.   }
  439.   else {
  440.     digitalWrite(led_error, HIGH);
  441.     noconnection = 1;
  442.   }
  443. }
  444. void(* resetFunc) (void) = 0;//declare reset function at address 0
  445.  
  446.  
  447. void restartArduino() { //długa pętla 10-30 sek
  448.   if (noconnection == 1) {
  449.     if (czyrestartESP == 1) {
  450.       if (czyrestart == 1) {
  451.         Serial.println(F("restart ALL"));
  452.         resetFunc(); //call reset     //restart
  453.       } else {
  454.         czyrestart = 1;
  455.       }
  456.       restartESP();    //restart
  457.  
  458.     } else {
  459.       czyrestartESP = 1;
  460.     }
  461.   }
  462. }
  463. void restartESP() {
  464.   Serial.println(F("restart ESP"));
  465.   digitalWrite(resetesp, LOW); //reset esp
  466.   delay(500);
  467.   digitalWrite(resetesp, HIGH);
  468.   delay(200); //stany przejściowe esp
  469.   //Blynk.begin(auth, wifi, ssid, pass);
  470.   wyborwifi();
  471. }
  472.  
  473. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    end restart
  474.  
  475. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                testy
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement