2017年山东省机器人比赛 双足竟步 arduino源代码(删去了关键步态程序 gongneng1 和 gongneng2)
来源:互联网 发布:过山车大亨 for mac 编辑:程序博客网 时间:2024/06/05 22:18
/*
write by qingtai jiang leftleg.write(95); leftfoot.write(100); rightleg.write(80); rightfoot.write(64); delay(s); //状态1 初始角度 #define aa 88 //舵机初始角度 左上 舵机 #define bb 89 // 左下 舵机 #define cc 88 //右上 舵机 #define dd 88 // 右下 舵机 调角度 #define aa 88 //舵机初始角度 左上 舵机 #define bb 93 // 左下 舵机 #define cc 88 //右上 舵机 #define dd 88 // 右下 舵机 直 //1斜桶前进修改量 // 稍微偏左 -1直线 #define ql 26 // zhingxing() #define qr 26 #define qj -2 //*/#include <Servo.h>#define bushu 50 //走半圆的步数#define times 2 //斜着过桶转的 次数#define star 5 //开始 和 终点 走的次数#define tt 1 //抬脚的 增加量 总#define guotong 7 //过桶后走的步数#define zhengliang 0 //第二次过桶的增加量#define tong2 0 //第二次过桶转弯的增量#define aa 88 //舵机初始角度 左上 舵机#define bb 93 // 左下 舵机#define cc 88 //右上 舵机#define dd 88 // 右下 舵机#define ss 50 //延迟时间//1斜桶前进修改量 // 稍微偏左 -1直线#define ql 26 // zhingxing()#define qr 26#define qj 0 // //2斜桶前进修改量 // 稍微偏右#define qql 26 // zhingxingy()#define qqr 26#define qqj -2 // //前进 稍微稍微的 偏向左 改了对调#define qszl 26 // zszhixing(); l 30 y 28#define qszr 26#define qszj 0 // //前进 稍微稍微的 偏向右#define qsyl 26 // yszhixing()#define qsyr 26#define qsyj -3 // //=======================================================//小左转#define xzl 38#define xzr 22#define xzj 2//原地左转修改量#define zl 38 // 左边 迈步的数值 #define zr 0 // 右边 迈步的数值 #define zj 0 // j的值越大往左转的厉害// 前进时的左转#define qzl 42#define qzr 5#define qzj 0//========================================================//小右转#define xyl 22#define xyr 36#define xyj -2//原地右转修改量 同上#define yl 0#define yr 38#define yj 0//前进时的右转#define qyl 5#define qyr 42#define qyj 0//=============================================================//定义各端口#define lleg 6 //舵机 端口#define lfoot 5#define rleg 10#define rfoot 11//光电管 端口 // 左侧口#define zg1 2 //光电管 端口#define zg2 3 //左侧 光电管#define zg3 12 //左侧横向 光电管#define yg1 A2 //右侧 光电管#define yg2 A3#define yg3 A1 //右侧横向光电#define zhong1 4 //中间光电管Servo leftleg;//定义舵机Servo leftfoot;Servo rightleg;Servo rightfoot;int y1, y2, y3, z1, z2, z3, zhong;int a, b, c, d, j;int s;float l, r;float count; //记录步数int count1;//过桶延迟int count2; //过通后的 判断int panduan1(); //右侧寻迹函数int panduan2(); //左侧寻迹void zhixingy(); //过桶的直行void zhixing(); //直行void zszhixing(); // 向左稍微直行的 函数void yszhixing(); // 向右稍微直行void xzuozhuan(); // 比上边的稍微大点void xyouzhuan(); //小右转void zuozhuan(); //原地左转void qzuozhuan(); //前进的左转 5void youzhuan(); //原地右转void qyouzhuan(); //前进的右转 5void ok();void gzhixing(); //修改步态 直行void gzzhixing(); //void gxzuozhuan();void gxyouzhuan();void gzuozhuan();void gyouzhuan();void gongneng(int a, int b, int c, int d, int s, float l, float r, int j); //正常步态void gongneng2(int a, int b, int c, int d, int s, float l, float r, int j); // 修改步态void setup(){ pinMode(zg1, INPUT); pinMode(zg2, INPUT); pinMode(zg3, INPUT); pinMode(yg1, INPUT); pinMode(yg2, INPUT); pinMode(yg3, INPUT); pinMode(zhong1, INPUT); leftleg.attach (lleg); leftfoot.attach (lfoot); rightleg.attach (rleg); rightfoot.attach (rfoot);//连接6号端口 leftleg.write (aa);//初始化角度 leftfoot.write (bb); rightleg.write (cc); rightfoot.write (dd); count = 0; count1 = 0; delay(1500);}/*以上内容为初始化*/// 1是黑线 0是白线int panduan1() //---------------------------------------右侧循迹{ y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if ((y1 == 0) && (y2 == 0)) { xyouzhuan(); //中间力度 的右转 } if ((y2 == 0) && (y1 == 1)) { zszhixing(); } if (((y2 == 1) && (y1 == 1)) || (y2 == 1) || ((y2 == 1) && (y1 == 0)) || (zhong == 1)) { qzuozhuan(); } if (z3 == 0) { while (1) { y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); if ((y1 == 0) && (y2 == 0)) { xyouzhuan(); //中间力度 的右转 } if ((y2 == 0) && (y1 == 1)) { zszhixing(); } if (((y2 == 1) && (y1 == 1)) || (y2 == 1) || ((y2 == 1) && (y1 == 0))) { qzuozhuan(); } if (z3 == 1) { while (1) { y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); if ((y1 == 0) && (y2 == 0)) { xyouzhuan(); //中间力度 的右转 } if ((y2 == 0) && (y1 == 1)) { zszhixing(); } if (((y2 == 1) && (y1 == 1)) || (y2 == 1) || ((y2 == 1) && (y1 == 0))) { qzuozhuan(); } count1++; if (count1 > guotong) { break; } } break; } } return 0; } return 1;}// 1是黑线 0是白线int panduan2() //======================================左侧循迹{ y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if ((z1 == 0) && (z2 == 0)) { gxzuozhuan(); } if ((z1 == 1) && (z2 == 0)) { gzzhixing(); } if (((z1 == 0) && (z2 == 1)) || (z2 == 1) || ((z1 == 1) && (z2 == 1)) || (zhong == 1)) { gqyouzhuan(); } count++; if ((y3 == 0) && (count > bushu)) // -------------------- 检测到桶 过桶 { while (1) { y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); if ((z1 == 0) && (z2 == 0)) { gxzuozhuan(); } if ((z1 == 1) && (z2 == 0)) { gzzhixing(); } if (((z1 == 0) && (z2 == 1)) || (z2 == 1) || ((z1 == 1) && (z2 == 1))) { gqyouzhuan(); } y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); if (y3 == 1) { while (1) { y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); if ((z1 == 0) && (z2 == 0)) { gxzuozhuan(); } if ((z1 == 1) && (z2 == 0)) { gzzhixing(); } if (((z1 == 0) && (z2 == 1)) || (z2 == 1) || ((z1 == 1) && (z2 == 1))) { gqyouzhuan(); } count1++; if (count1 > (guotong + zhengliang)) { break; } } break; } } return 0; } return 1;}//------------------------主函数---------------------------------------------------void loop(){ //gxzuozhuan(); // zhixing(); // zhixingy(); //leftleg.write(aa); leftfoot.write(bb); rightleg.write(cc); rightfoot.write(dd); //Serial.print(z3); int i; for (i = 0; i < star; i++) //过黑线 { zhixing(); } ok(); //控制函数}//=================================================================================void ok(){ int qwer = 1, i; count1 = 0; count2 = 0; while (1) //右侧循迹 过一开始的桶 { qwer = panduan1(); if (qwer == 0) { break; } } delay(50); //拐弯 过桶 xzuozhuan(); for (i = 0; i < times; i++) { zuozhuan(); } //===================================== while (1) //斜着过桶 { y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); zhixing(); count2++; y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if (((z1 == 1) || (z2 == 1)) && (count2 < 6)) //保护机制 { while (1) { youzhuan(); y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if ((z1 == 0) && (z2 == 0)) { count2 = 7; break; } } } y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if (( (y2 == 1) || (z1 == 1) || (z2 == 1) || (zhong == 1) || (y1 == 1)) && (count2 > 6)) { while (1) { youzhuan(); y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if ((y1 == 0) && (y2 == 0) && (z1 == 0) && (z2 == 0) && (zhong == 0)) //当都检测不到黑线时 跳出循环 { break; } } break; } } //===================================== qwer = 1; //开始左侧寻迹 count1 = 0; count2 = 0; count = 0; while (1) //左侧 巡线 绕过过第二个桶 { qwer = panduan2(); if (qwer == 0) { break; } } delay(50); xyouzhuan(); for (i = 0; i < times + tong2; i++) { youzhuan(); } count2 = 0; //================================================ while (1) //斜着过桶 { y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); zhixingy(); count2++; y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if ((count2 < 6) && ((y1 == 1) || (y2 == 1))) { while (1) { zuozhuan(); y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); if ((y1 == 0) && (y2 == 0)) { count2 = 7; break; } } } y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if (((y1 == 1) || (y2 == 1) || (z2 == 1) || (z1 == 1) || (zhong == 1)) && (count2 > 5)) { while (1) { zuozhuan(); y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); zhong = digitalRead(zhong1); if ((y1 == 0) && (y2 == 0) && (z1 == 0) && (z2 == 0) && (zhong == 0)) { break; } } break; } } //====================================================== qwer = 1; while (1) { qwer = panduan1(); if (qwer == 0) { break; } } //========================================================= qwer = 1; count1 = 0; count2 = 0; count = 0; qwer = panduan1(); qwer = panduan1(); qwer = 1; while (1) { qwer = panduan1(); y1 = digitalRead(yg1); y2 = digitalRead(yg2); y3 = digitalRead(yg3); z1 = digitalRead(zg1); z2 = digitalRead(zg2); z3 = digitalRead(zg3); if ((z1 == 1) || (z2 == 1)) { break; } } for (i = 0; i < star + 5; i++) //过终点线 { zhixing(); }}void zhixingy(){ a = aa; b = bb; c = cc; d = dd; l = qql; r = qqr; s = ss; j = qqj; gongneng(a, b, c, d, s, l, r, j);}void zszhixing(){ a = aa; b = bb; c = cc; d = dd; l = qszl; r = qszr; s = ss; j = qszj; gongneng(a, b, c, d, s, l, r, j);}void yszhixing(){ a = aa; b = bb; c = cc; d = dd; l = qsyl; r = qsyr; s = ss; j = qsyj; gongneng(a, b, c, d, s, l, r, j);}void zhixing(){ a = aa; b = bb; c = cc; d = dd; l = ql; r = qr; s = ss; j = qj; gongneng(a, b, c, d, s, l, r, j);}void xzuozhuan(){ a = aa; b = bb; c = cc; d = dd; l = xzl; r = xzr; s = ss; j = xzj; gongneng(a, b, c, d, s, l, r, j);}void zuozhuan(){ a = aa; b = bb; c = cc; d = dd; l = zl; r = zr; s = ss; j = zj; gongneng(a, b, c, d, s, l, r, j);}void qzuozhuan(){ a = aa; b = bb; c = cc; d = dd; l = qzl; r = qzr; s = ss; j = qzj; gongneng(a, b, c, d, s, l, r, j);}void youzhuan(){ a = aa; b = bb; c = cc; d = dd; l = yl; r = yr; s = ss; j = yj; gongneng(a, b, c, d, s, l, r, j);}void qyouzhuan(){ a = aa; b = bb; c = cc; d = dd; l = qyl; r = qyr; s = ss; j = qyj; gongneng(a, b, c, d, s, l, r, j);}void xyouzhuan(){ a = aa; b = bb; c = cc; d = dd; l = xyl; r = xyr; s = ss; j = xyj; gongneng(a, b, c, d, s, l, r, j);}void gongneng(int a, int b, int c, int d, int s, float l, float r, int j){ }//=============================================================================================================================================void gzzhixing()//不需要改了 仅为程序命名错误 改右直行{ a = aa; b = bb; c = cc; d = dd; l = qsyl; r = qsyr; s = ss; j = qsyj; gongneng2(a, b, c, d, s, l, r, j);}void gzhixing(){ a = aa; b = bb; c = cc; d = dd; l = ql; r = qr; s = ss; j = qj; gongneng2(a, b, c, d, s, l, r, j);}void gxzuozhuan(){ a = aa; b = bb; c = cc; d = dd; l = xzl; r = xzr; s = ss; j = xzj; gongneng2(a, b, c, d, s, l, r, j);}void gzuozhuan(){ a = aa; b = bb; c = cc; d = dd; l = zl; r = zr; s = ss; j = zj; gongneng2(a, b, c, d, s, l, r, j);}void gqzuozhuan(){ a = aa; b = bb; c = cc; d = dd; l = qzl; r = qzr; s = ss; j = qzj; gongneng2(a, b, c, d, s, l, r, j);}void gyouzhuan(){ a = aa; b = bb; c = cc; d = dd; l = yl; r = yr; s = ss; j = yj; gongneng2(a, b, c, d, s, l, r, j);}void gqyouzhuan(){ a = aa; b = bb; c = cc; d = dd; l = qyl; r = qyr; s = ss; j = qyj; gongneng2(a, b, c, d, s, l, r, j);}void gxyouzhuan(){ a = aa; b = bb; c = cc; d = dd; l = xyl; r = xyr; s = ss; j = xyj; gongneng2(a, b, c, d, s, l, r, j);}void gongneng2(int a, int b, int c, int d, int s, float l, float r, int j){ }
阅读全文
0 0
- 2017年山东省机器人比赛 双足竟步 arduino源代码(删去了关键步态程序 gongneng1 和 gongneng2)
- 2017年山东省双足机器人一等奖(四自由度)arduino源程序+比赛心得
- 步态识别程序
- 要去参加江苏省机器人比赛了
- 利用树莓派和 Arduino开发机器人
- 机器人比赛
- 开发了一个纯粹为了比赛的机器人功能
- arduino程序编译和上传
- 因为一个空格,就注定了结果——第五届山东省ACM程序设计比赛总结
- 步态识别综述(一)
- ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年02月22日更新
- leggedrobotics free gait 足式机器人自由步态 苏黎世机器人系统实验室
- 专访乐聚机器人冷晓琨:步态是人形机器人的核心
- 2017年的数学建模比赛已经结束了
- 删去VC垃圾文件的批处理程序
- 步态能量图的实现(一)
- 步态能量图实现(二)
- 2011年第四届江苏省大学生机器人大赛比赛规则----机器人自主创新设计比赛
- http协议学习-Cookie和Session
- 文章标题
- Neo4j 出现此提示(no changes ,no records)和解决方法
- 判断一个链表是否为回文结构
- MySQL创建联结
- 2017年山东省机器人比赛 双足竟步 arduino源代码(删去了关键步态程序 gongneng1 和 gongneng2)
- Java设计模式(一) 简单工厂模式不简单
- Eigen教程2-Dense
- Python 学习之路 001
- 中国打脸“三大国际信用评级霸权”硝烟再起
- 并发编程修十:阻塞队列
- 洛谷 3932 Chtholly!
- http协议学习-缓存的实现原理
- Angular4-在线竞拍应用-引入第三方的库