Я пробовал этот код для запуска шаговых двигателей и печати координат X и Y джойстика приложения Blynk. Но код получает значения джойстика только один раз. Но он отлично работает, когда я использую условие if вместо while (). Мне нужно было условие 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();
}
Это то, что пока l oop
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.run () после Blynk.syncVirtual (), потому что кто-то сказал в сообществе Blynk для этого https://community.blynk.cc/t/blynk-syncvirtual-doesnt-work-as-expected/40047/4