完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 ylylyl007 于 2012-2-5 15:14 编辑
用两个电位器与一对无线传输模块,完成遥控小车制作。 电位器产生控制电压,由串口无线模块发出。当电压为2至3V时,小车停止,大于3V小车前进,小于2伏小车后退,运算方法在下篇发出。 遥控部分,用两只电位器,一片ARDUINO int a; int b; void setup() { Serial.begin(14400);//因采用无线串口传输,可以将速度设高些 pinMode(3,INPUT);//用这 两个口子,对控制电位器电压采样 pinMode(4,INPUT);// } void loop(){ a=analogRead(3);//读左边电位器电压, delay(1); Serial.print(a);//将这个数据通过无线串口发出去。 delay(1); Serial.print('R');//发完后发出一个标志字符‘R’,表示这个数据属于R轮 delay(10);//留下足够的时间给串口通讯,L通道与上同, b=analogRead(4); delay(1); Serial.print(b); delay(1); Serial.print('L'); // Serial.print('n'); delay(10); } 车子部分:串口通讯的问题在于收到的数据全是字符,所以要将字符转换为数据,C语言里有字符转换函数,这里采用了arduino里的函数,并参考了arduino自带例程。 String inString = ""; int R,L; int t; int h; int flag; int flagl; int speedpinR=11; //用脉宽调制11脚与9脚作速度控制 int speedpinL=9; int pinI1=5;//5,6,7,8,用作电机的前进后退停止状态控制。 int pinI2=6; int pinI3=7; int pinI4=8; void setup() { Serial.begin(14400);//与遥控端速度要匹配 pinMode(9, OUTPUT); pinMode(11, OUTPUT); pinMode(pinI1,OUTPUT); pinMode(pinI2,OUTPUT); pinMode(pinI3,OUTPUT); pinMode(pinI4,OUTPUT); //pinMode(13,OUTPUT); pinMode(2,OUTPUT); pinMode(3,OUTPUT); } void loop() { int inChar; if (Serial.available() > 0) { inChar = Serial.read(); } if (isDigit(inChar)) { inString += (char)inChar; } if (inChar== 'R') { R = inString.toInt();//收到R标志,将收到的数据字符串转为INT型,并赋与R, inString = ""; } if (inChar== 'L'){ L = inString.toInt();//收到L标志,则赋于L。 inString = ""; } //analogWrite(11, L/4); //analogWrite(9, R/4); //RIGHT //R go back if(0<=R&&R<412) {//遥控端读出的数据<412,车子倒退,倒退速度与R值成反比,用mqp()函数进行转换 digitalWrite(pinI1,HIGH); digitalWrite(pinI2,LOW); flag=map(R,412,0,1,255); } //R stop if(412<=R&&R<=612){ //读数在412与612之间,停车 digitalWrite(pinI2,HIGH); digitalWrite(pinI1,HIGH); flag=0; } //R go straight if(612 flag=map(R,612,1023,1,255); digitalWrite(pinI2,HIGH); digitalWrite(pinI1,LOW); } //LRFT //L go back if(0<=L&&L<412) { flagl=map(L,412,0,1,255); digitalWrite(pinI3,HIGH); digitalWrite(pinI4,LOW); } //L stop if(412<=L&&L<=612){ digitalWrite(pinI3,HIGH); digitalWrite(pinI4,HIGH); flagl=0; } //L go straight if(612 digitalWrite(pinI4,HIGH); digitalWrite(pinI3,LOW); flagl=map(L,612,1023,1,255); } //Serial.println(L); //Serial.println(flagl); analogWrite(speedpinR,flag);//将速度控制值写入电机驱动模块的使能脚,实现电机速度控制 analogWrite(speedpinL,flagl); } |
|
相关推荐
7 个讨论
|
|
我做的是2个电位器的红外遥控,现在就是在编码发送的时候遇到困难了。求指导啊。
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
4843 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7514 浏览 0 评论
2836 浏览 2 评论
2972 浏览 1 评论
9757 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-10 19:15 , Processed in 0.650500 second(s), Total 68, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号