完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
再会!
我正在使用 NODEMCU ESP12-E 模块通过继电器控制水泵和 2 个蠕动泵。只有当我的超声波传感器 (HC-SR04) 测量到一定水平时,水泵才会打开。一旦达到某个水平,泵将再次关闭,直到传感器检测到水箱 A 中没有足够的水。 我有两个蠕动泵,每个蠕动泵都根据 B 罐的 pH 值泵送 pH 养分。pH 值是用模拟 pH 传感器测量的。 当我将所有代码添加到一起以同时运行时,一切都变得一团糟。水泵连续打开和关闭,忽略 HCSR04 的水位。PH 传感器也不能提供准确的读数,蠕动泵也不能正常工作。 有什么方法可以同时操作所有东西或将每个传感器放在基于时间的队列中而不使用延迟功能? 我的代码如下: 代码:全选#include #include "DHT.h" #define TRIG 14 #define ECHO 12 #define DHTPIN 5 // Digital pin connected to the DHT sensor D1 #define DHTTYPE DHT11 #define Waterpump 0 //Waterpump relay2 D3 Orange #define SensorPin A0 //pH meter Analog output to Arduino Analog Input 0 #define Offset 0.00 //deviation compensate #define pHUp 13 // pHUP D7 relay4 Green #define pHDown 2 // pHDown D4 relay3 Yellow #define ArrayLenth 40 //times of collection int pHArray[ArrayLenth]; //Store the average value of the sensor feedback int pHArrayIndex=0; float trigger_level=7.0; DHT dht(DHTPIN,DHTTYPE); UltraSonicDistanceSensor distanceSensor(TRIG, ECHO); // Initialize sensor that uses digital pins 13 and 12. void setup() { // put your setup code here, to run once: Serial.begin(115200); dht.begin(); ///////////////SET pumps as outputs/////////// pinMode(pHUp,OUTPUT); pinMode(pHDown,OUTPUT); pinMode(Waterpump,OUTPUT); /////////////INITIALLY HAVE THE PUMPS OFF/////////////// digitalWrite(pHUp,HIGH); digitalWrite(pHDown,HIGH); digitalWrite(Waterpump,HIGH); } void loop() { static float pHValue,voltage; pHArray[pHArrayIndex++]=analogRead(SensorPin); if(pHArrayIndex==ArrayLenth)pHArrayIndex=0; voltage = avergearray(pHArray, ArrayLenth)*3.3/1024; pHValue = 3.5*voltage+Offset; Serial.print(" pH : "); Serial.println(pHValue,2); float W = distanceSensor.measureDistanceCm(); if (pHValue <5.0) { digitalWrite(pHUp,LOW); // delay(20); // digitalWrite(pHUp,HIGH); } if(pHValue>7.5) { digitalWrite(pHDown,LOW); //delay(20); //digitalWrite(pHDown,HIGH); } if(pHValue>=5.0 || pHValue<=7.5) { digitalWrite(pHUp,HIGH); digitalWrite(pHDown,HIGH); } Serial.print("Water level: "); Serial.print(W); float h=dht.readHumidity(); float t=dht.readTemperature(); if(W>trigger_level) { digitalWrite(Waterpump,LOW); } // If the water level is less than 10cm from the sensor if (W<4.5) { digitalWrite(Waterpump,HIGH); // If the water is >=10cm then we'll turn the pump off } } double avergearray(int* arr, int number){ int i; int max,min; double avg; long amount=0; if(number<=0){ Serial.println("Error number for the array to avraging!/n"); return 0; } if(number<5){ //less than 5, calculated directly statistics for(i=0;i } avg = amount/number; return avg; }else{ if(arr[0] } else{ min=arr[1];max=arr[0]; } for(i=2;i }else { if(arr>max){ amount+=max; //arr>max max=arr; }else{ amount+=arr; //min<=arr<=max } }//if }//for avg = (double)amount/(number-2); }//if return avg; } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
961 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
446浏览 5评论
447浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 18:04 , Processed in 0.827522 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号