Beispiel #1
0
// регистрация в Интернет посредством GPRS
Status On_GPRS(uint32_t timeout) {
  Timer1_Start(timeout);
  while(!Timer1_Status()) {
    modem_QISTAT();
    switch (qistat) {
    case IP_INITIAL:
      modem_QIREGAPP(OFF);   // регистрируем подключение GPRS
      break;
    case IP_START:
      modem_QIACT();      // регистрируемся в сети
    case IP_CONFIG:
    case IP_GPRSACT:
      modem_QILOCIP();    // Запрашиваем локальный IP адрес
      break;
    case IP_STATUS:
    case IP_CONNECTING:
    case IP_CLOSE:
    case CONNECT_OK:
         Timer1_Stop();
         return SUCCESS;
    case IP_IND:
      break;
    case PDP_DEACT:
    default:
      modem_QIDEACT();
    }
  } // End while
  Timer1_Stop();
  return ERROR;
}
Beispiel #2
0
Status Server_Send(char *output, uint32_t len, uint32_t time) {
  // Вывод данных из буфера output длиной len за время time
  uint32_t count = 0;
  uint32_t pktlen;

  if (!connect) return ERROR; // Пропал коннект, ничего не делаем

  modem_QISDE(OFF);   // Отключим эхо при выводе
  Timer1_Start(time);
  while(!Timer1_Status() && len) {
    if (len > 1460) {
      pktlen = 1460;
    } else pktlen = len;
    modem_QISEND(output, pktlen);
    if (!connect) return ERROR;   // В процессе передачи связь разорвалась
    if (mdm_err) break;
    if (send_ok == 1) {
      len -= pktlen;
      output += pktlen;
    }
  }
  Timer1_Stop();
  if (len) return ERROR;
  
  return SUCCESS;
}
Beispiel #3
0
// ============================= Отправляет команду на СП из буфера rd_UART и читает ответ в wr_UART ============================================= //
Status SendRcvdCmd()
{
  uint8_t length;
  uint16_t delay = 100;
  unsigned char *p_Out = &data_wr_UART[0];
  Timer1_Start(2500);      
  
  //-----------очистка буфера от мусора(заполнение нулями)
  memset(data_wr_UART,0,255);
  
  CS_Force(0);                  //активируем SS
  if(WAIT)                      //если перепад при неактивном WAIT
  {
    CS_Force(1);                //сбрасываем SS
    while(WAIT);                //ждем перепада WAIT в активное состояние
    CS_Force(0);                //снова активируем SS
  }           
  
  //------------отправка команды
  for(length=0;length<UART_RCV_COUNT;length++)
  {
     delay = 50;
     while(delay--);
     SPY_Byte(data_rd_UART[length]);
  }
    
  CS_Force(1); 
  Timer1_Stop();
  while(!WAIT);  //ждем перепада в 1

  while(WAIT);   //ждем готовности(перепада в 0) 
  Timer1_Start(2500); 
  CS_Force(0);

  //-------------получение ответа
  SPY_Byte(0);//отправка лишнего байта чтобы избавиться от мусора(остатка последней команды)
  for(length=1;length<255;length++)
  {
     *p_Out++ = SPY_Byte(length);
     delay = 50;
     while(delay--);
     if(WAIT) break;    //если придет WAIT==1, значит пора прекратить прием данных
  }
  CS_Force(1);

  return SUCCESS;
}
Beispiel #4
0
// Ожидание очистки выходного буфера
Status Server_Flush(uint32_t time) {
  Timer1_Start(time);
  while (!Timer1_Status()) {
    modem_QISACK(0);
    if (qi_sent == qi_acked) break;
  }
  Timer1_Stop();
  if (qi_sent == qi_acked) return SUCCESS;
  return ERROR;
}
Beispiel #5
0
// Ожидание прихода данных в течении времени time. Если данные пришли - SUCCESS
Status Server_Receive(uint32_t time) {

  uint32_t len = 0;

  Timer1_Start(time);
  while(!Timer1_Status()) {
      while (GetAnswer(answer)) {
        Parse_Ans(answer);
      }
      if (!connect) return ERROR; // Пропал коннект, ничего не делаем
      if (qirdi) {
        do {
          len = input_len;
          modem_QIRD(RING_SIZE - input_len); // Чтобы случайно из буфера не выйти
        } while (len != input_len);
        if (input_len > 5) break;
      }
    }
    Timer1_Stop();
  if (len != input_len) return ERROR;
  return SUCCESS;
}
Beispiel #6
0
void main(void)
{
	// Enable Global Interrupt   
	M8C_EnableGInt;

	// Clear the flags
	FlagsElevator = 0;
	FlagsAileron = 0;// new for motorcontroll2
	FlagUltrasoon = 0;

	// Start timers and enable interrupt
	Timer1_Start();
	Timer1_EnableInt();

	Timer2_Start();// new for motorcontroll2
	Timer2_EnableInt();// new for motorcontroll2

	Timer3_Start();
	Timer3_EnableInt();
   
	TriggerUltrasoon();	

	// Init motors
	PWM1_Start();
	PWM2_Start();

#if (DEBUG_LCD)
	LCD_Start();
#endif  
	
	while (TRUE)
	{
		float aileronNormalized,
			  elevatorNormalized;
		float distance;
		float speed, direction;
		float motorLeft, motorRight;
		BOOL forward;
		
		aileronNormalized = EvaluateAileron(PulseWidthAileron);
		direction  = fabs(aileronNormalized);

		elevatorNormalized = EvaluateElevator(PulseWidthElevator);
		speed  = fabs(elevatorNormalized);
		forward = (elevatorNormalized >= 0);
		
		distance = EvaluateUltrasoonSensor();
		if (distance < MIN_SAFE_DISTANCE)
		{
			if (forward)
				speed = 0;
		}
		
		motorLeft  = speed; // default is straight forward
		motorRight = speed;
		
		if (aileronNormalized < 0) // turning left
		{
			motorRight = speed;
			motorLeft  = speed * (1 - direction);
		}
		else if (aileronNormalized > 0) // turning right
		{
			motorLeft  = speed;
			motorRight = speed * (1 - direction);
		}
				
		if (forward)
		{
			// ccw
			PRT1DR |=  0x08; // AIN1
			PRT1DR &= ~0x02; // AIN2
			
			PRT1DR |=  0x20; // BIN1
			PRT1DR &= ~0x80; // BIN2
		}
		else 
		{
			//cw
			PRT1DR &= ~0x08; // AIN1
			PRT1DR |=  0x02; // AIN2
			
			PRT1DR &= ~0x20; // BIN1
			PRT1DR |=  0x80; // BIN2
		}
	
		// Denormalize to Engine
		motorLeft *= (MAX_POWER - MIN_POWER);
		motorLeft += MIN_POWER;
		motorRight *= (MAX_POWER - MIN_POWER);
		motorRight += MIN_POWER;

		PWM1_WritePulseWidth(motorLeft);
		PWM2_WritePulseWidth(motorRight);

#if (DEBUG_LCD)
		LCD_Position(0,7);
		LCD_PrHexInt(motorLeft);
		LCD_Position(1,7);
		LCD_PrHexInt(motorRight);
		
		LCD_Position(0,12);
		LCD_PrCString(forward ? "F" : "B");
#endif 	

   }
}