2018-03-21 20:11:54 qq_36605849 阅读数 20601
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    1470 人正在学习 去看看 王全

Arduino 2560控制两个步进电机

用arduino和步进电机控制器驱动两个步进电机,具体的接线过程和怎样连接都在图片上。

准备工具:

两个步进电机(我用的是J42):

Arduino板(我用的是2560):

步进电机控制器:

电源适配器:

一 储备知识

1.步进电机的绕组

A+:黑

A-:绿

B+:红

B-:蓝

(这个问题就查了好久..)

2.细分:

步进电机每200(360÷1.8)脉冲转一圈,1.8是步进电机1脉冲走的度数(步进电机背面显示的。200就是1细分,那么2细分就是400(400脉冲转一圈,4细分就是800脉冲转一圈。所以可以通过调节细分来控制步进电机转动的速度。

二 步进电机与步进电机控制器相连

按照上面说的黑绿红蓝连接步进电机的A+A-B+B-

三控制器与电源适配器相连


四控制器和arduino连接


1.输入信号有三种

①    步进脉冲信号PUL+,PUL-;

②    方向电平信号DIR+ ,DIR-

③      脱机信号EN+,EN-。

2. 采用共阴极接法:

PUL-,DIR-,EN-连arduino的地

EN+:脱机信号,接地或者不接,接口4

DIR+:控制转动方向,高电平正转,接口 5

PUL+:控制脉冲,接口 6

3. 第二个步进电机接法同理:

PUL-,DIR-,EN-连arduino的地

EN+:脱机信号,接地或者不接,接口7

DIR+:控制转动方向,高电平正转,接口 8

PUL+:控制脉冲,接口 9

 

五代码:

#define CLK 9
#define CW 8
#define EN 7
#define CLK2 6
#define CW2 5
#define EN2 4
void setup() {
pinMode(CLK,OUTPUT);
pinMode(CW,OUTPUT);
pinMode(EN,OUTPUT);
pinMode(CLK2,OUTPUT);
pinMode(CW2,OUTPUT);
pinMode(EN2,OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(CW,HIGH);   //正转
digitalWrite(CW2,HIGH);   //正转
//digitalWrite(EN, LOW);   //脱机
for(int i=0;i<200;++i)
{
digitalWrite(CLK,HIGH);//逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ
digitalWrite(CLK2,HIGH);//
delayMicroseconds(1000);
digitalWrite(CLK,LOW);
digitalWrite(CLK2,LOW);
delayMicroseconds(1000);
}
}

六 延伸

学长提了个问题,怎样让步进电机触摸时,能明显的感受到转动每一步,也就是说每一步与每一步之间都有时间暂停,然后在循环往复的转动。

解决方法:在学长的提示下,因为脉冲信号呈时序状,让高频脉冲的时间短,低频持续的时间长,这样在转动的时候就能明显的感受到每一步的转动。

#define CLK 9
#define CW 8
#define EN 7
int steps=50; //角度
/*
 * steps=16.667   旋转30
 * steps=33.334   旋转60
 * steps=50       旋转90
 * steps=100      旋转180
 * steps=200      旋转360
 */
void setup() 
{
  pinMode(CLK, OUTPUT);
  pinMode(CW, OUTPUT);
  pinMode(EN, OUTPUT);
  Serial.begin(9600);  //通信接口
}
/*
 * 速度:通过脉冲时间间隔来控制速度/控制细分?
 * 方向:控制脉冲次数来控制一次能过转多少度
 */
void loop() 
{
  digitalWrite(CW, HIGH);  //正转
  //digitalWrite(EN, LOW);   //脱机
  
  for (int i = 0; i < steps; ++i)
  {
    digitalWrite(CLK, HIGH); //逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ
    delayMicroseconds(10);  //微秒400以上左右好用,所以周期T=800us,所以f=1/T=1250HZ
    digitalWrite(CLK, LOW);
    delayMicroseconds(15000);
    
  }
  //delay(500); //毫秒
}
学长又又提出了一个问题(-_-),假如让步进电机转动90度,怎样在前45度速度逐渐加快,怎样在后45度速度逐渐减慢?因为时间挤不出,一直没去想,等有时间看看能不能解决
2019-12-12 01:05:10 weixin_44613063 阅读数 798
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    1470 人正在学习 去看看 王全

步进电机是一种将电脉冲转化为角位移的执行机构。当步进电机的驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步长)。通过控制脉冲个数来控制角位移量,达到准确定位的目的;通过控制脉冲频率来控制电机转动的速度和加速度,达到调速的目的。

下面是连接图,右上角是 Arduino 与驱动器的连线,VCC、脉冲、方向、使能是单片机提供的 4 个引脚,字面意思是对于驱动器而言,与 Arduino 无关,选择 4 个输出引脚就行。VCC 与三个 +端 相连。

在这里插入图片描述


控制程序

这里使用 2、3、4、5 四个引脚与驱动器连接,只需要控制脉冲的次数和频率就能够控制电机转动的角度和速度。本来 Arduino 有专门的 Stepper 库来驱动步进电机,但功能比较简单,就自己写了,还有一个 tone() 频率函数,如果只控制速度可以使用一下。

代码如下:

#define VCC 2
#define PLS 3
#define DIR 4
#define ENA 5

void setup() {
	pinMode(VCC, OUTPUT);
	pinMode(PLS, OUTPUT);
	pinMode(DIR, OUTPUT);
	pinMode(ENA, OUTPUT);
}

void loop() {
	digitalWrite(VCC, HIGH);
	digitalWrite(ENA, HIGH);
	digitalWrite(DIR, HIGH);	//正转
	//正转一圈,用时1s
	//此处驱动器定义1600步为1圈
	//本来1600X625微秒=1秒,因为时间间隔太短,程序运行也需要时间,间隔时间/2之后总时间差不多1秒
    for(int x=0; x<1600; x++){
	    digitalWrite(PLS, HIGH);
	    delayMicroseconds(625/2);
	    digitalWrite(PLS, LOW);
	    delayMicroseconds(625/2);
    }
	delay(1000);	//停1s
	
	digitalWrite(DIR, LOW);    //反转
	//反转一圈,用时1s
    for(int x=0; x<1600; x++){
	    digitalWrite(PLS, HIGH);
	    delayMicroseconds(625/2);
	    digitalWrite(PLS, LOW);
	    delayMicroseconds(625/2);
    }
	delay(1000);	//停1s
}

上面的代码是让步进电机正转 1 圈后停 1 秒,再反转 1 圈后停 1 秒,转 1 圈的时间也是 1 秒,如此循环,可根据需要自己更改。

程序说明:VCC 给驱动器提供电源引脚,PLS 给步进电机提供脉冲引脚,DIR 决定电机是正转还是反转,ENA 是步进电机驱动器的开关,如果控制电路给 ENA 引脚高电压那么就相当于让驱动器接受控制信号,如果 ENA 提供低电压,无论怎么给脉冲信号电机都不会动。在 PLS 引脚产生一定频率的脉冲,并控制脉冲时间,就可控制步进电机。

2018-05-18 11:23:24 my393661 阅读数 2073
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    1470 人正在学习 去看看 王全

其实步进电机没有多大区别,用这个标题是因为工业步进电机一般配驱动器使用的,只需要给出脉冲和方向信号即可.


关于这个库

1.比GRBL简单,但是能用在mega2560(grbl应该也能,但默认不能).

2.通过串口发送G代码,实时性不会好到哪儿,作为实时运动控制基本不可取.不过可以考虑从本地读取G代码.不知道运动路径连续性怎么样.适合做XYZ运动的,机器人的就不要考虑了.


参考

http://www.geek-workshop.com/thread-4722-1-1.html

http://reprap.org/wiki/Arduino_GCode_Interpreter

注意问题

1.ubuntu下arduino ide编译源代码会提示word[MaxSize]重复声明,wiki中有个说明链接,需要帐号的,我打不开.选择了把所有文件中的word重命名为word2.

2.下载完成后通过串口发送G代码

3.默认是inch单位.修改为mm单位在串口输入G20,inch单位输入G21

4需要修改默认配置详见wiki,页面也有基本的G代码规则


顺便做个广告,鸣志的步进不错




2017-04-16 00:05:15 lby0910 阅读数 16404
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    1470 人正在学习 去看看 王全

最近实验室的智能车从大车路线改到了小车路线,于是笔者也跟着学习一些新的知识。大车的控制可以使用标准的CAN协议,很多方便的指令都能够通过CAN来传输给ECU并得到相应的反馈。然而对于最近接触的电动小白车,控制策略只能使用物理机械去控制。因此使用步进电机拉杆成为目前的解决方案之一。

1. 设备

【设备】:
- 57步进电机套装,包括2相4线的电机以及对应驱动板;
- Arduino UNO;
- 杜邦线若干;
- 电源输出设备一台(提供24V电压);
这里写图片描述

2. 电机连线

【信号输入端】:

  • PUL+:脉冲信号正
  • PUL-:脉冲信号负
  • DIR+:电机正反控制信号正
  • DIR-:电机正反控制信号负
  • EN+:电机脱机信号正
  • EN-:电机脱机信号负

【电源电压】:
DC:9-40V,这里我们用电源输出设备输出24V即可。
【电路接法】:
我们使用共阴极接法:分别将 PUL-,DIR-,EN-连接到控制系统的地端, 脉冲输入信号通过PUL+接入,方向信号通过DIR+接入,使能信号通过EN+接 入。若需限流电阻,则接入限流电阻R。(EN信号可不接,并且下图的CP即指脉冲信号PUL)
这里写图片描述

3. 拨码开关设定细分以及电流

【细分数】:
根据驱动板上面的开关状态设定,细分后步进电机步距 角按下列方法计算:步距角=电机固有步距角/细分数。

4. Arduino输出脉冲信号

上述连接完毕后,我们用Arduino模拟输出脉冲信号:

#define PUL 9

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  // Set the port function, output or input.
  pinMode(PUL, OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  analogWrite(PUL, 100);
}

如果需要进一步的左右控制,我们定义Arduino的一个数字管脚,连接驱动板的DIR+,给出HIGH或者LOW信号即可改变电机旋转方向。
接下来可以通过串口通信,实现对电机的转动方向、转动速度、角度的控制。

2019-06-29 18:24:55 du_du1 阅读数 448
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    1470 人正在学习 去看看 王全

大三课程设计,两个传感器隔一点距离,打孔纸带在上面移动,要求纸带移动方向和丝杠螺母方向一致。
用到一个arduino板子,一个驱动电路模块,两个红外传感器,一个丝杠螺母连着步进电机的,一个打孔纸带。
在这里插入图片描述
关于用到的驱动电路,原因是arduinoI/O口直接驱动的话电流电压太小,电机可能不转或者太慢,所以要加一个驱动电路。
在这里插入图片描述
红外线传感器:二极管是阳极接+5V。当检测到有覆盖则输出为0,二极管亮。这种传感器有很大缺点:灵敏性难控制,两个相同传感器都可能会不一样。白天可能会受光线的影响。
步进电机是二相四拍的。四拍是+A+B—>-A+B->-A-B ->+A-B -A,-B就是反接的意思。
步进电机的知识:步进电机是给一个脉冲走一个步距角的。电机转速和脉冲频率有关,f=1/T。
arduino怎么产生脉冲,简单的可以通过延时,难一点通过定时器。

以下是示例程序
#include <Arduino.h>
#include <IRremote.h>
int RECV_PIN1 = 11;//传感器的引脚命名
int RECV_PIN2 = 12;
IRrecv irrecv1(RECV_PIN1);//定义IRrecv对象来接受传感器信号
IRrecv irrecv2(RECV_PIN2);
decode_results results;//存放解码器的值
#define A1 3 //步进电机驱动引脚命名
#define A2 4
#define B1 5
#define B2 6

int LEFT_flag = 0; //设置左传感器标志位
int RIGHT_flag = 0;
int time=7; //全局变量,改变延时可改变旋转速度
void setup()
{
Serial.begin(9600);
pinMode(RECV_PIN1,INPUT_PULLUP);// 配置11号针脚为输入状态,并设置使用内部上拉电阻。
pinMode(RECV_PIN2,INPUT_PULLUP);
pinMode(A1,OUTPUT); //设置3号引脚为输出引脚
pinMode(A2,OUTPUT);
pinMode(B1,OUTPUT);
pinMode(B2,OUTPUT);
}

void Scan() //扫描两个传感器,并设置传感器标志位值
{
LEFT_flag = 0; //清空变量
RIGHT_flag = 0;

int Left = digitalRead(RECV_PIN1);// 读取11号针脚上的输入信号的数值
int Right = digitalRead(RECV_PIN2);
Serial.println(Left); // 将获取到的数值打印到串行调试窗口,方便调试。
Serial.println(Right);

if(Left == LOW) //左边的传感器检测到低电平
{
LEFT_flag = 1; //左传感器标志位设置为1
}
if(Right == LOW) //右边传感器检测到低电平
{
RIGHT_flag = 1; //右传感器标志位设置为1
}
}

void orientations_right()//正转
{
Phase_A(); //设置A相位
delay(time); //改变延时可改变旋转速度

Phase_B(); //设置B相位
delay(time);

Phase_C(); //设置C相位
delay(time);

Phase_D(); //设置D相位
delay(time);

}

void orientations_left()//反转
{
Phase_D(); //设置D相位
delay(time); //改变延时可改变旋转速度

Phase_C(); //设置C相位
delay(time);

Phase_B(); //设置B相位
delay(time);

Phase_A(); //设置A相位
delay(time);

}

void Phase_A()
{
digitalWrite(A1,HIGH); //A1引脚高电平
digitalWrite(A2,LOW);
digitalWrite(B1,HIGH);
digitalWrite(B2,LOW);
}

void Phase_B()
{
digitalWrite(A1,LOW);
digitalWrite(A2,HIGH); //B1引脚高电平
digitalWrite(B1,HIGH);
digitalWrite(B2,LOW);
}

void Phase_C()
{
digitalWrite(A1,LOW);
digitalWrite(A2,HIGH);
digitalWrite(B1,LOW); //C1引脚高电平
digitalWrite(B2,HIGH);
}

void Phase_D()
{
digitalWrite(A1,HIGH);
digitalWrite(A2,LOW);
digitalWrite(B1,LOW);
digitalWrite(B2,HIGH); //D1引脚高电平
}

void loop()
{
int i;
Scan();
if(LEFT_flag == 0 && RIGHT_flag == 1)
{
for(i = 0 ; i < 40; i++){
orientations_right(); //电机正转,螺母纸带向左边移动
}
}
else if(LEFT_flag == 1 && RIGHT_flag == 0)
{
for(i = 0 ; i < 40; i++){
orientations_left(); //反转,螺母纸带向右边移动
}
}
delay(5);
}

上面程序还有问题,我觉得相位超前滞后的条件下,不能只单单去判断高低电平,应该要有判断上升和沿下降沿。这样程序运行以后的效果会更加好

以下是简单判断上升沿的程序

//定义全局变量
int flag = 0; //设置左传感器标志位
static int number=0
//检测左边红外传感器上升沿
boolean ScanLeft_up()
{
int Left = digitalRead(RECV_PIN1);// 读取11号针脚上的输入信号的数值
int Right = digitalRead(RECV_PIN2);
Serial.println(Left);
Serial.println(Right);
boolean Left_up = false;
if(Left == LOW){
flag = 1;
number++;//实现脉冲的计数
}
if((Left == HIGH) && (flag == 1))
{
Left_up = true; flag= 0;
}
return Left_up;

}

以下是带有上升沿或者下降沿判断的程序

#include <Arduino.h>
#include <IRremote.h>
int RECV_PIN1 = 11;//传感器的引脚命名
int RECV_PIN2 = 12;
IRrecv irrecv1(RECV_PIN1);//定义IRrecv对象来接受传感器信号
IRrecv irrecv2(RECV_PIN2);
decode_results results;//存放解码器的值

#define A1 3      //步进电机驱动引脚命名
#define A2 4
#define B1 5
#define B2 6

//定义全局变量
int flagLeft_up= 0;//设置左传感器上升沿标志位
int flagLeft_down= 0;

int flagRight_up= 0;
int flagRight_down= 0;

//static int number = 0;//记录多少个周期
int time=8;//全局变量,改变延时可改变旋转速度

void setup() {
  // put your setup code here, to run once:
  pinMode(RECV_PIN1,INPUT_PULLUP);// 配置11号针脚为输入状态,并设置使用内部上拉电阻。
  pinMode(RECV_PIN2,INPUT_PULLUP);
  Serial.begin(9600);
  pinMode(A1,OUTPUT);   //设置引脚为输出引脚
  pinMode(A2,OUTPUT);
  pinMode(B1,OUTPUT);
  pinMode(B2,OUTPUT);
}

//检测左边红外传感器上升沿 
boolean ScanLeft_up()
{
  int Left = digitalRead(RECV_PIN1);//从11引脚读取值,HIGH或者LOW
  int Right = digitalRead(RECV_PIN2);
  Serial.println(Left);
  Serial.println(Right);
  
  boolean Left_up = false;
  if(Left == LOW){
  flagLeft_up = 1;
  //number++;
  }
  if((Left == HIGH) && (flagLeft_up == 1))
  {
    Left_up = true;  flagLeft_up = 0;
  }
  return Left_up;
  
}
boolean ScanLeft_down()//检测左边红外传感器下降沿
{
  int Left = digitalRead(RECV_PIN1);//从11引脚读取值,HIGH或者LOW
  int Right = digitalRead(RECV_PIN2);
  Serial.println(Left);
  Serial.println(Right);
  
  boolean Left_down = false;
  if(Left == HIGH){
  flagLeft_down = 1;
  
  }
  if((Left == LOW) && (flagLeft_down == 1))
  {
    Left_down = true;  flagLeft_down = 0;
  }
  return Left_down;
  
}

//检测右边红外传感器上升沿
boolean ScanRight_up()
{
  int Left = digitalRead(RECV_PIN1);//从11引脚读取值,HIGH或者LOW
  int Right = digitalRead(RECV_PIN2);
  Serial.println(Left);
  Serial.println(Right);
  
  boolean Right_up = false;
  if(Right == LOW){
  flagRight_up = 1;
  }
  if((Right == HIGH) && (flagRight_up == 1))
  {
    Right_up = true;  flagRight_up = 0;
  }
  return Right_up;
  
}
boolean ScanRight_down()//检测右边红外传感器下降沿
{
  int Left = digitalRead(RECV_PIN1);//从11引脚读取值,HIGH或者LOW
  int Right = digitalRead(RECV_PIN2);
  Serial.println(Left);
  Serial.println(Right);
  
  boolean Right_down = false;
  if(Right == HIGH){
  flagRight_down = 1;
  }
  if((Right == LOW) && (flagRight_down == 1))
  {
    Right_down = true;  flagRight_down = 0;
  }
  return Right_down;
  
}

void orientations_right()
{
  Phase_A();      //设置A相位(A->B->C->D是左边移动)
  delay(time);      
      
  Phase_B();      //设置B相位
  delay(time);
      
  Phase_C();      //设置C相位
  delay(time);
    
  Phase_D();      //设置D相位
  delay(time);
}

void orientations_left()
{
  Phase_D();      
  delay(time);     
      
  Phase_C();      
  delay(time);
      
  Phase_B();      
  delay(time);
      
  Phase_A();     
  delay(time);
}

void Phase_A()
{
  digitalWrite(A1,HIGH);    //A1引脚高电平 
  digitalWrite(A2,LOW);
  digitalWrite(B1,HIGH);
  digitalWrite(B2,LOW);
}

void Phase_B()
{
  digitalWrite(A1,LOW); 
  digitalWrite(A2,HIGH);    //B1引脚高电平 
  digitalWrite(B1,HIGH);
  digitalWrite(B2,LOW);
}

void Phase_C()
{
  digitalWrite(A1,LOW); 
  digitalWrite(A2,HIGH);
  digitalWrite(B1,LOW);   //C1引脚高电平 
  digitalWrite(B2,HIGH);
}

void Phase_D()
{
  digitalWrite(A1,HIGH);  
  digitalWrite(A2,LOW);
  digitalWrite(B1,LOW);
  digitalWrite(B2,HIGH);    //D1引脚高电平 
}
void loop() {
  int Left = digitalRead(RECV_PIN1);//从11引脚读取值,HIGH或者LOW
  int Right = digitalRead(RECV_PIN2);
  Serial.println(Left);
  Serial.println(Right);
 
  //判断条件左边的传感器的上升沿或下降沿和右边的传感器的电平的关系,或者右边的传感器的上升沿或下降沿和左边传感器的电平的关系
   if(((ScanLeft_up()&&Right==HIGH)||(ScanLeft_down()&&Right==LOW))||((ScanRight_up()&&Left==LOW)||(ScanRight_down()&&Left==HIGH)))//正转,向左移动
   {
    int i=40;                   
    while(i>0){
      i--;
      orientations_right();
     }
   }
   else if((((ScanLeft_up()&&Right==LOW)||(ScanLeft_down()&&Right==HIGH))||((ScanRight_up()&&Left==HIGH)||(ScanRight_down()&&Left==LOW))))//反转、螺母往右,纸带右运动
  {
    int i=40;                
    while(i>0){
      i--;
      orientations_left();
     }
   }
}
没有更多推荐了,返回首页