极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 急速未来

蓝牙数据接收与被控电机的执行问题

[复制链接]
发表于 2017-6-4 20:14:13 | 显示全部楼层 |阅读模式
请各路大神解答!!!!
蓝牙串口第一次接受指令正常,电机正常运转,监视窗口正常打印,当停止后再次发送指令给蓝牙,监视窗口正常打印,速度很慢,而且电机不工作,求大神解答???
回复

使用道具 举报

发表于 2017-6-5 18:46:54 | 显示全部楼层
有程序吗。。。代码先发一下。。。
查一下电机的最低工作电压。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 15:47:06 | 显示全部楼层
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)
    {                                                
     case  0:
          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)
    {
     case  0:
          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;
    } }
回复 支持 反对

使用道具 举报

发表于 2017-6-7 16:12:54 | 显示全部楼层
为什么i初始值是0啊,感觉初始是0的话这俩if都进不去啊
回复 支持 反对

使用道具 举报

发表于 2017-6-7 16:13:56 | 显示全部楼层
急速未来 发表于 2017-6-7 15:47
这是部分程序,您看下有什么问题
int pin1=22;int pin2=23;int pin3=24;int pin4=25;int pin5= 2;//(2 ...

顺便说一下。。。delay是毫秒啊,你这延迟2ms然后变一下电机是想干啥。。。电机跟得上吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 18:58:48 | 显示全部楼层
zjz5717 发表于 2017-6-7 16:12
为什么i初始值是0啊,感觉初始是0的话这俩if都进不去啊

初始值为0,是为了进行判断,匹配case1的值,让电机转动
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 19:01:51 | 显示全部楼层
zjz5717 发表于 2017-6-7 16:13
顺便说一下。。。delay是毫秒啊,你这延迟2ms然后变一下电机是想干啥。。。电机跟得上吗

之前写了8拍的程序,电机转动不正常,之后加了微小的延时后就正常转动了,
那个是不用加延时吗,我不太清楚
回复 支持 反对

使用道具 举报

发表于 2017-6-7 19:05:42 | 显示全部楼层
急速未来 发表于 2017-6-7 19:01
之前写了8拍的程序,电机转动不正常,之后加了微小的延时后就正常转动了,
那个是不用加延时吗:loveline ...

我想知道这部分的效果是什么。。。为什么我觉得这是电机在抖
以及你的问题到底是什么。。。我觉得你这个代码怪怪的,按理来说i=0的话你发什么都不会有相应的啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 19:06:04 | 显示全部楼层
急速未来 发表于 2017-6-7 19:01
之前写了8拍的程序,电机转动不正常,之后加了微小的延时后就正常转动了,
那个是不用加延时吗:loveline ...

我现在遇到问题是:第一次接受指令后电机可以按照要求转动,但再次发送不同的指令后,应给是第二个电机转动,但第一个却转动了,如果是第二个转动,同样的程序,就不能按照要求转动了,不知道为什么
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 21:41:09 | 显示全部楼层
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)
                                                                 {                                                
                                                                   case  0:      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)
                                                                 {                                                
                                                                   case  0:      delay (2000);  i++;   break;
                                                                   case 1 :       go_two ();  break;  
                                                                  }
                                                     }
                                              break;
                                              case 1 :    stop_two();    break;
                                            }
                                }
                               i=0;
                       }
           break;
    }
}

现在遇到的问题是:发送'A',一号电机按要求正常运行,当发送'B'时,有时候一号电机转动,但不能正常执行一号电机的程序(当记到最大值时,不能停止),有时候二号电机转动,也不能运行二号电机程序(当记到最大值时不能停止)。。用窗口监视器检测打印正常。

请问这时什么原因造成的??感谢耐心解惑,谢谢!
回复 支持 反对

使用道具 举报

发表于 2017-6-8 10:24:47 | 显示全部楼层
急速未来 发表于 2017-6-7 21:41
不好意思,可能是我没有表达好。
我要实现的功能是计数,有一号电机和二号电机,每个电机由一个红外控制 ...

后半部分程序中val都是char类型的。。。为什么你定义的是int类型的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-9 12:32:22 | 显示全部楼层
zjz5717 发表于 2017-6-8 10:24
后半部分程序中val都是char类型的。。。为什么你定义的是int类型的

我改了一下,还是一样的
回复 支持 反对

使用道具 举报

发表于 2017-6-9 21:32:52 | 显示全部楼层
急速未来 发表于 2017-6-9 12:32
我改了一下,还是一样的

接着解决下一个问题,val从串口拿到数据之后,没有做清除吧
也就是说,第一次发完A,val就一直是A,有可能会一直陷在A里面的delay2000上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-10 20:06:46 | 显示全部楼层
zjz5717 发表于 2017-6-9 21:32
接着解决下一个问题,val从串口拿到数据之后,没有做清除吧
也就是说,第一次发完A,val就一直是A,有可 ...

那应该怎么清除数据
回复 支持 反对

使用道具 举报

发表于 2017-7-15 09:10:46 | 显示全部楼层
请问你这是蓝牙控制吗?还有延时2毫秒,电机会不会振动?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 03:08 , Processed in 0.038587 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表