完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,我有这样的代码。我尝试用 HA 控制步进电机。我正在通过 mqtt 发送步骤值。到目前为止没问题。
但是,如果我不使用“禁用看门狗”,那么我会在第 100 步崩溃,如果我使用看门狗,我会在第 1300 步出现错误。ets 2013 年 1 月 8 日,第一个原因:4,启动模式:(3,6) wdt 重置 load 0x4010f000, len 3456, room 16 tail 0 chksum 0x84 csum 0x84 va5432625 ~ld 代码:全选#include #include #include #define Motor1_Dir 5 #define Motor1_Step 4 const char* ssid = "xxx"; const char* password = "xxx"; const char* mqtt_server = "xxx"; const char* mqttUser = "xxx"; const char* mqttPassword = "xxx"; int value; bool flag1; AccelStepper stepper(1, Motor1_Step, Motor1_Dir); WiFiClient espClient; PubSubClient client(espClient); void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); value = 0; int tensValue = 1; for (int i = length - 1; i >=0; i--) // iterate backwards { value += (payload - '0') * tensValue ; tensValue = tensValue * 10; } flag1 = true; // for (int i = 0; i < length; i++) // { // Serial.print((char)payload); // value = (char)payload [length -1]; // flag1 = true; // } // Serial.println(); // Serial.print("Mesaj Geldi"); } void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect("alkan")) { Serial.println("connected"); client.subscribe("Alkan/perde"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 3 seconds"); delay(3000); } } } void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); stepper.setMaxSpeed(200); stepper.setAcceleration(100); // stepper.setSpeed(200); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); { if( flag1 == true ) { // stepper.enableOutputs(); // Serial.println("1"); // ESP.wdtFeed(); // yield(); ESP.wdtDisable(); stepper.moveTo(value); stepper.runToPosition(); // yield(); // ESP.wdtFeed(); // Serial.println("2"); Serial.println(); Serial.println("Stop at:"); delay(100); Serial.print(value); Serial.println(); flag1 = false; // stepper.disableOutputs(); // Serial.println("3"); ESP.wdtEnable(1000); } } } |
|
相关推荐
1个回答
|
|
看门狗错误指示您的程序在一定时间内没有更新看门狗计时器。这可能是由于程序在处理过程中发生了阻塞或死锁,或者程序在运行时出现了错误,例如内存不足或尝试访问无效的地址。
要处理看门狗错误,您可以尝试以下几个步骤: 1. 增加看门狗计时器的时间。这可以通过更改看门狗库的时间戳来完成。但是,这只是一个补救措施,可能不会解决根本问题。 2. 检查您的代码并查找潜在的阻塞或死锁问题。应确保您的程序避免在单个任务中执行运行时间较长的操作,以便不会对看门狗计时器产生不利影响。 3. 确保您的代码中没有内存泄漏或无效的地址访问。在Arduino环境中,您可以使用Serial.println或其他调试工具查看内存使用情况和变量的值。 4. 确保您的电机与Arduino正确连接,并按照规范设置。如果您的电机需要更多电流或电压,则可能会导致错误或看门狗错误。 希望这可以帮助您解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
509浏览 6评论
426浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
404浏览 5评论
406浏览 4评论
378浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-21 15:43 , Processed in 0.787719 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号