Ejemplo n.º 1
0
void Setup (void)
{
	
	Menu_EnableAllItems();
	
	Initial_EEPROM_Config_Load();
	
	//Config.QuadFlyingMode = QuadFlyingMode_PLUS;
	
	RX_Init();
	if ((Config.RX_mode==RX_mode_SingleMode) && (IS_MISC_SENSOR_SONAR_ENABLED==true))
	{
		Ultrasonic_Init();
	}		
	// Motors
	M1_DIR = OUTPUT;
	M2_DIR = OUTPUT;
	M3_DIR = OUTPUT;
	M4_DIR = OUTPUT;
	M1 = 0;
	M2 = 0;
	M3 = 0;
	M4 = 0;
	
	Buzzer_DIR = OUTPUT;
	LED_Orange_DIR = OUTPUT;
	
	
	// Sensors
	V_BAT  = INPUT;
	
	
	
	// Timers
	TCCR1A = 0;	//Set timer 1 to run at 2.5MHz
	TCCR1B = 0;
	TCCR1C = 0;
	
#ifdef TELEMETRY_ENABLED
if (Config.RX_mode==RX_mode_SingleMode)
{
	UART_Init(SERIAL_BAUD_RATE); //57600 = 20   115200=10
}	
#endif



	ADCPort_Init();
	Sensors_Init();
	KeyBoard_Init();
	Timer_Init();
	
	LCD_Init();
	LCD_Clear();
	
	Menu_MenuInit();
	
		
	
	
	sei();
	
	//delay_ms(30);
    
}
Ejemplo n.º 2
0
void main (void) 
{
  int reflection,LDs_count,omron_count,angel;
  int old_fix,fix,left,right;

  unsigned char reflect,status,k;
  char old_flag,flag;
  
  WDTCN = 0xDE;                       // disable watchdog timer
  WDTCN = 0xAD;

  SYSCLK_Init ();                     // Initialize system clock to 16MHz
  ExtCrystalOsc_Init ();              // switch system clock
  Port_Init ();                       // Initialize crossbar and GPIO
  SPI0_Init();
  LED_Init();                         // Initialize OLED
  Sensors_Init();
  Rudder_Init();
  Motor_Init();
  Measurement_Init();
  Test_Helper_Init();

  EA = 1;                             // Enable global interrupts
  CR = 1;                             // start to output PWM
  P31 = 1;

  PUT_LINE("OMRON:",omron_count);
  PUT_LINE("reflection:",reflection);
  PUT_LINE("LDs_count:",LDs_count);
  PUT_LINE("Tunnel1:",tunnel_length[0]);
  PUT_LINE("Tunnel2:",0);
  PUT_LINE("Tunnel3:",0);
  //PUT_LINE("angel:",angel);
  //PUT_LINE("fix:",fix);

  while (1) {                         // Spin forever
    DIRECTION = 0;
    PCA0CPH1 = 0xE0;
    flag = 0;
    while (1) {
      // dectecting
      reflect = get_LD_reflection();

      old_flag = flag;
      flag = 0;

      // conner emergency
      if(reflect < 25){
	if(!LEFT3 && RIGHT3)
	  flag = 1;
	if(!RIGHT3 && LEFT3)
	  flag = -1;
	if(flag)
	  break;
      }

      // go straight forward:
      if(!LEFT1 || !LEFT2 || !LEFT3)
	flag = 1;
      if(!RIGHT1 && LEFT2)
	flag = -1;
      if(!RIGHT2 && LEFT3)
	flag = -1;
      if(!RIGHT3)
	flag = -1;


      k = 7;
      if(reflect > 50){
	k = 10;
      }
      if(reflect > 85){
	if(flag > 0)
	  if(++left > 32766)
	    {
	      left = left - right;
	      right = 0;
	    }
	if(flag < 0)
	  if(++right > 32766)
	    {
	      right = right - left;
	      left = 0;
	    }
	old_fix = fix;
	fix = left - right;
	if(fix > 20)
	  fix = 20;
	if(fix < -20)
	  fix = -20;
	fix = ((fix + RUDDER_FIX) + old_fix)/2;
      }
      //UPDATE_VALUE(5,fix);

      if(MAX_REFLECTION > reflect)
	angel = MAX_REFLECTION - reflect;
      else
	angel = 0;
      angel = flag * k * angel / 10 + fix;
      //UPDATE_VALUE(4,angel);
      set_angel(angel);

      // debug info
      omron_count = Get_OMRON_Count();
      reflection = get_LD_reflection();
      LDs_count = TL1 + LD2_count;
      UPDATE_VALUE(0,omron_count);
      UPDATE_VALUE(1,reflection);
      UPDATE_VALUE(2,LDs_count/3);
      tmp = tunnel_length[1] * 464 / 1683;
      UPDATE_VALUE(3,tmp);
      tmp = tunnel_length[2] * 464 / 1683;
      UPDATE_VALUE(4,tmp);
      tmp = tunnel_length[3] * 464 / 1683;
      UPDATE_VALUE(5,tmp);
    }

    reflect = get_LD_reflection();
    if(reflect < 10){ // 60 degree
      PCA0CPH1 = 0xB8;
      set_angel(flag * 127);
      Clear_OMRON_Count();
      while(omron_count <= 300);
      while(1){
	if(flag > 0 && !LEFT1)	{
	  while(!RIGHT1);
	  break;
	}
	if(flag < 0 && !RIGHT1)	{
	  while(!LEFT1);
	  break;
	}
      }
    }else{
      // 90 degree
      DIRECTION = 1;
      PCA0CPH1 = 0x38;
      Clear_OMRON_Count();
      set_angel(-flag * 127);
      while(1){
	omron_count = Get_OMRON_Count();
	UPDATE_VALUE(0,omron_count);
	if(omron_count >= 410) //1062
	  break;
      }
      DIRECTION = 0;
      PCA0CPH1 = 0xB8;
      //Clear_OMRON_Count();
      set_angel(flag * 127);

      // escape from conner
      while(1){
	if(flag > 0 && !LEFT1){
	  while(!RIGHT1);
	  break;
	}
	if(flag < 0 && !RIGHT1){
	  while(!LEFT1);
	  break;
	} // if
      } // while
    } // if else: 60 or 90 degree
  } // main loop
} // main
Ejemplo n.º 3
0
/*******************************************************************************//**
 * @implements InitComponents
 **********************************************************************************/
RESULT InitComponents(void)
{
	// init guard
	if(Guard_Init()==FAIL)
		return FAIL;
	
	// init utils
	if(Utils_Init()==FAIL)
		return FAIL;
	
	// init MCU
	if(MCU_Init()==FAIL)
		return FAIL;
	
	// init scheduler
	if(Scheduler_Init()==FAIL)
		return FAIL;
	
	// init power management system
	#ifdef USE_PWR
	if(PWR_Init()==FAIL)
		return FAIL;
	#endif
	
	// init timers
	#ifdef USE_TIMERS
	if(Timers_Init()==FAIL)
		return FAIL;
	#endif
	
	// init LEDs
	#ifdef USE_LEDS
	if(LEDs_Init()==FAIL)
		return FAIL;
	#endif
	
	// init buttons
	#ifdef USE_BUTTONS
	if(Buttons_Init()==FAIL)
		return FAIL;
	#endif
	
	// init UART
	#ifdef USE_UART
	if(UART_Init()==FAIL)
		return FAIL;
	#endif
	
	// init SPI
	#ifdef USE_SPI
	if(SPI_Init()==FAIL)
		return FAIL;
	#endif
	
	// init TWI
	#ifdef USE_TWI
	if(TWI_Init()==FAIL)
		return FAIL;
	#endif
	
	// init OWI
	#ifdef USE_OWI
	if(OWI_Init()==FAIL)
		return FAIL;
	#endif
	
	// init other components
	if(InitOther()==FAIL)
		return FAIL;
	
	// init sensors
	#ifdef USE_SENSORS
	if(Sensors_Init()==FAIL)
		return FAIL;
	#endif
	
	// init NWK
	#ifdef USE_NWK
	if(NWKLayer_Init()==FAIL)
		return FAIL;
	#endif
	
	// return success
	return SUCCESS;
}
Ejemplo n.º 4
0
int main()
{
  RCC_ClocksTypeDef RCC_Clocks;
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  
	int rf_len = 0;
  int rs485_len = 0;
#if DEBUG
//  int usart_len = 0;
//	char buff_usart[BUFFER_SIZE];
#endif
	char buff_rf[BUFFER_SIZE];
	char buff_rs485[BUFFER_SIZE];
  
  unsigned int sensors_time_poll = 0;
//  int temp_time_poll = 0;
//  int sms_test_time = 0;
  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_WriteBit(GPIOB, GPIO_Pin_9, Bit_SET); // off
  
	Delay_Init();
  
  Enrf24_init(CE_PIN, CSN_PIN, IRQ_PIN);
	Enrf24_begin(1000000, 0);  // Defaults 1Mbps, channel 0, max TX power
  
  Enrf24_setTXaddress((void*)enrf24_addr);
  Enrf24_setRXaddress((void*)enrf24_addr);
  
  Enrf24_enableRX();  // Start listening
	
#if DEBUG
	USART1_Init(115200);
#endif
	DS1307_Init();
  Sensors_Init();
  RS485_Init(115200);
	sim_hal_init(115200);
  OutputInit();
  
  if (ThesisInit() == THESIS_FLASH_ERROR)
	{
#if DEBUG
		USART1_SendStr("\nFlash write error.\n");
#endif
		TurnBuzzerOn();
		Delay(1000);
	}
  
#if DEBUG
	RCC_GetClocksFreq(&RCC_Clocks);
  USART1_SendStr("System Clock: ");
  USART1_SendNum(RCC_Clocks.SYSCLK_Frequency);
  USART1_SendStr("\r\n");
  
  
  USART1_SendStr("Device ID: ");
  USART1_SendByte(__flash_data.id, HEX);
  USART1_SendStr("\r\n");
  USART1_SendStr("Device Unique Number: ");
  USART1_SendByte(__flash_data.unique_number[0], HEX);
  USART1_SendByte(__flash_data.unique_number[1], HEX);
  USART1_SendByte(__flash_data.unique_number[2], HEX);
  USART1_SendByte(__flash_data.unique_number[3], HEX);
  USART1_SendStr("\r\n");
#endif
  
  
	OneWire_Init();
	for EVER
	{
    if (millis() - sensors_time_poll > 100)
    {
      led_toggle();
      Sensors_Poll();
      sensors_time_poll = millis();
      //      buzzer_toggle();
      //      output_toggle();
      if (millis() > 10000)
      {
        if (sensors.Gas >= GAS_LIMIT)
        {
#if DEBUG
          USART1_SendStr("Gas detected.\r\n");
          USART1_SendStr("Current Gas: ");
          USART1_SendFloat(sensors.Gas);
          USART1_SendStr("Limited Gas: ");
          USART1_SendFloat(GAS_LIMIT);
          USART1_SendStr("\r\n");
#endif
          TurnBuzzerOn();
          TurnSpeakerOn();
          TurnRelayOn();
        }
        else if (sensors.Lighting >= LIGHT_LIMIT)
        {
#if DEBUG
          USART1_SendStr("Light detected.\r\n");
          USART1_SendStr("Current Light: ");
          USART1_SendFloat(sensors.Lighting);
          USART1_SendStr("Limited Light: ");
          USART1_SendFloat(LIGHT_LIMIT);
          USART1_SendStr("\r\n");
#endif
          TurnBuzzerOn();
          TurnSpeakerOn();
          TurnRelayOn();
        }
        else if (sensors.TempC >= TEMPC_LIMIT)
        {
#if DEBUG
          USART1_SendStr("Tempc detected.\r\n");
          USART1_SendStr("Current Tempc: ");
          USART1_SendFloat(sensors.TempC);
          USART1_SendStr("Limited Tempc: ");
          USART1_SendFloat(TEMPC_LIMIT);
          USART1_SendStr("\r\n");
#endif
          TurnBuzzerOn();
          TurnSpeakerOn();
          TurnRelayOn();
        }
        else
        {
          TurnBuzzerOff();
          TurnSpeakerOff();
          TurnRelayOff();
        }
      }
      
      //      Sim900_Process();
    }
    
    //    if (millis() - sms_test_time > 10000)
    //    {
    //      Sim900_SendSMS("Hi kieu", "01677880531");
    //      sms_test_time = millis();
    //    }
    
    //		usart_len = USART1_Available();
    //		
    //		// usart: for test
    //		if (usart_len > 4)
    //		{
    //			int i;
    //			USART1_SendStr("\nUSART1 received packet: \n");
    //			USART1_GetData(buff_usart, usart_len);
    //			for (i = 0; i < usart_len; i++)
    //				USART1_SendByte(buff_usart[i], HEX);
    //			USART1_SendChar('\n');
    //			if (ThesisProcess(buff_usart, usart_len) == THESIS_OK)
    //			{
    //				memset(buff_usart, 0, usart_len);
    //				USART1_Flush();
    //				if (thesis_need_to_send)
    //				{
    //					int i;
    //					USART1_SendStr("\nNeed to send packet: ");
    //					for (i = 0; i < thesis_msg_len; i++)
    //					{
    //						USART1_SendByte(thesis_sent_msg[i], HEX);
    //					}
    //					USART1_SendStr("\nNeed to send packet length: ");
    //					USART1_SendNum(thesis_msg_len);
    //					USART1_SendStr("\n");
    //					thesis_msg_len = 0;
    //					thesis_need_to_send = 0;
    //				}
    //				USART1_SendStr("\nPacket processed.\n"); 
    //			}
    //			else if (thesis_errn == THESIS_FLASH_ERROR)
    //			{
    //				USART1_SendStr("\n");
    //				USART1_SendStr(thesis_err_msg);
    //				USART1_SendStr("\n");
    //				led_toggle();
    //				for(;;);
    //			}
    //			else if (thesis_errn != THESIS_PACKET_NOT_ENOUGH_LENGTH)
    //			{
    //				memset(buff_usart, 0, usart_len);
    //				USART1_Flush();
    //				USART1_SendStr("Packet processing fail.\n");
    //			}
    //			
    //			USART1_SendStr("\n");
    //			USART1_SendStr(thesis_err_msg);
    //			USART1_SendStr("\n");
    //		}
		
    // rf
		if (Enrf24_available(1))
		{
			int i;
			rf_len = Enrf24_read(buff_rf + rf_len, BUFFER_SIZE - 1 - rf_len);
#if DEBUG
			USART1_SendStr("\nRF received packet.\n");
			for (i = 0; i < rf_len; i++)
				USART1_SendByte(buff_rf[i], HEX);
			USART1_SendChar('\n');
#endif
			
			if (ThesisProcess(buff_rf, rf_len) == THESIS_OK)
			{
				memset(buff_rf, 0, rf_len);
        rf_len = 0;
				if (thesis_need_to_send)
				{
					int i;
#if DEBUG
					USART1_SendStr("\nNeed to send packet: ");
					for (i = 0; i < thesis_msg_len; i++)
					{
            //						Enrf24_write(thesis_sent_msg[i]);
						USART1_SendByte(thesis_sent_msg[i], HEX);
					}
#endif
          Enrf24_write_buff(thesis_sent_msg, thesis_msg_len);
          Enrf24_flush();
#if DEBUG
					USART1_SendStr("\nNeed to send packet length: ");
					USART1_SendNum(thesis_msg_len);
					USART1_SendStr("\n");
#endif
					thesis_msg_len = 0;
					thesis_need_to_send = 0;
				}
#if DEBUG
				USART1_SendStr("\nPacket processed.\n");
#endif
			}
			else if (thesis_errn == THESIS_FLASH_ERROR)
			{
#if DEBUG
				USART1_SendStr("\n");
				USART1_SendStr(thesis_err_msg);
				USART1_SendStr("\n");
#endif
				led_toggle();
				for(;;);
			}
			else if (thesis_errn != THESIS_PACKET_NOT_ENOUGH_LENGTH)
			{
				memset(buff_rf, 0, rf_len);
        //				RF_Flush();
        rf_len = 0;
#if DEBUG
				USART1_SendStr("Packet processing fail.\n");
#endif
			}
			
#if DEBUG
			USART1_SendStr("\n");
			USART1_SendStr(thesis_err_msg);
			USART1_SendStr("\n");
#endif
		}
    
    // rs485
		rs485_len = RS485_Available();
		if (rs485_len > 4)
		{
			int i;
			RS485_GetData(buff_rs485, rs485_len);
#if DEBUG
			USART1_SendStr("\nUSART1 received packet: \n");
			for (i = 0; i < rs485_len; i++)
				USART1_SendByte(buff_rs485[i], HEX);
			USART1_SendChar('\n');
#endif
			if (ThesisProcess(buff_rs485, rs485_len) == THESIS_OK)
			{
				memset(buff_rs485, 0, rs485_len);
				RS485_Flush();
				if (thesis_need_to_send)
				{
					int i;
#if DEBUG
					USART1_SendStr("\nNeed to send packet: ");
#endif
          RS485_DIR_Output();
					for (i = 0; i < thesis_msg_len; i++)
					{
						RS485_SendChar(thesis_sent_msg[i]);
#if DEBUG
						USART1_SendByte(thesis_sent_msg[i], HEX);
#endif
					}
          RS485_DIR_Input();
#if DEBUG
					USART1_SendStr("\nNeed to send packet length: ");
					USART1_SendNum(thesis_msg_len);
					USART1_SendStr("\n");
#endif
					thesis_msg_len = 0;
					thesis_need_to_send = 0;
				}
#if DEBUG
				USART1_SendStr("\nPacket processed.\n"); 
#endif
			}
			else if (thesis_errn == THESIS_FLASH_ERROR)
			{
#if DEBUG
				USART1_SendStr("\n");
				USART1_SendStr(thesis_err_msg);
				USART1_SendStr("\n");
#endif
				led_toggle();
				for(;;);
			}
			else if (thesis_errn != THESIS_PACKET_NOT_ENOUGH_LENGTH)
			{
				memset(buff_rs485, 0, rs485_len);
				RS485_Flush();
#if DEBUG
				USART1_SendStr("Packet processing fail.\n");
#endif
			}
			
#if DEBUG
			USART1_SendStr("\n");
			USART1_SendStr(thesis_err_msg);
			USART1_SendStr("\n");
#endif
		}
    
	}
	
}
void Uc1ArmingLoggerExecutionScopePkg_initRelations( void ) {
    Admin_Init(&(itsAdmin), RiCMainTask());
    Driver_Init(&(itsDriver), RiCMainTask());
    Init(&(itsScanner), RiCMainTask());
    Sensors_Init(&(itsSensors), RiCMainTask());
    Uc_Uc1ArmingLogger_Init(&(itsUc_Uc1ArmingLogger), RiCMainTask());
    {
        
        RiCDefaultReactiveOutbound_setItsIRiCReactive(
          &(itsAdmin.pUc_Uc1ArmingLogger.outbound),
          &(itsUc_Uc1ArmingLogger.pAdmin.inbound)
        );
    }{
        
        RiCDefaultReactiveOutbound_setItsIRiCReactive(
          &(itsUc_Uc1ArmingLogger.pAdmin.outbound),
          &(itsAdmin.pUc_Uc1ArmingLogger.inbound)
        );
    }
    {
        
        RiCDefaultReactiveOutbound_setItsIRiCReactive(
          &(itsDriver.pUc_Uc1ArmingLogger.outbound),
          &(itsUc_Uc1ArmingLogger.pDriver.inbound)
        );
    }{
        
        RiCDefaultReactiveOutbound_setItsIRiCReactive(
          &(itsUc_Uc1ArmingLogger.pDriver.outbound),
          &(itsDriver.pUc_Uc1ArmingLogger.inbound)
        );
    }
    {
        
        RiCDefaultReactiveOutbound_setItsIRiCReactive(
          &(itsUc_Uc1ArmingLogger.pScanner.outbound),
          &(itsScanner.pUc_Uc1ArmingLogger.inbound)
        );
    }{
        
        RiCDefaultReactiveOutbound_setItsIRiCReactive(
          &(itsScanner.pUc_Uc1ArmingLogger.outbound),
          &(itsUc_Uc1ArmingLogger.pScanner.inbound)
        );
    }
    {
        
        RiCDefaultReactiveOutbound_setItsIRiCReactive(
          &(itsUc_Uc1ArmingLogger.pSensors.outbound),
          &(itsSensors.pUc_Uc1ArmingLogger.inbound)
        );
    }{
        
        RiCDefaultReactiveOutbound_setItsIRiCReactive(
          &(itsSensors.pUc_Uc1ArmingLogger.outbound),
          &(itsUc_Uc1ArmingLogger.pSensors.inbound)
        );
    }
    
    #ifdef _OMINSTRUMENT
    RenameGlobalInstances();
    #endif /* _OMINSTRUMENT*/
}