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]); } }
void USART1_SendData (unsigned char data[], unsigned char length) { unsigned char i; for(i=0; i<length; i++) { USART1_SendByte(data[i]); } }
void USART1Write(u8* data,u16 len) { u16 i; // DIR485_H ; for (i=0; i<len; i++){ USART1_SendByte(data[i]); } // Delay10us(1000); // DIR485_L; }
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); }
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 }