完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好。我在这里寻求帮助。我确实有以下代码的问题。此代码将被上传到 D1 mini 以控制光伏系统。D1 mini 会持续读取模拟引脚以测量电池电压,当电池电压达到一定值时,将触发接触器以断开配电网并连接光伏系统。在切换这两个接触器之间需要有一个延迟,这样它们就不会相互接触,这会导致逆变器烧毁。无论如何,我需要先用 12 脚打开逆变器,然后 8 秒,因为它需要一些时间才能在逆变器输出端获得 230V,然后触发接触器。所有的接触器和逆变器都是用 230V AC 触发的,所以我使用 SSR(那些来自 aliexpress 的 4 通道,低触发)。如果我使用此代码,则 D1 mini 正在连接到 wifi,当连接到 WIFI 时,SSR 的 LED 会闪烁,延迟几秒钟,然后它们同时亮起,这意味着即使我有,所有的 SSR 都会被触发代码延迟。显然,毫秒延迟不起作用,我不知道为什么,我也有一个谜,为什么所有 SSR LED 在连接到 wifi 时都会闪烁一次?我有点担心即使我不想,它们也会在一开始就触发。感谢您的时间、回复和建议。汤姆 显然,毫秒延迟不起作用,我不知道为什么,我也有一个谜,为什么所有 SSR LED 在连接到 wifi 时都会闪烁一次?我有点担心即使我不想,它们也会在一开始就触发。感谢您的时间、回复和建议。汤姆 显然,毫秒延迟不起作用,我不知道为什么,我也有一个谜,为什么所有 SSR LED 在连接到 wifi 时都会闪烁一次?我有点担心即使我不想,它们也会在一开始就触发。感谢您的时间、回复和建议。汤姆
代码:全选#include float analog_voltage; #include #include char auth[] = \"xxxxx\"; const char *ssid = \"xxxx\"; const char *password = \"xxxx\"; Blynktimer timer; long last_sensor_reading = 0; long bojlerpower = 0; const int numReadings = 30; float readings[numReadings]; // the readings from the analog input int readIndex = 0; // the index of the current reading float total = 0; // the running total float average = 0; // the average unsigned long lastExecutedMillis = 0; void setup() { Serial.begin(115200); for (int thisReading = 0; thisReading < numReadings; thisReading++) { readings[thisReading] = 0; } Serial.print(\"Connecting to \"); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(\".\"); } pinMode(13,OUTPUT); //13 D7 (distribution line contactor) pinMode(14,OUTPUT); //14 je D5 (PV contactor) pinMode(12,OUTPUT); //12 je D6 (inverter) pinMode(16,OUTPUT); //16 je D0 (water heater) Blynk.begin(auth, ssid, password); } void batteryvoltagerele(){ total = total - readings[readIndex]; readings[readIndex] = analogRead(A0)* 3.3 / 1023*18.86; total = total + readings[readIndex]; readIndex = readIndex + 1; if (readIndex >= numReadings) { readIndex = 0; } average = total / numReadings; // battery voltage measurement with sampling of 30 if (average>52.6) { digitalWrite(12,LOW); // inverter turns on if battery voltage reaches certain point unsigned long currentMillis = millis(); if (currentMillis-lastExecutedMillis>=8000){ //8s delay and then switch two contactors lastExecutedMillis = currentMillis; digitalWrite(13,LOW); // disconnect distribution line delay(40); digitalWrite(14,LOW); //connect PV system }} else if (average<51.5){ // if voltage does not need meet requirements then contactors switch from PV to Distribution line digitalWrite(14,HIGH); delay(40); digitalWrite(13 ,HIGH); digitalWrite(12 ,HIGH); } Blynk.virtualWrite(V5, average); Blynk.run(); } void bojlerssr(){ //if battery is full and house does not need much power then electic water heater is turned on. if (average>52.8) { digitalWrite(16,HIGH);} //if(millis() - bojlerpower >= 120000) { else if (analog_voltage<52.5) { digitalWrite(16,LOW); //bojlerpower = millis(); //digitalWrite(15,LOW); //if(millis() - bojlerpower >= 120000) { //digitalWrite(15,HIGH); //bojlerpower = millis(); } }} void loop() { batteryvoltagerele(); bojlerssr(); } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1149 浏览 1 评论
582浏览 6评论
480浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
465浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 07:35 , Processed in 0.667921 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号