极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13639|回复: 3

delay函数的用法

[复制链接]
发表于 2017-8-7 19:18:21 | 显示全部楼层 |阅读模式
怎么让电机反向运行1S之后正向运行呢?
run(0,8*v,2*v,0);
delay(365);
run(3*v,8*v,0,0);

这是我的代码
我加了这个delay之后他只会反向 很奇怪。。。

void run(int a,int b,int c,int d) {
analogWrite(6,a);
analogWrite(9,b);
analogWrite(10,c);
analogWrite(11,d);
}


整个代码:
传感器板子
#include <Wire.h>//声明I2C库文件
#define a0 digitalRead(9)
#define a1 digitalRead(8)
#define a2 digitalRead(7)
#define a3 digitalRead(6)
#define a4 digitalRead(5)
#define a5 digitalRead(4)
#define a6 digitalRead(3)
#define a7 digitalRead(10)
#define a8 digitalRead(17)

#define max0 ((a0>=a1)&&(a0>=a2)&&(a0>=a3)&&(a0>=a4)&&(a0>=a5)&&(a0>=a6)&&(a0>=a7))
#define max1 ((a1>=a2)&&(a1>=a3)&&(a1>=a4)&&(a1>=a5)&&(a1>=a6))
#define max2 ((a2>=a1)&&(a2>=a3)&&(a2>=a4)&&(a2>=a5)&&(a2>=a6))
#define max3 ((a3>=a2)&&(a3>=a1)&&(a3>=a5)&&(a3>=a6)&&(a3>=a4))
#define max4 ((a4>=a2)&&(a4>=a1)&&(a4>=a5)&&(a4>=a6)&&(a4>=a3))
#define max5 ((a5>=a1)&&(a5>=a2)&&(a5>=a3)&&(a5>=a4)&&(a5>=a6))
#define max6 ((a6>=a1)&&(a6>=a2)&&(a6>=a3)&&(a6>=a4)&&(a6>=a5))
#define max7 ((a7>=a0)&&(a7>=a1)&&(a7>=a2)&&(a7>=a3)&&(a7>=a4)&&(a7>=a5)&&(a7>=a6))

void setup()
{
Wire.begin();
Serial.begin(9600);
pinMode(10, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(17,INPUT);
trigger();
}
void loop()
{

Wire.beginTransmission(4); //发送数据到设备号为4的从机

if(max3||max4) //
{
Wire.write(1);
}
else if(max5) //
{
Wire.write(2); //turnR
}
else if(max6||max7) //第三个传感器检测到黑线用150的速度左转
{
Wire.write(3); //turnRR
}
else if(max2) //第五个传感器检测到黑线用150的速度右转
{
Wire.write(4); //turnL
}
else if(max1||max0) //第六个传感器检测到黑线用200的速度右转
{
Wire.write(5); //turnLL
}
Wire.endTransmission();

}

void trigger(void)
{
while(!a8);
delay(100);
while(a8);
delay(100);
}

电机板子:
#include <Wire.h>//声明I2C库文件
#define v 6

void run(int a,int b,int c,int d) {
analogWrite(6,a);
analogWrite(9,b);
analogWrite(10,c);
analogWrite(11,d);
}


void receiveEvent(int howMany)
{
char c=Wire.read();
if(c==1)
{
run(10*v,10*v,0,0);
}
else if(c==2)
{
run(3*v,6*v,0,0);

}
else if(c==3)
{
run(8*v,0,0,2*v);
delay(365);
run(8*v,3*v,0,0);

}
else if(c==4)
{
run(6*v,3*v,0,0);

}
else if(c==5)
{
run(0,8*v,2*v,0);
delay(365);
run(3*v,8*v,0,0);
}
}

void setup()
{
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
Wire.begin(4); // 加入 i2c 总线,设置从机地址为 #4
Wire.onReceive(receiveEvent); //注册接收到主机字符的事件
Serial.begin(9600);
}
void loop()
{

}

两块板子我使用IIC进行交互
传感器
电机

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-8-8 07:44:40 | 显示全部楼层
最好不要用delay()延时,这样会使得整个系统运行时走走停停。建议用Timeone库来做,具体教程看https://immaker.org/thread-101-1-1.html
回复 支持 反对

使用道具 举报

发表于 2017-8-9 18:06:35 | 显示全部楼层
不建议在运动时候用delay函数,可通过对当前时间和预存时间做逻辑判断来控制运行时长。
回复 支持 反对

使用道具 举报

发表于 2017-8-10 11:17:49 | 显示全部楼层
这个板子好熟悉,不过我还没用过这种通信方式,不知道你有没有真正掌握这种方式的用法,给你提供个别人的例子双Arduino主从机之间的I2C总线通讯实验http://blog.sina.com.cn/s/blog_705dc8d40100y2iv.html
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 17:48 , Processed in 0.044313 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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