Advertisement
Guest User

program iot mtqq server

a guest
Jul 24th, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.35 KB | None | 0 0
  1. /*
  2. * ESP8266 NodeMCU AJAX Demo
  3. * Updates and Gets data from webpage without page refresh
  4. * https://circuits4you.com
  5. */
  6. #include <ESP8266WiFi.h>
  7. #include <PubSubClient.h>
  8.  
  9. #include <EEPROM.h>
  10.  
  11. #include <Ultrasonic.h>
  12. //#include <NewPing.h>
  13. #define TRIGGER_PIN D8 // Arduino pin tied to trigger pin on the ultrasonic sensor.
  14. #define ECHO_PIN D7 // Arduino pin tied to echo pin on the ultrasonic sensor.
  15. #define MAX_DISTANCE 250 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
  16.  
  17. #define SENDREQ 0xF8 //Send Request
  18. #define SAVEULTRA 0xF9 //Save Ultrasound Parameter Min, Max, Deep
  19. #define ONOFF 0xFA //ONOFF Manual
  20. #define BUTTONMA 0xFB //command for Button
  21. #define MANAUTO 0xFB //Manual Auto
  22. #define FLOWSENSOR1 0xFC //command for FLOW SENSOR 1
  23. #define FLOWSENSOR2 0xFD //command for FLOW SENSOR 2
  24. #define RANGESENSOR 0xFE //command for RANGE SENSOR
  25.  
  26.  
  27. int addrSSID = 0x0F; //Address SSID EEPROM
  28. int addrPASW = 0x1F; //Address PASSWORD EEPROM
  29. int addrMIN = 0x2F; //Address MINIMUM EEPROM
  30. int addrMAX = 0x3F; //Address MAXIMUM EEPROM
  31. int addrDEEP = 0x4F; //Address DEEP EEPROM
  32.  
  33. uint8_t sensorPin = D5;
  34. uint8_t sensorInterrupt = sensorPin;
  35.  
  36. uint8_t sensorPin2 = D6;
  37. uint8_t sensorInterrupt2 = sensorPin2;
  38.  
  39. uint8_t LED = D3;
  40.  
  41. static const uint8_t btnPin1 = D1;
  42. static const uint8_t btnPin2 = D2;
  43. static const uint8_t btnPin3 = D0;
  44. static const uint8_t btnPin4 = D4;
  45.  
  46. // The hall-effect flow sensor outputs approximately 4.5 pulses per second per
  47. // litre/minute of flow.
  48. float calibrationFactor = 4.5;
  49.  
  50. volatile byte pulseCount;
  51. volatile byte pulseCount2;
  52.  
  53. volatile byte nSensor;
  54.  
  55. float flowRate;
  56. unsigned int flowMilliLitres;
  57. unsigned long totalMilliLitres;
  58. float flowRate2;
  59. unsigned int flow2MilliLitres;
  60. unsigned long totalMilliLitres2;
  61.  
  62. unsigned long oldTime;
  63. unsigned long oldTime2;
  64. unsigned long oldTime3;
  65. unsigned long oldTime4;
  66. unsigned long oldTime5;
  67.  
  68. // defines pins numbers Ultrasound
  69. Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
  70. //NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
  71. int distance;
  72. int BtnStat;
  73. int btnStatONOFF;
  74. int setMin;
  75. int setMax;
  76. int setDep;
  77.  
  78. int counter=0;
  79.  
  80. int SendReq;
  81.  
  82. int serialStop = 0;
  83.  
  84. int sendcoun=0;
  85. String msg_dta="";
  86. String msg_cmd;
  87.  
  88. bool stringComplete = false; // whether the string is complete
  89.  
  90. int setDeep=0;
  91. int LastPercent = 0;
  92. int btnStatMA = 123;
  93.  
  94. //Button Pin declare
  95. int buttonState1 = 0; // variable for reading the pushbutton status
  96. int buttonState2 = 0; // variable for reading the pushbutton status
  97. int buttonState3 = 0; // variable for reading the pushbutton status
  98. int buttonState4 = 0; // variable for reading the pushbutton status
  99.  
  100. int buttonSelect1 = 0;
  101. int buttonONOFF = 0;
  102. int btnStatus = 1;
  103.  
  104. String inputString = ""; // a String to hold incoming data
  105. String request = "";
  106. String btnStr = "";
  107. String ultrasoundStr = "";
  108. String flowRateStr = "";
  109. String flowRate2Str = "";
  110. String manautoStr1 = "";
  111. String manautoStr2 = "";
  112. String manautoStr3 = "";
  113. String manautoStr4 = "";
  114. String manautoStr5 = "";
  115. String onoffStr1 = "";
  116. String onoffStr2 = "";
  117.  
  118. String btnOnOff1 ="";
  119. String btnOnOff2 ="";
  120.  
  121. String rs232Command ="";
  122. String EEssid="";
  123. String EEpass="";
  124. String EEmin="";
  125. String EEmax="";
  126. String EEdeep="";
  127.  
  128. //SSID and Password of your WiFi router
  129. char ssid[12] = "myssid";
  130. char password[12] = "mypassss";
  131.  
  132. //Enter your mqtt server configurations
  133. const char* mqttServer = "postman.cloudmqtt.com"; //Enter Your mqttServer address
  134. const int mqttPort = 10480; //Port number
  135. const char* mqttUser = "ehfyorks"; //User
  136. const char* mqttPassword = "al-lm4ncEaLx"; //Password
  137.  
  138. WiFiClient espClient;
  139. PubSubClient client(espClient);
  140.  
  141. //TANK min, max and deep
  142. char minimum[2];// = "25";
  143. char maximum[2];// = "75";
  144. char deeptank[3];// = "100";
  145.  
  146. void MQTTcallback(char* topic, byte* payload, unsigned int length) {
  147. if(serialStop!=1){
  148. String message="";
  149. for (int i = 0; i < length; i++) {
  150. message = message + (char)payload[i]; //Conver *byte to String
  151. }
  152. msg_dta = message;
  153. if(msg_dta=="#manu" or msg_dta=="#auto"){
  154. msg_cmd = msg_dta;
  155. }
  156. }
  157. }
  158.  
  159. //==============================================================
  160. // SETUP
  161. //==============================================================
  162. void setup(void){
  163. delay(20);
  164. Serial.begin(115200);
  165. /**
  166. EEPROM.begin(512); //Initialize EEPROM
  167.  
  168. //Read EEPROM SSID
  169. for(int i=0;i<12;i++)
  170. {
  171. EEssid = EEssid + char(EEPROM.read(addrSSID+i)); //Read one by one with starting address of 0x0F
  172. }
  173. //Read EEPROM PASSWORD
  174. for(int i=0;i<12;i++)
  175. {
  176. EEpass = EEpass + char(EEPROM.read(addrPASW+i)); //Read one by one with starting address of 0x0F
  177. }
  178.  
  179. //Read EEPROM MINIMUM TANK
  180. for(int i=0;i<12;i++)
  181. {
  182. EEmin = EEmin + char(EEPROM.read(addrMIN+i)); //Read one by one with starting address of 0x0F
  183. }
  184. //Read EEPROM MAXIMUM TANK
  185. for(int i=0;i<12;i++)
  186. {
  187. EEmax = EEmax + char(EEPROM.read(addrMAX+i)); //Read one by one with starting address of 0x0F
  188. }
  189. //Read EEPROM MAXIMUM DEEP TANK
  190. for(int i=0;i<12;i++)
  191. {
  192. EEdeep = EEdeep + char(EEPROM.read(addrDEEP+i)); //Read one by one with starting address of 0x0F
  193. }
  194.  
  195. EEssid = EEssid.substring(0);
  196. EEssid.replace(" ", "");
  197. EEpass = EEpass.substring(0);
  198. EEpass.replace(" ", "");
  199.  
  200. EEmin = EEmin.substring(0);
  201. EEmin.replace(" ", "");
  202. EEmax = EEmax.substring(0);
  203. EEmin.replace(" ", "");
  204. EEdeep = EEdeep.substring(0);
  205. EEmin.replace(" ", "");
  206.  
  207. // if(EEssid!=" " && EEpass!=" "){
  208. EEssid.toCharArray(ssid,EEssid.length()+1);
  209. EEpass.toCharArray(password, EEpass.length()+1);
  210.  
  211. EEmin.toCharArray(minimum, EEmin.length()+1);
  212. EEmax.toCharArray(maximum, EEmax.length()+1);
  213. EEdeep.toCharArray(deeptank, EEdeep.length()+1);
  214. // }
  215.  
  216. setMin = EEmin.toInt();
  217. setMax = EEmax.toInt();
  218. setDep = EEdeep.toInt();
  219.  
  220. // long TankMax = setMin.toInt();
  221. // long TankDep = setMin.toInt();
  222.  
  223. //setMin = atoi(minimum);
  224. //setMax = atoi(maximum);
  225. //setDep = atoi(deeptank);
  226. **/
  227. WiFi.begin(ssid, password); //Connect to your WiFi router
  228. Serial.println("");
  229.  
  230. //pinMode(LED,OUTPUT);
  231.  
  232. pinMode(btnPin1, INPUT_PULLUP);
  233. pinMode(btnPin2, INPUT_PULLUP);
  234. pinMode(btnPin3, INPUT_PULLUP);
  235. pinMode(btnPin4, INPUT_PULLUP);
  236.  
  237. pinMode(sensorPin, INPUT);
  238. digitalWrite(sensorPin, HIGH);
  239. pinMode(sensorPin2, INPUT);
  240. digitalWrite(sensorPin2, HIGH);
  241.  
  242. //digitalWrite(LED, HIGH);
  243.  
  244. nSensor = 0;
  245.  
  246. pulseCount = 0;
  247. flowRate = 0.0;
  248. totalMilliLitres = 0;
  249. oldTime = 0;
  250.  
  251. pulseCount2 = 0;
  252. flowRate2 = 0.0;
  253. totalMilliLitres2 = 0;
  254. oldTime2 = 0;
  255.  
  256. distance = 0;
  257.  
  258. btnStatONOFF = 123;
  259.  
  260. oldTime3 = 0;
  261.  
  262. oldTime4 = 0;
  263.  
  264. oldTime5 = 0;
  265.  
  266. distance = distance/setDep;
  267.  
  268. // Wait for connection
  269. while (WiFi.status() != WL_CONNECTED) {
  270. delay(20);
  271. Serial.print(".");
  272.  
  273. buttonState1 = digitalRead(btnPin1);
  274. buttonState4 = digitalRead(btnPin4);
  275. if(buttonState1 == 0 && buttonState4 == 0){
  276. while(Serial.available()==0){
  277. Serial.println("Wait Command from Serial Data Communication...");
  278. delay(20);
  279. }
  280. rs232Command=Serial.readString();
  281. if(rs232Command.substring(0,4)=="ssid"){
  282. String abc = rs232Command.substring(4);
  283. int lengtchr = abc.length();
  284. abc.toCharArray(ssid, lengtchr);
  285. Serial.print("SSID : ");
  286. Serial.println(ssid);
  287. for(int i=0;i<lengtchr;i++)
  288. {
  289. EEPROM.write(addrSSID+i,ssid[i]);
  290. }
  291. EEPROM.commit(); //Store data to EEPROM
  292.  
  293. }else if(rs232Command.substring(0,8)=="password"){
  294. String abc = rs232Command.substring(8);
  295. int lengtchr = abc.length();
  296. abc.toCharArray(password, lengtchr);
  297. Serial.print("PASSWORD : ");
  298. Serial.println(password);
  299.  
  300. //Write PASSWORD to EEPROM
  301. for(int i=0;i<lengtchr;i++)
  302. {
  303. EEPROM.write(addrPASW+i,password[i]);
  304. }
  305. EEPROM.commit(); //Store data to EEPROM
  306. }else if(rs232Command.substring(0,3)=="min"){
  307. String abc = rs232Command.substring(3);
  308. int lengtchr = abc.length();
  309. abc.toCharArray(minimum, lengtchr);
  310. Serial.print("MIN TANK : ");
  311. Serial.println(minimum);
  312.  
  313. //Write MINIMUM to EEPROM
  314. for(int i=0;i<lengtchr;i++)
  315. {
  316. EEPROM.write(addrMIN+i,minimum[i]);
  317. }
  318. EEPROM.commit(); //Store data to EEPROM
  319. }else if(rs232Command.substring(0,3)=="max"){
  320. String abc = rs232Command.substring(3);
  321. int lengtchr = abc.length();
  322. abc.toCharArray(maximum, lengtchr);
  323. Serial.print("MAX TANK : ");
  324. Serial.println(maximum);
  325.  
  326. //Write MINIMUM to EEPROM
  327. for(int i=0;i<lengtchr;i++)
  328. {
  329. EEPROM.write(addrMAX+i,maximum[i]);
  330. }
  331. EEPROM.commit(); //Store data to EEPROM
  332. }else if(rs232Command.substring(0,4)=="deep"){
  333. String abc = rs232Command.substring(4);
  334. int lengtchr = abc.length();
  335. abc.toCharArray(deeptank, lengtchr);
  336. Serial.print("DEEP TANK : ");
  337. Serial.println(deeptank);
  338.  
  339. //Write DEEP TANK to EEPROM
  340. for(int i=0;i<lengtchr;i++)
  341. {
  342. EEPROM.write(addrDEEP+i,deeptank[i]);
  343. }
  344. EEPROM.commit(); //Store data to EEPROM
  345. }
  346. else if(rs232Command.substring(0,4)=="read"){
  347. //Clear EEPROM 128 byte
  348. for(int i=0;i<127;i++)
  349. {
  350. EEPROM.write(i,' ');
  351. }
  352.  
  353. EEPROM.commit();
  354.  
  355. //Read SSID and PASSWORD
  356. Serial.println(ssid);
  357. Serial.println(password);
  358. Serial.println(minimum);
  359. Serial.println(maximum);
  360. Serial.println(deeptank);
  361. }
  362. else if(rs232Command.substring(0,5)=="erase"){
  363. //Clear EEPROM 128 byte
  364. for(int i=0;i<127;i++)
  365. {
  366. EEPROM.write(i,' ');
  367. }
  368. delay(20);
  369. EEPROM.commit();
  370. delay(20);
  371.  
  372. //Erase EEPROM
  373. Serial.println("ERASE EEPROM COMPLETE");
  374. }
  375.  
  376. }
  377. }
  378.  
  379. //If connection successful show IP address in serial monitor
  380. Serial.println("");
  381. Serial.print("Connected to ");
  382. Serial.println(ssid);
  383. Serial.print("IP address: ");
  384. Serial.println(WiFi.localIP()); //IP address assigned to your ESP
  385.  
  386. delay(20);
  387.  
  388. client.setServer(mqttServer, mqttPort);
  389. client.setCallback(MQTTcallback);
  390.  
  391. while (!client.connected()) {
  392. Serial.println("Connecting to MQTT...");
  393. if (client.connect("ESP8266", mqttUser, mqttPassword )) {
  394. Serial.println("connected");
  395. } else {
  396. Serial.print("failed with state ");
  397. Serial.println(client.state()); //If you get state 5: mismatch in configuration
  398. delay(20);
  399. }
  400. }
  401.  
  402. client.publish("esp/test", "Hello from ESP8266");
  403. client.subscribe("esp/test");
  404.  
  405. // The Flow Sensor is connected using Interrupt
  406. // Configured to trigger on a FALLING state change (transition from HIGH
  407. // state to LOW state)
  408. attachInterrupt(digitalPinToInterrupt(sensorInterrupt), pulseCounter, FALLING);
  409. attachInterrupt(digitalPinToInterrupt(sensorInterrupt2), pulseCounter2, FALLING);
  410.  
  411. delay(20);
  412. }
  413.  
  414. //==============================================================
  415. // LOOP
  416. //==============================================================
  417. void loop(void){
  418. client.loop();
  419. if(msg_dta == "#on" && btnStatus != 1) {
  420. //digitalWrite(LED,HIGH);
  421. char inChar0 = ONOFF;
  422. String inChar1 = "ONNN";
  423. btnOnOff1 += inChar0;
  424. btnOnOff1 += inChar1;
  425.  
  426. serialStop = 1;
  427. Serial.println(btnOnOff1);
  428. delay(250);
  429. serialStop = 0;
  430. String payloads = "ON";
  431. client.publish("esp/relay", (char*) payloads.c_str());
  432. client.subscribe("esp/relay");
  433. } //LED on
  434. if(msg_dta == "#off" && btnStatus != 1) {
  435. //digitalWrite(LED,LOW);
  436. char inChar0 = ONOFF;
  437. String inChar1 = "OFFF";
  438. btnOnOff2 += inChar0;
  439. btnOnOff2 += inChar1;
  440. serialStop = 1;
  441. Serial.println(btnOnOff2);
  442. delay(250);
  443. serialStop = 0;
  444. String payloads = "OFF";
  445. client.publish("esp/relay", (char*) payloads.c_str());
  446. client.subscribe("esp/relay");
  447. } //LED off
  448.  
  449. //msg_cmd = msg_dta.substring(0,5);
  450. if(msg_cmd == "#manu") {
  451. char inChar0 = MANAUTO;
  452. String inChar1 = "MANU";
  453. manautoStr1 += inChar0;
  454. manautoStr1 += inChar1;
  455. serialStop = 1;
  456. Serial.println(manautoStr1);
  457. delay(25);
  458. serialStop = 0;
  459. //Serial.println("ZZZ");
  460. btnStatus = 0;
  461. msg_cmd="";
  462. } //Menu Manual
  463. if(msg_cmd == "#auto") {
  464. char inChar0 = MANAUTO;
  465. String inChar1 = "AUTO";
  466. manautoStr5 += inChar0;
  467. manautoStr5 += inChar1;
  468. serialStop = 1;
  469. Serial.println(manautoStr5);
  470. delay(25);
  471. serialStop = 0;
  472. //Serial.println("ZZZ");
  473. btnStatus = 1;
  474. msg_cmd="";
  475. } //Menu Auto
  476.  
  477. buttonState1 = digitalRead(btnPin1);
  478. if (buttonState1 == LOW){
  479. if(buttonSelect1==0){
  480. char inChar0 = MANAUTO;
  481. String inChar1 = "MANU";
  482. manautoStr1 += inChar0;
  483. manautoStr1 += inChar1;
  484. serialStop = 1;
  485. Serial.println(manautoStr1);
  486. delay(25);
  487. serialStop = 0;
  488. buttonSelect1=1;
  489. //Serial.println("ZZZ");
  490. }else if(buttonSelect1==1){
  491. char inChar0 = MANAUTO;
  492. String inChar1 = "MINN";
  493. manautoStr2 += inChar0;
  494. manautoStr2 += inChar1;
  495.  
  496. serialStop = 1;
  497. Serial.println(manautoStr2);
  498. delay(25);
  499. serialStop = 0;
  500. distance = 1;
  501. buttonSelect1=2;
  502. delay(25);
  503. //Serial.println("ZZZ");
  504. }else if(buttonSelect1==2){
  505. char inChar0 = MANAUTO;
  506. String inChar1 = "MAXX";
  507. manautoStr3 += inChar0;
  508. manautoStr3 += inChar1;
  509. serialStop = 1;
  510. Serial.println(manautoStr3);
  511. delay(25);
  512. serialStop = 0;
  513. buttonSelect1=3;
  514. distance = 100;
  515. delay(25);
  516. //Serial.println("ZZZ");
  517. }else if(buttonSelect1==3){
  518. char inChar0 = MANAUTO;
  519. String inChar1 = "DEEP";
  520. manautoStr4 += inChar0;
  521. manautoStr4 += inChar1;
  522. serialStop = 1;
  523. Serial.println(manautoStr4);
  524. delay(25);
  525. serialStop = 0;
  526. buttonSelect1=4;
  527. //Serial.println("ZZZ");
  528. }else if(buttonSelect1==4){
  529. char inChar0 = MANAUTO;
  530. String inChar1 = "AUTO";
  531. manautoStr5 += inChar0;
  532. manautoStr5 += inChar1;
  533. serialStop = 1;
  534. Serial.println(manautoStr5);
  535. delay(25);
  536. serialStop = 0;
  537. buttonSelect1=0;
  538. setDeep = 0;
  539. delay(25);
  540. //Serial.println("ZZZ");
  541. }
  542. }
  543.  
  544. buttonState2 = digitalRead(btnPin2);
  545. if (buttonState2 == LOW){
  546. if(buttonONOFF==0){
  547. char inChar0 = ONOFF;
  548. String inChar1 = "ONNN";
  549. onoffStr1 += inChar0;
  550. onoffStr1 += inChar1;
  551. serialStop = 1;
  552. Serial.println(onoffStr1);
  553. buttonONOFF=1;
  554. delay(50);
  555. serialStop = 0;
  556. }else if(buttonONOFF==1){
  557. char inChar0 = ONOFF;
  558. String inChar1 = "OFFF";
  559. onoffStr2 += inChar0;
  560. onoffStr2 += inChar1;
  561. serialStop = 1;
  562. Serial.println(onoffStr2);
  563. buttonONOFF=0;
  564. delay(50);
  565. serialStop = 1;
  566. }
  567. }
  568. buttonState3 = digitalRead(btnPin3);
  569. if (buttonState3 == LOW){
  570. setDeep = 1;
  571. if(buttonSelect1!=0){
  572. setMin = distance;
  573. }
  574. }
  575. buttonState4 = digitalRead(btnPin4);
  576. if (buttonState4 == LOW){
  577. setDeep = 2;
  578. if(buttonSelect1!=0){
  579. setMax = distance;
  580. }
  581. }
  582.  
  583. switch (nSensor) {
  584. case 0:
  585. if((millis() - oldTime) > 1000) // Only process counters once per second
  586. {// Disable the interrupt where until complete 1 secon
  587. detachInterrupt(sensorInterrupt);
  588. flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
  589.  
  590. flowMilliLitres = (flowRate / 60) * 1000;
  591. totalMilliLitres += flowMilliLitres;
  592.  
  593. char inChar0 = FLOWSENSOR1;
  594. char inChar1 = char(flowRate);
  595. char inChar2[16];
  596.  
  597. ltoa(totalMilliLitres,inChar2,10);
  598.  
  599. flowRateStr += inChar0;
  600. flowRateStr += inChar1;
  601. flowRateStr += inChar2;
  602.  
  603. serialStop = 1;
  604. Serial.println(flowRateStr);
  605. delay(25);
  606. serialStop = 0;
  607. //Serial.println(int(flowRateStr[1]));
  608. //Serial.println(int(flowRate));
  609. flowRateStr = "";
  610.  
  611. oldTime = millis();
  612. pulseCount = 0; // Reset the pulse counter so we can start incrementing again
  613.  
  614. // Enable the interrupt again now that we've finished sending output
  615. attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  616. nSensor = 1;
  617. }
  618. break;
  619.  
  620. case 1:
  621. if((millis() - oldTime2) > 1000) // Only process counters once per second
  622. {// Disable the interrupt where until complete 1 secon
  623. detachInterrupt(sensorInterrupt2);
  624. flowRate2 = ((1000.0 / (millis() - oldTime2)) * pulseCount2) / calibrationFactor;
  625.  
  626. flow2MilliLitres = (flowRate2 / 60) * 1000;
  627. totalMilliLitres2 += flow2MilliLitres;
  628.  
  629. //String payloads = String(flowRate2);
  630. //client.publish("esp/flow2", (char*) payloads.c_str());
  631. //client.subscribe("esp/flow2");
  632. //delay(20);
  633.  
  634. //String payloads2 = String(totalMilliLitres2);
  635. //client.publish("esp/flowtotal2", (char*) payloads2.c_str());
  636. //client.subscribe("esp/flowtotal2");
  637. //delay(20);
  638.  
  639. char inChar0 = FLOWSENSOR2;
  640. char inChar1 = char(flowRate2);
  641. char inChar2[16];
  642.  
  643. ltoa(totalMilliLitres2,inChar2,10);
  644.  
  645. flowRate2Str += inChar0;
  646. flowRate2Str += inChar1;
  647. flowRate2Str += inChar2;
  648.  
  649. serialStop = 1;
  650. Serial.println(flowRate2Str);
  651. delay(25);
  652. serialStop = 0;
  653. //Serial.println(int(flowRate2Str[1]));
  654. //Serial.println(int(flowRate2));
  655. flowRate2Str = "";
  656. oldTime2 = millis();
  657. pulseCount2 = 0; // Reset the pulse counter so we can start incrementing again
  658.  
  659. // Enable the interrupt again now that we've finished sending output
  660. attachInterrupt(sensorInterrupt2, pulseCounter2, FALLING);\
  661. nSensor = 2;
  662. }
  663. break;
  664.  
  665. case 2:
  666. if((millis() - oldTime3) > 1000) // Only process counters once per second
  667. {
  668. if(setDeep==0 && buttonSelect1==0){
  669. distance = ultrasonic.read();
  670. distance = (distance* 100)/setDep;//) *100;
  671. }else if(setDeep==1 && distance<=100 && buttonSelect1!=0){
  672. distance += 1;
  673. }else if(setDeep==2 && distance>0 && buttonSelect1!=0){
  674. distance -= 1;
  675. }
  676. setDeep = 0;
  677.  
  678. distance = 100 - distance;
  679. char inChar0 = RANGESENSOR;
  680. char inChar1 = char(distance);
  681. char inChar2 = char(103);
  682. if(distance<=setMin){
  683. inChar2 = char(101);//ON
  684. }else if(distance>=setMax){
  685. inChar2 = char(102);//OFF
  686. }
  687.  
  688. ultrasoundStr += inChar0;
  689. ultrasoundStr += inChar1;
  690. ultrasoundStr += inChar2;
  691.  
  692. // Pass INC as a parameter to get the distance in inches
  693. //if(Serial.available()>0 && distance <= 100 && distance>0){
  694. if(distance <= 100 && distance>0){
  695. serialStop = 1;
  696. Serial.println(ultrasoundStr);
  697. delay(50);
  698. serialStop = 2;
  699. }
  700. ultrasoundStr = "";
  701. oldTime3 = millis();
  702. nSensor = 3;
  703. }
  704. break;
  705.  
  706. case 3:
  707. if((millis() - oldTime4) > 1000) // Only process counters once per second
  708. {
  709. BtnStat = btnStatONOFF; //Button ONOFF
  710. char inChar0 = BUTTONMA;
  711. char inChar1 = char(BtnStat);
  712.  
  713. btnStr += inChar0;
  714. btnStr += inChar1;
  715. serialStop = 1;
  716. Serial.println(btnStr);
  717. delay(50);
  718. serialStop = 0;
  719. btnStr = "";
  720. oldTime4 = millis();
  721. nSensor = 4;
  722. }
  723. break;
  724.  
  725. case 4:
  726. if((millis() - oldTime5) > 10000) // Only process counters once per second
  727. {
  728. if(counter==0){
  729. String payloads = String(flowRate);
  730. client.publish("esp/flow1", (char*) payloads.c_str());
  731. client.subscribe("esp/flow1");
  732. counter=1;
  733. delay(50);
  734. }else if (counter==1){
  735. String payloads1 = String(totalMilliLitres);
  736. client.publish("esp/flowtotal1", (char*) payloads1.c_str());
  737. client.subscribe("esp/flowtotal1");
  738. counter=2;
  739. delay(50);
  740. }else if (counter==2){
  741. String payloads = String(flowRate2);
  742. client.publish("esp/flow2", (char*) payloads.c_str());
  743. client.subscribe("esp/flow2");
  744. counter=3;
  745. delay(50);
  746. }else if (counter==3){
  747. String payloads2 = String(totalMilliLitres2);
  748. client.publish("esp/flowtotal2", (char*) payloads2.c_str());
  749. client.subscribe("esp/flowtotal2");
  750. counter=4;
  751. delay(50);
  752. }else if (counter==4){
  753. String payloads = String(distance);
  754. client.publish("esp/level", (char*) payloads.c_str());
  755. client.subscribe("esp/level");
  756. counter=5;
  757. delay(50);
  758. }else if (counter==5){
  759. counter=0;
  760. delay(50);
  761. }
  762.  
  763. btnStr = "";
  764. oldTime5 = millis();
  765. nSensor = 0;
  766. }
  767. break;
  768.  
  769. default:
  770. // if nothing else matches, do the default
  771. // default is optional
  772. break;
  773. }
  774.  
  775. delay(20);
  776. }//END of Loop
  777.  
  778. /*
  779. Insterrupt Service Routine
  780. */
  781. void pulseCounter()
  782. {
  783. // Increment the pulse counter
  784. pulseCount++;
  785. }
  786.  
  787. void pulseCounter2()
  788. {
  789. // Increment the pulse counter
  790. pulseCount2++;
  791. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement