蓝牙数据接收与被控电机的执行问题
请各路大神解答!!!!蓝牙串口第一次接受指令正常,电机正常运转,监视窗口正常打印,当停止后再次发送指令给蓝牙,监视窗口正常打印,速度很慢,而且电机不工作,求大神解答??? 有程序吗。。。代码先发一下。。。
查一下电机的最低工作电压。。。 zjz5717 发表于 2017-6-5 18:46
有程序吗。。。代码先发一下。。。
查一下电机的最低工作电压。。。
这是部分程序,您看下有什么问题
int pin1=22;int pin2=23;int pin3=24;int pin4=25;int pin5= 2;//(2脚是检测红外引脚)
int i=0;
int val;
int n;
void setup()
{
pinMode (pin1,OUTPUT);pinMode (pin2,OUTPUT);pinMode (pin3,OUTPUT);pinMode (pin4,OUTPUT);pinMode (pin5,INPUT);
Serial.begin(9600);
}
void loop ()
{
if (Serial.available())
{
val=Serial.read();
}
if (val=='A')
{if(i>1)
{ digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);}
Serial.println("11");int n = digitalRead (pin5);switch (n==LOW&&i<1)
{
case0:
delay (2000);
i++;
break;
case 1 :
digitalWrite (pin1,LOW);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,LOW);digitalWrite (pin2,LOW);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,LOW);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,LOW);digitalWrite (pin3,LOW); digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,LOW);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,LOW);digitalWrite (pin4,LOW);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,LOW);delay(2);
digitalWrite (pin1,LOW);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,LOW);delay(2);
break;
} }
if (val=='B')
{
if (i>2)
{ digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);}
Serial.println("12");int n = digitalRead (pin5);switch (n==LOW&&i<2)
{
case0:
delay (2000);
i++;
break;
case 1 :
digitalWrite (pin1,LOW);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,LOW);digitalWrite (pin2,LOW);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,LOW);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,LOW);digitalWrite (pin3,LOW); digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,LOW);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,LOW);digitalWrite (pin4,LOW);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,LOW);delay(2);
digitalWrite (pin1,LOW);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,LOW);delay(2);
break;
} } 为什么i初始值是0啊,感觉初始是0的话这俩if都进不去啊 急速未来 发表于 2017-6-7 15:47
这是部分程序,您看下有什么问题
int pin1=22;int pin2=23;int pin3=24;int pin4=25;int pin5= 2;//(2 ...
顺便说一下。。。delay是毫秒啊,你这延迟2ms然后变一下电机是想干啥。。。电机跟得上吗 zjz5717 发表于 2017-6-7 16:12
为什么i初始值是0啊,感觉初始是0的话这俩if都进不去啊
初始值为0,是为了进行判断,匹配case1的值,让电机转动 zjz5717 发表于 2017-6-7 16:13
顺便说一下。。。delay是毫秒啊,你这延迟2ms然后变一下电机是想干啥。。。电机跟得上吗
之前写了8拍的程序,电机转动不正常,之后加了微小的延时后就正常转动了,
那个是不用加延时吗:loveliness:,我不太清楚 急速未来 发表于 2017-6-7 19:01
之前写了8拍的程序,电机转动不正常,之后加了微小的延时后就正常转动了,
那个是不用加延时吗:loveline ...
我想知道这部分的效果是什么。。。为什么我觉得这是电机在抖
以及你的问题到底是什么。。。我觉得你这个代码怪怪的,按理来说i=0的话你发什么都不会有相应的啊 急速未来 发表于 2017-6-7 19:01
之前写了8拍的程序,电机转动不正常,之后加了微小的延时后就正常转动了,
那个是不用加延时吗:loveline ...
我现在遇到问题是:第一次接受指令后电机可以按照要求转动,但再次发送不同的指令后,应给是第二个电机转动,但第一个却转动了,如果是第二个转动,同样的程序,就不能按照要求转动了,不知道为什么
zjz5717 发表于 2017-6-7 19:05
我想知道这部分的效果是什么。。。为什么我觉得这是电机在抖
以及你的问题到底是什么。。。我觉得你这个 ...
不好意思,可能是我没有表达好。
我要实现的功能是计数,有一号电机和二号电机,每个电机由一个红外控制,(红外初始状态输出低电平),连接蓝牙进行串口调试,当我发送'A'时。一号电机一直转动转动,当红外检测到有东西通过时,延时2S,计数+1,(设定计数最大值为2),当记到最大值后电机一直停止。再发送'B',二号电机开始转动,(当红外检测到有东西通过时,延时2S,计数+1,(设定计数最大值为3),当记到最大值后电机一直停止),这部分和一号电机执行差不多。
这是目前重新改的程序
int pin1=22;int pin2=23;int pin3=24;int pin4=25;int pin5= 2;
int pin6=26;int pin7=27;int pin8=28;int pin9=29;int pin10=3;
int i=0;
int val;
void setup()
{
pinMode (pin1,OUTPUT);pinMode (pin2,OUTPUT);pinMode (pin3,OUTPUT);pinMode (pin4,OUTPUT);pinMode (pin5,INPUT);
pinMode (pin6,OUTPUT);pinMode (pin7,OUTPUT);pinMode (pin8,OUTPUT);pinMode (pin9,OUTPUT);pinMode (pin10,INPUT);
Serial.begin(9600);
}
void go_one ()
{digitalWrite (pin1,LOW);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,LOW);digitalWrite (pin2,LOW);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,LOW);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,LOW);digitalWrite (pin3,LOW); digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,LOW);digitalWrite (pin4,HIGH);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,LOW);digitalWrite (pin4,LOW);delay(2);
digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,LOW);delay(2);
digitalWrite (pin1,LOW);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,LOW);delay(2);}
void stop_one ()
{digitalWrite (pin1,HIGH);digitalWrite (pin2,HIGH);digitalWrite (pin3,HIGH);digitalWrite (pin4,HIGH);}
void go_two ()
{digitalWrite (pin6,LOW);digitalWrite (pin7,HIGH);digitalWrite (pin8,HIGH);digitalWrite (pin9,HIGH);delay(2);
digitalWrite (pin6,LOW);digitalWrite (pin7,LOW);digitalWrite (pin8,HIGH);digitalWrite (pin9,HIGH);delay(2);
digitalWrite (pin6,HIGH);digitalWrite (pin7,LOW);digitalWrite (pin8,HIGH);digitalWrite (pin9,HIGH);delay(2);
digitalWrite (pin6,HIGH);digitalWrite (pin7,LOW);digitalWrite (pin8,LOW); digitalWrite (pin9,HIGH);delay(2);
digitalWrite (pin6,HIGH);digitalWrite (pin7,HIGH);digitalWrite (pin8,LOW);digitalWrite (pin9,HIGH);delay(2);
digitalWrite (pin6,HIGH);digitalWrite (pin7,HIGH);digitalWrite (pin8,LOW);digitalWrite (pin9,LOW);delay(2);
digitalWrite (pin6,HIGH);digitalWrite (pin7,HIGH);digitalWrite (pin8,HIGH);digitalWrite (pin9,LOW);delay(2);
digitalWrite (pin6,LOW);digitalWrite (pin7,HIGH);digitalWrite (pin8,HIGH);digitalWrite (pin9,LOW);delay(2);}
void stop_two ()
{digitalWrite (pin6,HIGH);digitalWrite (pin7,HIGH);digitalWrite (pin8,HIGH);digitalWrite (pin9,HIGH);}
void loop ()
{
while (Serial.available())
{
val = Serial.read();
delay(100);
}
switch (val)
{
case 'A':
{
for (int a=0;a<1;a++)
{
switch(a)
{
case 0 :
{
Serial.println("11"); n = digitalRead (pin5) ;
switch(n==LOW&&i<1)
{
case0: delay (2000);i++; break;
case 1 : go_one ();break;
}
}
break;
case 1 : stop_one(); break;
}
}
i=0;
}
break;
case 'B':
{
for (int b=0;b<1;b++)
{
switch(b)
{
case 0 :
{
Serial.println("21"); n = digitalRead (pin10) ;
switch(n==LOW&&i<1)
{
case0: delay (2000);i++; break;
case 1 : go_two ();break;
}
}
break;
case 1 : stop_two(); break;
}
}
i=0;
}
break;
}
}
现在遇到的问题是:发送'A',一号电机按要求正常运行,当发送'B'时,有时候一号电机转动,但不能正常执行一号电机的程序(当记到最大值时,不能停止),有时候二号电机转动,也不能运行二号电机程序(当记到最大值时不能停止)。。用窗口监视器检测打印正常。
请问这时什么原因造成的??感谢耐心解惑,谢谢! 急速未来 发表于 2017-6-7 21:41
不好意思,可能是我没有表达好。
我要实现的功能是计数,有一号电机和二号电机,每个电机由一个红外控制 ...
后半部分程序中val都是char类型的。。。为什么你定义的是int类型的 zjz5717 发表于 2017-6-8 10:24
后半部分程序中val都是char类型的。。。为什么你定义的是int类型的
我改了一下,还是一样的 急速未来 发表于 2017-6-9 12:32
我改了一下,还是一样的
接着解决下一个问题,val从串口拿到数据之后,没有做清除吧
也就是说,第一次发完A,val就一直是A,有可能会一直陷在A里面的delay2000上 zjz5717 发表于 2017-6-9 21:32
接着解决下一个问题,val从串口拿到数据之后,没有做清除吧
也就是说,第一次发完A,val就一直是A,有可 ...
那应该怎么清除数据 请问你这是蓝牙控制吗?还有延时2毫秒,电机会不会振动?
页:
[1]