问一下大家有没有感觉blinker的延迟,怎么能即时响应?
使用blinker是必须要用回调函数吗,感觉延迟好高,响应的有1-2S的空白 通常一秒以内可能是你网络问题,或者程序没写好另外,设备和手机在同一个局域网时,会切换成局域网通信,通信速度会更快
奈何col 发表于 2019-5-28 08:51
通常一秒以内
可能是你网络问题,或者程序没写好另外,设备和手机在同一个局域网时,会切换成局域网通信, ...
后来我直接连手机热点,响应速度也没变化,程序上我也尽可能的精简了,这是我的程序,麻烦您看一下是什么原因。
#define BLINKER_WIFI
#include <Blinker.h>
//#include <Servo.h>
int INA = D4; //电机A正反转控制端
int PWMA = D5; //电机A调速端
int INB = D7; //电机B正反转控制端
int PWMB = D6; //电机B调速端
char auth[] = "375e594d10f6";
char ssid[] = "bukaiyuan";
char pswd[] = "15910602089";
/*Servo myservo;
BlinkerSlider Slider1("duoji");
void slider1_callback(int32_t value)
{
myservo.write(value);
// BLINKER_LOG("get slider value: ", value);
}
*/
BlinkerButton Buttonqian("btn-qian");
void buttonqian_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="press")
{
digitalWrite(INA,LOW);
digitalWrite(INB,HIGH);
analogWrite(PWMA,80);
analogWrite(PWMB,80);
}
else if(state=="pressup"){
digitalWrite(PWMA,LOW);
digitalWrite(PWMB,LOW);
}
}
BlinkerButton Buttonhou("btn-hou");
void buttonhou_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="press")
{
digitalWrite(INA,HIGH);
digitalWrite(INB,LOW);
analogWrite(PWMA,80);
analogWrite(PWMB,80);
}
else if(state=="pressup"){
digitalWrite(PWMA,LOW);
digitalWrite(PWMB,LOW);
}
}
BlinkerButton Buttonzuo("btn-zuo");
void buttonzuo_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="press")
{
digitalWrite(INA,HIGH);
digitalWrite(INB,HIGH);
analogWrite(PWMA,80);
analogWrite(PWMB,80);
}
else if(state=="pressup"){
digitalWrite(PWMA,LOW);
digitalWrite(PWMB,LOW);
}
}
BlinkerButton Buttonyou("btn-you");
void buttonyou_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="press")
{
digitalWrite(INA,LOW);
digitalWrite(INB,LOW);
analogWrite(PWMA,80);
analogWrite(PWMB,80);
}
else if(state=="pressup"){
digitalWrite(PWMA,LOW);
digitalWrite(PWMB,LOW);
}
}
void setup()
{
analogWriteRange(255);
//myservo.attach(D5);
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(INA,OUTPUT);
pinMode(INB,OUTPUT);
pinMode(PWMA,OUTPUT);
pinMode(PWMB,OUTPUT);
Blinker.begin(auth, ssid, pswd);
Buttonqian.attach(buttonqian_callback);
Buttonhou.attach(buttonhou_callback);
Buttonzuo.attach(buttonzuo_callback);
Buttonyou.attach(buttonyou_callback);
}
void loop()
{
Blinker.run();
} 奈何col 发表于 2019-5-28 08:51
通常一秒以内
可能是你网络问题,或者程序没写好另外,设备和手机在同一个局域网时,会切换成局域网通信, ...
BLINKER能不能像响应摇杆控制那样,shif让电机即时响应并动作。 从你以上描述看,你这不是延迟问题,而是车的惯性。。。
你停止的时候让轮子反转100ms就行了。。。 奈何col 发表于 2019-5-28 13:26
从你以上描述看,你这不是延迟问题,而是车的惯性。。。
你停止的时候让轮子反转100ms就行了。。。 ...
不是惯性,从按APP上的按键到小车有动作,这之间有大概一秒的延迟,这是正常现象吗 奈何col 发表于 2019-5-28 13:26
从你以上描述看,你这不是延迟问题,而是车的惯性。。。
你停止的时候让轮子反转100ms就行了。。。 ...
还有一个类似的问题想请教一下,现在滑块是滑动后发送最后手指离开时候的数据,可不可以把变化的过程也即时发送,就像摇杆控制舵机一样,随着滑块而变化角度?
PS:BLINKER这个软件真不错,良心之作 bukaiyuan 发表于 2019-5-28 13:47
不是惯性,从按APP上的按键到小车有动作,这之间有大概一秒的延迟,这是正常现象吗 ...
一秒内是正常的,两三秒可能是你网络问题。
你要通过串口调试来判断延迟多少,不要通过眼睛感觉,我从你的描述看,你只是眼睛感觉动作有延迟,那也可能是你硬件上的问题。比如小车并没有马上停下来,你要确定的是,8266是否即时接收到数据,而不是说小车有没停下来;
如果是接收到数据了,并且动作执行了,没有停下来,就是惯性,或者你电机驱动的原因了
coloz 发表于 2019-5-28 16:50
一秒内是正常的,两三秒可能是你网络问题。
你要通过串口调试来判断延迟多少,不要通过眼睛感觉,我从你 ...
确实是一秒内,多的时候到一秒,用BLINKER之前是用摇杆连得线直接控制的,直接模拟读数比较快,可能刚用BLINKER和之前的一比较,主观上觉得动作很肉。
谢谢大佬的解答。
页:
[1]