毛张毛 发表于 2015-3-24 20:34:16

【新手】arduino和labview控制三个直流电机的问题求大神请教!

我是完全新手,我想请教一下,我在用Uno和L293D控制三个直流电机,然后用LabVIEW编程设置个界面,这两个东西都是初学,程序方面参考了《arduino与labview开发实战》,但是l293d电机接哪些串口搞不懂所以试着编的不靠LabVIEW是可以转起来的,但是现在这个不知道是上位机出错还是下位机出错,LabVIEW运行点“前进”键就自动停止了……求指教!!谢谢!!
这是我的程序
#include <AFMotor.h>
#define forward_command 0x00
#define back_command 0x10
#define stop_command 0x40
byte comdata={0};
int flag=0;
int PWM1 = 11;
int PWM2 = 3;
// define motor on channel 1 with 64KHz PWM#include <AFMotor.h>
AF_DCMotor R_motor(2, MOTOR12_64KHZ);
void receive_data(void);
void test_do_data(void);

void setup() {
Serial.begin(9600);// set up Serial library at 9600 bps

R_motor.setSpeed(200);// 设置速度,从200/255之间任意

}



void loop() {
if (Serial.available()>0)
{
      receive_data();
      test_do_data();
}
}
   void receive_data(void)
   {
       int a;
       for(a=0;a<3;a++)
      {
      comdata=Serial.read();
      delay(2);
       }
   }

   void test_do_data(void)
{
    if(comdata == 0x55)
   {
       if(comdata == 0xAA)
       {
         flag=0;
         switch (comdata)
         {
         case forward_command:// 电机前进
               forward();
               break;
         case back_command:
                back();
                break;
         case stop_command:
                stop_motor();
                break;

          }
       }
   }
}






void forward(void)
{
R_motor.run(FORWARD);
}

void back(void)
{
R_motor.run(BACKWARD);
}

void stop_motor(void)
{
R_motor.run(RELEASE);
}

PINKWALKMAN 发表于 2015-3-25 08:12:35

首先这么点的数据量波特率是够用的,适当的在上下位机程序里加入同等的延时程序进去,再试试吧。还有方法是加入发送指令的校验位,例如先下位机发送指令头以250(数字),下位机首先判断是不是250,如果是则接收,不是就移位一下发送下来的字节数,知道找到250位置。试试吧。

suoma 发表于 2015-3-25 08:48:07

   双机通信故障,“前进”有问题吗?
页: [1]
查看完整版本: 【新手】arduino和labview控制三个直流电机的问题求大神请教!