实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
u8 buf[10]={217,217,00,01,02,03,07,02,231,231};//落下应答 u8 buf1[10]={217,217,00,01,02,03,07,17,231,231};//抬起应答 int C_C[3]; unsigned char C_[26]; int servopin = 8;//设置舵机驱动脚到数字口8 int servopin1 = 9; int servopin2 = 10; int myangle; //定义角度变量 int myangle1; //定义角度变量 int myangle2; //定义角度变量 int pulsewidth;//定义脉宽变量 int pulsewidth1;//定义脉宽变量 int pulsewidth2;//定义脉宽变量 unsigned int S; //距离存储 int trig=3; //发射信号 int echo=2; //接收信号 int val; int val1; int val2; int j=0; //要想使得舵机比较连续的旋转,可以改变方波占空比 void servopulse(int servopin,int myangle)/*定义一个控制一号舵机的脉冲函数,用来模拟方式产生PWM值*/ { pulsewidth=(myangle*11) 500;//将角度转化为500-2480 的脉宽值 digitalWrite(servopin,HIGH);//将舵机接口电平置高 delayMicroseconds(pulsewidth);//延时脉宽值的微秒数 digitalWrite(servopin,LOW);//将舵机接口电平置低 delay(20-pulsewidth/1000);//延时周期内剩余时间,20可以改成4 } void servopulse1(int servopin1,int myangle1)/*定义一个控制2号舵机脉冲函数,用来模拟方式产生PWM值*/ { pulsewidth1=(myangle1*11) 500;//将角度转化为500-2480 的脉宽值 digitalWrite(servopin1,HIGH);//将舵机接口电平置高 delayMicroseconds(pulsewidth1);//延时脉宽值的微秒数 digitalWrite(servopin1,LOW);//将舵机接口电平置低 delay(10);//延时周期内剩余时间 } void servopulse2(int servopin2,int myangle2)/*定义一个控制3号舵机的脉冲函数,用来模拟方式产生PWM值*/ { pulsewidth2=(myangle2*11) 500;//将角度转化为500-2480 的脉宽值 digitalWrite(servopin2,HIGH);//将舵机接口电平置高 delayMicroseconds(pulsewidth2);//延时脉宽值的微秒数 digitalWrite(servopin2,LOW);//将舵机接口电平置低 delay(20-pulsewidth2/1000);//延时周期内剩余时间 } void setup() { pinMode(servopin,OUTPUT);//设定舵机接口为输出接口 pinMode(servopin1,OUTPUT); pinMode(servopin2,OUTPUT); pinMode(trig,OUTPUT); //设置引脚模式 pinMode(echo,INPUT); Serial.begin(9600);//设置波特率为9600 while(Serial.read()>= 0) {} } void loop() { servopulse(servopin,val); servopulse(servopin1,val1); if (Serial.available() > 0) { delay(10); // 等待数据传完 int numdata = Serial.available(); for(int i=0;i<numdata;i ) { C_[i]=Serial.read(); } //for(int i=0;i<numdata;i ) //Serial.println(C_[i]); if(C_[0]==217&C_[8]==231) { if(C_[1]==217&C_[9]==231) { j = 1; //变量用于发送应答的开关条件 for(int i=0;i<3;i ) { C_C[i]=C_[2 4*i]*256*256*256 C_[3 4*i]*256*256 C_[4 4*i]*256 C_[5 4*i]; } C_[0]==0; //帧头帧尾必须清零 C_[1]==0; C_[8]==0; C_[9]==0; } else { for(int i=0;i<numdata;i ) { C_[i]=0; } } } /* else { for(int i=0;i<numdata;i ) { C_[i]=0; }}*/ for(int i=0;i<numdata;i ) Serial.println(C_[i]);//打印数据 Serial.println(numdata); while(Serial.read()>=0) {} //清空串口缓存 } if(C_[7]==17)//落下 { //Serial.println(C_[7]); fun1(); if(j == 1) { j = 0; Serial.write(buf, 10); } } C_[12] ==""; //while(Serial.read()>=0){} //清空串口缓存 range(); //执行测距函数 if(S>23){ fun3();//空函数不写也中 range(); //执行测距函数 } if(S<=23&&S>22){ fun4();//控制一号舵机旋转 range(); //执行测距函数 } if(S<=22) { fun3();//空函数不写也中 range(); //执行测距函数 } if(val1==50) { for(int i=0;i<10;i ) { C_[i]=0; }} if(val==0&val1==0) { for(int i=0;i<10;i ) { C_[i]=0; }} if(C_[7]==1)//抬起 { // Serial.println(C_[7]); fun2(); if(j ==1) { j = 0; Serial.write(buf1, 10); } } C_[12] ==""; if(C_[7] ==0 ) //归0 { // Serial.println(comdata); fun6(); } C_[12] ==""; if(C_[7] ==2 ) //右归位 { //Serial.println(comdata); fun7(); } C_[12] ==""; if(C_[7] ==3) //左转 { //Serial.println(comdata); fun8(); } C_[12] ==""; if(C_[7] ==4 ) //左归位 { //Serial.println(comdata); fun9(); } C_[12] ==""; if(C_[7] ==5 ) //右转 { // Serial.println(comdata); fun10(); } C_[12] =""; //while(Serial.read()>=0){} //清空串口缓存 } void fun1() { /*for(val;val<=15;val =1)//val =3可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin,val);//模拟产生PWM }} for(val;val<=30;val =1)//val =3可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin,val);//模拟产生PWM }}*/ for(val1;val1<=10;val1 =1)//val =5可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin1,val1);//模拟产生PWM }} for(val1;val1<=30;val1 =3)//val =5可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin1,val1);//模拟产生PWM }} for(val1;val1<=50;val1 =5)//val =5可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin1,val1);//模拟产生PWM }} for(val1;val1<=70;val1 =1)//val =5可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin1,val1);//模拟产生PWM }} } void fun2() { /*for(val;val>=0;val-=1)//val-=5可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin,val);//模拟产生PWM }}*/ for(val1;val1>=0;val1-=1) { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin1,val1);//模拟产生PWM }} } void range() { //测距函数 digitalWrite(trig,LOW); //测距 delayMicroseconds(2); //延时2微秒 digitalWrite(trig,HIGH); delayMicroseconds(20); digitalWrite(trig,LOW); int distance = pulseIn(echo,HIGH); //读取高电平时间 distance = distance/58; //按照公式计算 S = distance; //把值赋给S Serial.println(S); //向串口发送S的值,可以在显示器上显示距离 } void fun3() { } void fun4() { for(val;val<=40;val =1)//val =3可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin,val);//模拟产生PWM }} } /*void fun5() { for(int i=0;i<numdata;i ) { C_[i]=0; } }*/ void fun6() { for(val2;val2>=0;val2-=2) { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin2,val2); }} } void fun7() { for(val2;val2<=50;val2 =2)//val =5可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i =1) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin2,val2);//模拟产生PWM }} for(val2;val2<=75;val2 =1)//val =5可以改变舵机转到指定角度的速度 { for(int i=0;i<=5;i =1) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin2,val2);//模拟产生PWM }} } void fun8() { for(val2;val2<=100;val2 =1) { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin2,val2); }} } void fun9() { for(val2;val2>=75;val2-=2) { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin2,val2); }} } void fun10() { for(val2;val2>=50;val2-=1) { for(int i=0;i<=5;i ) //产生PWM个数,等效延时以保证能转到响应角度 { servopulse(servopin2,val2); }} }
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论