gpt4 book ai didi

c++ - Blynk.syncVirtual(V1)不更新虚拟引脚值

转载 作者:行者123 更新时间:2023-12-02 10:31:27 25 4
gpt4 key购买 nike

我正在尝试使用此代码来运行步进电机并打印Blynk应用程序操纵杆的X和Y坐标。但是代码只获得一次操纵杆值。但是当我使用if条件而不是while()时,它可以正常工作。我需要在有条件的情况下连续运行步进电动机,但如果有条件,它们会关闭然后再打开,会很快降低步进电动机的速度。

请帮我解决这种情况


#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <AccelStepper.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "LRTCZUnCI06P-pqh5rlPXRbuOUgQ_uGH";

AccelStepper stepper_1(1,D2,D1);
AccelStepper stepper_2(1,D5,D6);

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Airtel_7599998800";
char pass[] = "air71454";

int prev_x = 0;
int prev_y = 0;

BLYNK_WRITE(V1) {
int x = param[0].asInt();
int y = param[1].asInt();

// Do something with x and y
Serial.print("X = ");
Serial.print(x);
Serial.print("; Y = ");
Serial.println(y);

MoveControls(x , y);
}

void setup()
{
// Debug console
Serial.begin(9600);

stepper_1.setAcceleration(1000);
stepper_2.setAcceleration(1000);

Blynk.begin(auth, ssid, pass);
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
// ESP.wdtDisable();
// ESP.wdtEnable(WDTO_8S);
}

void loop()
{// ESP.wdtFeed();


Blynk.run();
// Serial.println("A");
}

void MoveControls(int x, int y) {

///////////////////////////////////////////Move Forward////////////////////////////////////////////////////

if(y >= 150 && x <= 150 && x >= -150){
stepper_1.enableOutputs();
stepper_2.enableOutputs();

stepper_1.setMaxSpeed(1000);
stepper_2.setMaxSpeed(1000);

stepper_1.move(1000);
stepper_2.move(1000);

while(x != prev_x && y != prev_y){

stepper_1.run();
stepper_2.run();

Blynk.syncVirtual(V1);
Blynk.run();

Serial.print("X = ");
Serial.print(x);
Serial.print("; Y = ");
Serial.println(y);
}

prev_x = x;
prev_y = y;

}


///////////////////////////////////////////Neutral Zone////////////////////////////////////////////////////
if(y <= 150 && x <= 150 && x >= -150 && y >= -150){
stepper_1.disableOutputs();
stepper_2.disableOutputs();

prev_x = x;
prev_y = y;
}


yield();
}

这是while循环
while(x != prev_x && y != prev_y){

stepper_1.run();
stepper_2.run();

Blynk.syncVirtual(V1);
Blynk.run();

Serial.print("X = ");
Serial.print(x);
Serial.print("; Y = ");
Serial.println(y);
}

prev_x = x;
prev_y = y;

}

我知道代码非常错误,没有多大意义,但我只需要修复Blynk.syncVirtual()问题。

我还尝试在Blynk.syncVirtual()之后添加Blynk.run(),因为有人在Blynk社区中要求这样做
https://community.blynk.cc/t/blynk-syncvirtual-doesnt-work-as-expected/40047/4

最佳答案

在您的while循环中,您设置的prev_x = x和&prev_y = y满足while循环的条件

关于c++ - Blynk.syncVirtual(V1)不更新虚拟引脚值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62084409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com