详细代码
/**********************************************
捕获步进电机信号控制直流电机
使用Arduino的外部中断
created 2013
by Nille
**********************************************/
int InterruptA = 1; //定义InterruptA 为外部中断1,也就是引脚3
int InterruptB = 0; //定义InterruptB 为外部中断0,也就是引脚2
volatile int state = 0; //定义state用来保存小车左右转的状态,
//1为左转,2为右转
void setup()
{
//2、3脚为外部中断0、1,用来捕获A+、B+上的信号
pinMode(2, INPUT);
pinMode(3, INPUT);
//4、5、6、7用于控制直流电机
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
//9脚用于检测继电器的状态
pinMode(9, INPUT);
// 监视外部中断输入引脚的变化
attachInterrupt(InterruptA, stateInterruptA, FALLING);
attachInterrupt(InterruptB, stateInterruptB, FALLING);
}
void loop()
{
if(digitalRead(2) == LOW || digitalRead(3) == LOW)
{
if(state == 1)
{
//state为1时小车左转
digitalWrite(4,LOW);
digitalWrite(7,HIGH);
analogWrite(5,240);
analogWrite(6,240);
}
else if(state == 2)
{
//state为2时小车右转
digitalWrite(4,HIGH);
digitalWrite(7,LOW);
analogWrite(5,240);
analogWrite(6,240);
}
else
{
//小车停止
analogWrite(5,0);
analogWrite(6,0);
}
}
else
{
state = 0;
//在继电器吸合的情况下
if(digitalRead(9) == 0)
{
//小车前进
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
analogWrite(5,250);
analogWrite(6,250);
}
else
{
//小车停止
analogWrite(5,0);
analogWrite(6,0);
}
}
}
//中断函数stateInterruptA,当A+先收到脉冲则小车左转
void stateInterruptA()
{
if(state == 0)
state = 1;
}
//中断函数stateInterruptB,当B+先收到脉冲则小车左转
void stateInterruptB()
{
if(state == 0)
state = 2;
}
ps:可以在代码中添加一些Serial.println()的语句来查看一下程序在我们控制摄像头时能够做出正确的相应。代码调试完成后,如图下图所示,将Arduino控制板、电机驱动扩展板、稳压扩展板层叠的插在一起固定在小车的后面,前方安装好摄像头。
完成后的Wi-Fi小车上电工作正常后,如图下图所示。Wi-Fi小车的控制与摄像头的控制方式类似,打开电脑浏览器,在地址栏中输入网络摄像头的IP地址进入监控界面,就可以使用界面右侧的按钮来控制这部简易的Wi-Fi小车。另外,我选的这款摄像头还有一个厂家分配的唯一域名,只要在我们的路由器端简单配置就能够实现广域网条件下的小车控制了。
OK,大功告成![返回频道首页]
推荐阅读
pconline万能的网友中自然也不乏高手,单片机全手工版,教程点这里,成品晒单帖点这里。
了解更多网络设备资讯,想分享想吐槽,登陆我们的论坛 http://itbbs.pconline.com.cn/network
热门产品
佳能G15 三星安卓相机 富士X20 海尔超极本X3 宏碁M5 华硕K55
魅族MX2 索尼L36h HTC One HTC One X 华为荣耀四核 三星N719