Topic: Неадекватная работа джойстика
Решил сделать машинку на р/у. Всего 1 мотор(2 соединенных параллельно)(в дальнейшем добавлю сервопривод, поэтому руления нет), драйвер используется тот, что на машинке, плата NodeMCU CP2102.
Проблема в следующем: при управлении джойстиком, если его допустим из верхнего положения(вперед) резко отпустить, то джойстик возвращается на 0, а машинка при этом продолжает движение вперед. Если же из верхнего положения джойстик плавно перемесить к центру, то все в порядке. Так же если из верхнего положения резко дернуть назад, то машинка тоже продолжает движение вперед, только с меньшей скоростью, хотя должна ехать вообще назад. Код вроде вообще простецкий, не понимаю, в чем проблема. Если делать все плавно проблем нет, стоит только начать резко управлять появляются проблемы.
На кнопки не обращайте внимание, забыл удалить после тестов
//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////
// можете включить вывод отладочной информации в Serial на 115200
//#define REMOTEXY__DEBUGLOG
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>
// настройки соединения
#define REMOTEXY_WIFI_SSID "RemoteXY"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
#include <RemoteXY.h>
// конфигурация интерфейса RemoteXY
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = // 60 bytes
{ 255,4,0,0,0,53,0,17,0,0,0,31,2,106,200,200,84,1,1,3,
0,5,52,144,49,49,129,32,46,46,37,2,26,31,1,3,135,22,22,68,
45,26,26,0,2,31,0,1,28,134,22,22,37,45,26,26,0,2,31,0 };
// структура определяет все переменные и события вашего интерфейса управления
struct {
// input variables
int8_t joystick_01_x; // oт -100 до 100
int8_t joystick_01_y; // oт -100 до 100
uint8_t button_01; // =1 если кнопка нажата, иначе =0
uint8_t button_02; // =1 если кнопка нажата, иначе =0
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
#define MOTOR_FORWARD D2
#define MOTOR_BACKWARD D3
unsigned char MOTOR[2] =
{MOTOR_FORWARD, MOTOR_BACKWARD};
void Motor (unsigned char * motor, int v)
{
if (v>100) v=100;
if (v<-100) v=-100;
if (v>0) {
analogWrite(motor[0], v*2.55);
}
else if (v<0) {
analogWrite(motor[1], (-v)*2.55);
}
else {
analogWrite(motor[1], 0);
analogWrite(motor[2], 0);
}
}
void setup() {
RemoteXY_Init ();
// TODO you setup code
analogWriteFreq(20000);
pinMode (MOTOR_FORWARD, OUTPUT);
pinMode (MOTOR_BACKWARD, OUTPUT);
}
void loop()
{
RemoteXY_Handler ();
Motor (MOTOR, RemoteXY.joystick_01_y);
// TODO you loop code
// используйте структуру RemoteXY для передачи данных
// не используйте функцию delay(), вместо нее используйте RemoteXY_delay()
}