コード例 #1
0
ファイル: m88.c プロジェクト: IlyaPetrovM/sumo
void main(void)
{
  BYTE re1, re2;
  BYTE a1, a2, a3, a4, a5, a6;
  
  M48Init();
        
  printf("\r\nM88PA demo\r\n");

  pip();

#define T 1000
PORTB.1 = 1;
PORTB.2 = 1;

  robotStop();

  goFwd();
  delay_ms(T);

  goBack();
  delay_ms(T);

  goLeft();
  delay_ms(T);

  goRight();
  delay_ms(T);
 
  robotStop();
 
  pip();
  
  while (1)
  { //char c;
    //c = getchar();
    //printf("[%c] %3d\r\n",c, (int)c);
    
    re1 = ReadByteADC(ADC_E1);
    re2 = ReadByteADC(ADC_E2);

    a1 = ReadByteADC(ADC_1);
    a2 = ReadByteADC(ADC_2);
    a3 = ReadByteADC(ADC_3);
    a4 = ReadByteADC(ADC_4);
    a5 = ReadByteADC(ADC_5);
    a6 = ReadByteADC(ADC_6);
    
    delay_ms(20);
    
    printf("%4u %4u   %4u %4u %4u %4u %4u %4u\r", re1, re2, a1, a2, a3, a4, a5, a6);
  }
}
コード例 #2
0
ファイル: object.cpp プロジェクト: onlyuser/Legacy
void object::update()
{
	long i;
	float *tempA;

	/* waypoint */
	if (mTarget != NULL)
	{
		tempA = new float[3];
		vectorSub(tempA, mTarget, mOrigin);
		angleFromVector(tempA, tempA);
		vectorWrap(tempA, tempA, 0, PI * 2);
		vectorSub(tempA, tempA, mAngle);
		for (i = 0; i < 3; i++)
		{
			if (fabs(tempA[i]) > PI)
				tempA[i] *= -1;
			if (tempA[i] != 0)
				mAngVel[i] = (float) fabs(mAngVel[i]) * sgn(tempA[i]);
		}
		delete []tempA;
	}

	/* velocity */
	if (vectorDirty(mPosAcc) || vectorDirty(mAngAcc))
	{
		vectorAdd(mPosVel, mPosVel, mPosAcc);
		vectorAdd(mAngVel, mAngVel, mAngAcc);
		vectorLock(mPosVel, mPosVel, -mMovSpdMax, mMovSpdMax);
		vectorLock(mAngVel, mAngVel, -mRotSpdMax, mRotSpdMax);
	}

	/* position */
	if (vectorDirty(mPosVel) || vectorDirty(mAngVel))
	{
		if (mStyle == 0)
			vectorAdd(mOrigin, mOrigin, mPosVel);
		else
			goFwd(mPosVel[2]);
		vectorAdd(mAngle, mAngle, mAngVel);
		vectorLock(mOrigin, mOrigin, -BIG_NUMBER, BIG_NUMBER);
		vectorWrap(mAngle, mAngle, 0, PI * 2);
		vectorLock(mScale, mScale, 0, BIG_NUMBER);
		buildTrans();
	}

	/* particle */
	if (mTicks > 0)
		mTicks--;
}
コード例 #3
0
ファイル: sumo88.c プロジェクト: IlyaPetrovM/sumo
void DebugProc(void)
{
  BYTE re1, re2;
  BYTE a1, a2, a3, a4, a5, a6;
  
  printf("\r\nTEST REGIME\r\n");

  // Отладочные телодвижения 
  // (проверка правильности подключения двигателей: вперед, назад, влево, вправо)
  #define Time 500
  goFwd(); delay_ms(Time);
  goBack(); delay_ms(Time);
  goLeft(); delay_ms(Time);
  goRight(); delay_ms(Time); 
  robotStop(); 
  pip();
  
  goFastLeft(); delay_ms(Time);
  goFastRight(); delay_ms(Time); 
  robotStop(); 
  pip();

  while (1)
  {   
    re1 = ReadByteADC(ADC_E1);
    re2 = ReadByteADC(ADC_E2);

    a1 = ReadByteADC(ADC_1);
    a2 = ReadByteADC(ADC_2);
    a3 = ReadByteADC(ADC_3);
    a4 = ReadByteADC(ADC_4);
    a5 = ReadByteADC(ADC_5);
    a6 = ReadByteADC(ADC_6);
    
    delay_ms(20);
    
    printf("(%4u %4u) (%4u %4u) %4u %4u %4u %4u\r", re1, re2, a1, a2, a3, a4, a5, a6);
  }
}
コード例 #4
0
ファイル: sumo88.c プロジェクト: IlyaPetrovM/sumo
void main(void)
{
  int T;  // Счетчик тактов для смены тактики поиска
  int a;  // Куда крутиться, 0 - влево, 1 - вправо, 2 - вперёд
  BYTE cntOtval = 0; // Счетчик числа импульсов для опускания отвала
  
  // Инициализация контроллера
  M48Init();
  
  // Port C initialization
  // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
  // State6=T State5=P State4=P State3=P State2=P State1=T State0=T 
  PORTC=0x3C;
  DDRC=0x00;

  // Переопределяем ef_2 (D.4) как цифровой подтянутый вход
  // Port D initialization
  // Func7=Out Func6=Out Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In 
  // State7=0 State6=0 State5=0 State4=P State3=0 State2=0 State1=T State0=T 
  PORTD=0x10;
  DDRD=0xEC;

  
  // Скроостью управлять не будем. Выставляем по максиммуму
  PORTB.1 = 1;
  PORTB.2 = 1;
 
  robotStop();

  pip();
  printf("\r\nSumo 88 RK-25/26MS Version 1.05\r\n\r\n");

  //--------------------------------------------------------
  // Переход в отладочный режим
  // Для перехода в отладочный режим необходимо, чтоб перед включением датчики 
  // границы находились на светлом фоне
  //--------------------------------------------------------
  FotoL = ReadByteADC(6)>LimLeft;
  FotoR = ReadByteADC(7)>LimRight;
  if(FotoL && FotoR)
    DebugProc();
 
  robotStop();
   
  //--------------------------------------------------------
  // Ожидание сигнала START
  //--------------------------------------------------------
  while(SENSOR_START==0);

/***    
  // Выдача управляющах импульсов на сервомашинку, для опускания отвала
  // Изображаем управляющий ШИМ
  // Это займет около 10*(18+0.9) = 189 мс.
  for(n=0;n<MAX_CNT_OTVAL;n++)
  {
    ef_1 = 0;
    delay_us(18000); // Период импульсов. Вообще должно быть так: 20000 - <ширина импульса> = 20000-900 = 19100

    ef_1 = 1;
    delay_us(900); // Ширина импульса 900 мкс (0.9 мс) - крайнее положение
  }
***/
  ef_1 = 0;
  T = 0;
  a = 0;
        
  //--------------------------------------------------------
  // Основной цикл
  //--------------------------------------------------------
  while (1)
  {
    //------------------------------------------------------
    // Опускаем отвал на ходу
    //------------------------------------------------------
  
    if(cntOtval<MAX_CNT_OTVAL)
    {
      cntOtval++;
      //Выдаем импульс (с задержками)
      delay_us(18000); // Период импульсов. Вообще должно быть так: 20000 - <ширина импульса> = 20000-900 = 19100
      ef_1 = 1;
      delay_us(900); // Ширина импульса 900 мкс (0.9 мс) - крайнее положение
      ef_1 = 0;      
    }   
    // Реакция на сигнал СТОП
    if(SENSOR_START==0)
    {
      robotStop();
      pip();
      while(1);
    }
  
    // Считываем сигналы датчиков    
    SharpSL = (sen_3==0);
    SharpSR = (sen_4==0);
    SharpFL = (sen_5==0);
    SharpFR = (sen_6==0);
    
    FotoL = ReadByteADC(6)>LimLeft;
    FotoR = ReadByteADC(7)>LimRight;
    
    //------------------------------------------------------
    // Безусловные рефлексы
    // Сначала и идет обработка самых приоритетных сигналов
    //------------------------------------------------------
    // Реакция на границу поля
    
    if(FotoL)
    {
      // Отъезжаем назад
      goBack();
      delay_ms(100);
      // Начинаем крутиться
      goRight();
      T = 0;
      continue;
    }
    if(FotoR)
    {
      // Отъезжаем назад
      goBack();
      delay_ms(100);
      // Начинаем крутиться
      goLeft();
      T = 0;
      continue;
    }
    //------------------------------------------------------
    // Общие действия
    // Обнаружение противника передними датчиками
    //------------------------------------------------------
    if(SharpFL&&SharpFR)
    {
      goFwd();
      T = 0;
      continue;
    }
    if(SharpFL||SharpSL)
    {
      goLeft();
      T = 0;
      a = 0;
      continue;
    }                 
    if(SharpFR||SharpSR)
    {
      goRight();
      T = 0;
      a = 1;
      continue;
    }
    //------------------------------------------------------
    // Никого не обнаружили
    // Поиск противника
    //------------------------------------------------------
    if(a==0) goLeft();
    if(a==1) goRight();
    if(a==2) goFwd();
    
    T=T+1;
    if(T>MAXT) // Пора менять тактику
    {
      //pip();
      T=0;
      // Выбираем действие "случайным" образом
      a=rand()%3;  // Остаток от деления на 3 (деление по модулю 3)
    }    
  }
}