RoboCup双足竞步交叉足冠军比赛程序
#include /* IO 关联 */
#include /* 中断关联 */
/*#include 中断 becta 关联 */
/* -----全局变数----- */
unsigned int phase = 0; /* 表示方面的变数 (PORTC 操作用途也使用,所以打工尺寸 )*/
unsigned int ServoPos[8] = {94, 91, 95, 95, 98, 98, 94, 94}; /* 表示伺服机制的位置的变数 */
unsigned int HomePos[8] = {94, 91, 95, 95, 98, 98, 94, 94}; /* 首页职位 */
// 32-0°
// 32-0°
// 32-0°
// 32-0°
/*-----mS 间等待的函数-----*/
void wait_ms(int msec)
{
} int count; /* 反复用途计数器变数 (for 句子用使用 )*/ TCCR2 |= (1
/*-----计时器计数器 0(8 bit) 比较匹配中断(伺服机制跳动宽度生成)-----*/
SIGNAL(SIG_OUTPUT_COMPARE0)
{
PORTC &= ~((1
TCCR0 &= ~(1
}
/*-----计时器计数器 1(16 bit) 比较匹配中断(伺服机制跳动周期2.5ms生成,8*2.5=20ms)-----*/
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
PORTC |= (1
TCNT1 = 0x00; /* 计时器计数器1 置0 */
OCR0 = ServoPos[phase]; /* 比较记录器在位置组合 */
TCCR0 |= (1
if (phase > 7)
{
phase = 0; /* 方面超过 7 的话回来到方面 0*/
}
/*-----步行关系-----*/
/*(94-60)*16= 512us=0.512ms*/
/*(94-00)*16=1504us=1.504ms*/
/*(94+60)*16=2496us=2.496ms*/
/*62------> 90°*/
/* 1------>1.5°*/
/*15----->22.5°*/
/*20------> 30°*/
/*30------> 45°*/
void stepditou(void) //行走程序
{ unsigned char i;
for(i=30;i>0;i--)
{
ServoPos[2] = ServoPos[2] + 1;
ServoPos[5] = ServoPos[5] - 1;
wait_ms(10);
}
}
void steptaitou(void)
{ unsigned char i;
for(i=30;i>0;i--)
{
ServoPos[2] = ServoPos[2] - 1;
ServoPos[5] = ServoPos[5] + 1;
wait_ms(10);
}
}
void stepzuodun(void)
{
unsigned char i;
for(i=20;i>0;i--)
{
ServoPos[0] = ServoPos[0] - 1;
ServoPos[1] = ServoPos[1] - 2;
ServoPos[2] = ServoPos[2] + 1;
wait_ms(15); }
}
}
void stepzuoqi(void)
{
unsigned char i;
for(i=20;i>0;i--)
{ ServoPos[0] = ServoPos[0] + 1;
ServoPos[1] = ServoPos[1] + 2;
ServoPos[2] = ServoPos[2] - 1;
wait_ms(15);
}
}
void stepyoudun(void)
{
unsigned char i;
for(i=20;i>0;i--)
{
ServoPos[3] = ServoPos[3] + 1;
ServoPos[4] = ServoPos[4] + 2;
ServoPos[5] = ServoPos[5] - 1;
wait_ms(15);
}
}
void stepyouqi(void)
{
unsigned char i;
for(i=20;i>0;i--)
{
ServoPos[3] = ServoPos[3] - 1;
ServoPos[4] = ServoPos[4] - 2;
ServoPos[5] = ServoPos[5] + 1;
wait_ms(15);
}
}
void stepzuomai(void)
{
unsigned char i;
for(i=13;i>0;i--)
{
ServoPos[0] = ServoPos[0] + 1;
ServoPos[2] = ServoPos[2] + 1;
ServoPos[3] = ServoPos[3] + 1;
ServoPos[5] = ServoPos[5] + 1;
wait_ms(35);
}
}
void stepyoumai(void)
{
unsigned char i;
for(i=13;i>0;i--)
{
ServoPos[0] = ServoPos[0] - 1;
ServoPos[2] = ServoPos[2] - 1;
ServoPos[3] = ServoPos[3] - 1;
ServoPos[5] = ServoPos[5] - 1;
wait_ms(35);
}
}
void step4(void) // 前翻
{
unsigned char i;
for(i=58;i>0;i--)
{
ServoPos[2] = ServoPos[2] + 1;
ServoPos[5] = ServoPos[5] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[1] = ServoPos[1] + 1;
ServoPos[4] = ServoPos[4] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[2] = ServoPos[2] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[1] = ServoPos[1] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[1] = ServoPos[1] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[2] = ServoPos[2] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[5] = ServoPos[5] + 1;
wait_ms(10);
}
for(i=58;i>0;i--)
{
ServoPos[4] = ServoPos[4] + 1;
}
for(i=58;i>0;i--)
{
ServoPos[4] = ServoPos[4] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[5] = ServoPos[5] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[4] = ServoPos[4] - 1;
ServoPos[1] = ServoPos[1] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[2] = ServoPos[2] + 1;
ServoPos[5] = ServoPos[5] - 1;
wait_ms(15);
}
}
void step5(void) //后翻
{
unsigned char i;
for(i=58;i>0;i--)
{
ServoPos[2] = ServoPos[2] - 1;
ServoPos[5] = ServoPos[5] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[1] = ServoPos[1] - 1;
ServoPos[4] = ServoPos[4] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[5] = ServoPos[5] - 1;
}
for(i=58;i>0;i--)
{
ServoPos[4] = ServoPos[4] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[4] = ServoPos[4] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[5] = ServoPos[5] - 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[2] = ServoPos[2] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[1] = ServoPos[1] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[1] = ServoPos[1] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[2] = ServoPos[2] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
{
ServoPos[1] = ServoPos[1] - 1;
ServoPos[4] = ServoPos[4] + 1;
wait_ms(15);
}
for(i=58;i>0;i--)
}
{ ServoPos[2] = ServoPos[2] - 1; ServoPos[5] = ServoPos[5] + 1; wait_ms(15); }
/* -----将伺服机制去到首页职位----- */
void homeP(void)
{
ServoPos[0] = HomePos[0];
ServoPos[1] = HomePos[1];
ServoPos[2] = HomePos[2];
ServoPos[3] = HomePos[3];
ServoPos[4] = HomePos[4];
ServoPos[5] = HomePos[5];
ServoPos[6] = HomePos[6];
ServoPos[7] = HomePos[7];
}
int main(void)
{
unsigned char i=1;
/* PC 0 端子的设定 */
DDRC |= (1
PORTC &= ~((1
/* 计时器计数器 1 的设定 */
TIMSK |= (1
TCCR1A |= (1
/* 计时器计数器 0 的设定 */
TIMSK |= (1
SREG |= (1
TCCR1B |= (1
wait_ms(1000);
//stepditou();
stepzuodun();
stepzuomai();
stepzuoqi();
stepyoudun();
stepyoumai(); stepyouqi(); while(1) {
stepzuodun(); stepzuomai(); stepzuomai(); stepzuoqi(); stepyoudun(); stepyoumai(); stepyoumai(); stepyouqi(); //steptaitou(); }
wait_ms(500); i=3;
while(i--) {
step4(); }
homeP(); wait_ms(500); stepditou(); stepzuodun(); stepzuomai(); stepzuoqi(); stepyoudun(); stepyoumai(); stepyoumai(); stepyouqi(); stepzuodun(); stepzuomai(); stepzuomai(); stepzuoqi(); stepyoudun(); stepyoumai(); stepyouqi(); steptaitou(); wait_ms(500); i=3;
while(i--) { //前翻跟头//后翻跟头
}
homeP(); wait_ms(1000); stepditou(); stepzuodun(); stepzuomai(); stepzuoqi(); while(1)
{ stepyoudun(); stepyoumai(); stepyoumai(); stepyouqi(); stepzuodun(); stepzuomai(); stepzuomai(); stepzuoqi();
}
}