void USART1Write(u8* data,u16 len)
{
	u16 i;
	for (i=0; i<len; i++){
		USART1_SendByte(data[i]);
	}
}	
void USART1SendBuf(u8* data)
{
	u16 i;
	u16 len = strlen((const char *)data);
	for (i=0; i<len; i++){
		USART1_SendByte(data[i]);
	}
}	
Exemple #3
0
void USART1_SendData (unsigned char data[], unsigned char length) {
	
	unsigned char i;
	
	for(i=0; i<length; i++) {
		USART1_SendByte(data[i]);
	}
}
Exemple #4
0
void USART1Write(u8* data,u16 len)
{
	u16 i;
//	DIR485_H ;
	for (i=0; i<len; i++){
		USART1_SendByte(data[i]);
	}
//	Delay10us(1000);
//	DIR485_L;		
}	
Exemple #5
0
void USART1_IRQHandler(void)
{
	u8 c;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
	{ 	
	    c=USART1->DR;
		USART1_SendByte(c); 	    
	} 
	 
}
void uart5_handle(void)
{
  u16 cpsr = __disable_irq();
  if((rx_uart_count > 0 && rx_timeout == 0))
     { 
		if(rx_uart_buf[0] == 'w')
		   write_1page();
		else if(rx_uart_buf[0] == 'g')
		   go_cmd();
		else if(rx_uart_buf[0] == 'r')
		   USART1_SendByte(rx_uart_buf[0]);

        rx_timeout = 20; /// 
        rx_uart_count = 0; ///  

      }
  if(!cpsr)
     __enable_irq();
}
void send(uint8 Data)
{
	USART1_SendByte(Data);
}
Exemple #8
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 Sensors_Poll(void)
{
  /* This function must be call 100 ms periods */
  
//  // check warning level
//  if (sensors.Gas > __flash_data._thesis._data.Gas || 
//      sensors.Lighting > __flash_data._thesis._data.Lighting || 
//        sensors.TempC > __flash_data._thesis._data.TempC)
//  {
//    // turn on buzzer if enable
//    if (__flash_data._thesis._output.Buzzer)
//    {
//      TurnBuzzerOn();
//    }
//    // turn on speaker if enable
//    if (__flash_data._thesis._output.Speaker)
//    {
//      TurnSpeakerOn();
//    }
//    // turn on relay if enable
//    if (__flash_data._thesis._output.Relay)
//    {
//      TurnRelayOn();
//    }
//  }
//  else
//  {
//    // turn off buzzer if enable
//    if (__flash_data._thesis._output.Buzzer)
//    {
//      TurnBuzzerOff();
//    }
//    // turn off speaker if enable
//    if (__flash_data._thesis._output.Speaker)
//    {
//      TurnSpeakerOff();
//    }
//    // turn off relay if enable
//    if (__flash_data._thesis._output.Relay)
//    {
//      TurnRelayOff();
//    }
//  }
  
  // recalculate sensor values
  sensors.Gas = (ADCConvertedValue[0] + ADCConvertedValue[2] + ADCConvertedValue[4])/3;
  sensors.Lighting = (ADCConvertedValue[1] + ADCConvertedValue[3] + ADCConvertedValue[5])/3;
  
#if SENSORS_DEBUG
  if (SS_Debug_delay == 0)
  {
    USART1_SendStr("\nGas Value: ");
    USART1_SendFloat(sensors.Gas);
    USART1_SendStr(" kppm.\n");
    USART1_SendStr("\nLighting Value: ");
    USART1_SendFloat(sensors.Lighting);
    USART1_SendStr(" Lux.\n");
    SS_Debug_delay = 10;
  }
  else
  {
    SS_Debug_delay--;
  }
#endif
  
  switch (OW_CurrState)
  {
  case OneWire_Idle:
    if ( !OneWire_search(addr)) {
#if SENSORS_DEBUG
			USART1_SendStr("\nNo more addresses.\n");
			USART1_SendStr("\n\n");
#endif
			OneWire_reset_search();
      // delay 300 ms before try again
      OW_CurrState = OneWire_Delay;
      OW_NextState = OneWire_Idle;
      OW_Delay = 3;
		}
    else
    {
      OW_CurrState = OneWire_Delay;
      OW_NextState = OneWire_StartConv;
      OW_Delay = 3;
    }
    break;
  case OneWire_Delay:
    if (OW_Delay == 0)
    {
      // switch state
      OW_CurrState = OW_NextState;
    }
    else
    {
      OW_Delay--;
    }
    break;
  case OneWire_StartConv:
#if SENSORS_DEBUG
    USART1_SendStr("ROM =");
    for( i = 0; i < 8; i++) {
      USART1_SendChar(' ');
      USART1_SendByte(addr[i], HEX);
    }
#endif
    
    if (OneWire_crc8(addr, 7) != addr[7]) {
#if SENSORS_DEBUG
      USART1_SendStr("\nCRC is not valid!\n");
#endif
      // goto delay 300ms before switch to idle to find device again
      OW_CurrState = OneWire_Delay;
      OW_NextState = OneWire_Idle;
      OW_Delay = 3;
    }
    
#if SENSORS_DEBUG
    USART1_SendStr("\n\n");
#endif
    
    // the first ROM byte indicates which chip
    switch (addr[0]) {
    case 0x10:
#if SENSORS_DEBUG
      USART1_SendStr("\n  Chip = DS18S20\n");  // or old DS1820
#endif
      type_s = 1;
      break;
    case 0x28:
#if SENSORS_DEBUG
      USART1_SendStr("\n  Chip = DS18B20\n");
#endif
      type_s = 0;
      break;
    case 0x22:
#if SENSORS_DEBUG
      USART1_SendStr("\n  Chip = DS1822\n");
#endif
      type_s = 0;
      break;
    default:
#if SENSORS_DEBUG
      USART1_SendStr("\nDevice is not a DS18x20 family device.\n");
#endif
      
      // goto delay 300ms before switch to idle to find device again
      OW_CurrState = OneWire_Delay;
      OW_NextState = OneWire_Idle;
      OW_Delay = 3;
      break;
    } 
    
    OneWire_reset();
    OneWire_select(addr);
    OneWire_write(0x44, 1);        // start conversion, with parasite power on at the end
    
    // goto delay 1000ms before read data
    OW_CurrState = OneWire_Delay;
    OW_NextState = OneWire_GetValue;
    OW_Delay = 10;
    break;
  case OneWire_GetValue:
    present = OneWire_reset();
    OneWire_select(addr);    
    OneWire_write(0xBE, 0);         // Read Scratchpad
    
#if SENSORS_DEBUG
    USART1_SendStr("  Data = ");
    USART1_SendByte(present, HEX);
    USART1_SendStr(" ");
#endif
    for ( i = 0; i < 9; i++) {           // we need 9 bytes
      data[i] = OneWire_read();
#if SENSORS_DEBUG
      USART1_SendByte(data[i], HEX);
      USART1_SendStr(" ");
#endif
    }
#if SENSORS_DEBUG
    USART1_SendStr(" CRC=");
    USART1_SendByte(OneWire_crc8(data, 8), HEX);
    USART1_SendStr("\n\n");
#endif
    
    // Convert the data to actual temperature
    // because the result is a 16 bit signed integer, it should
    // be stored to an "int16_t" type, which is always 16 bits
    // even when compiled on a 32 bit processor.
    int16_t raw = (data[1] << 8) | data[0];
    if (type_s) {
      raw = raw << 3; // 9 bit resolution default
      if (data[7] == 0x10) {
        // "count remain" gives full 12 bit resolution
        raw = (raw & 0xFFF0) + 12 - data[6];
      }
    } else {
      byte cfg = (data[4] & 0x60);
      // at lower res, the low bits are undefined, so let's zero them
      if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
      else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
      else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
      //// default is 12 bit resolution, 750 ms conversion time
    }
    celsius = (float)raw / 16.0;
    fahrenheit = celsius * 1.8 + 32.0;
#if SENSORS_DEBUG
    USART1_SendStr("  Temperature = ");
    USART1_SendFloat(celsius);
    USART1_SendStr(" Celsius, ");
    USART1_SendFloat(fahrenheit);
    USART1_SendStr(" Fahrenheit\n");
#endif
    sensors.TempC = celsius;
    
    // goto delay 300ms before next convert
    OW_CurrState = OneWire_Delay;
    OW_NextState = OneWire_StartConv;
    OW_Delay = 3;
    break;                   
  } // switch
  
}