这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
基于PID控制的智能平衡车设计与实现
学长这里给一个题目综合评分(每项满分5分)
选题指导, 项目分享:
https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md
基于涂鸦智能与stm32的物联网温湿度计设计
硬件部分
wifi部分
void wifi_uart_service(void)
{
static unsigned short rx_in = 0;
unsigned short offset = 0;
unsigned short rx_value_len = 0;
while((rx_in < sizeof(wifi_data_process_buf)) && with_data_rxbuff() > 0) {
wifi_data_process_buf[rx_in ++] = take_byte_rxbuff();
}
if(rx_in < PROTOCOL_HEAD)
return;
while((rx_in - offset) >= PROTOCOL_HEAD) {
if(wifi_data_process_buf[offset + HEAD_FIRST] != FRAME_FIRST) {
offset ++;
continue;
}
if(wifi_data_process_buf[offset + HEAD_SECOND] != FRAME_SECOND) {
offset ++;
continue;
}
if(wifi_data_process_buf[offset + PROTOCOL_VERSION] != MCU_RX_VER) {
offset += 2;
continue;
}
rx_value_len = wifi_data_process_buf[offset + LENGTH_HIGH] * 0x100;
rx_value_len += (wifi_data_process_buf[offset + LENGTH_LOW] + PROTOCOL_HEAD);
if(rx_value_len > sizeof(wifi_data_process_buf) + PROTOCOL_HEAD) {
offset += 3;
continue;
}
if((rx_in - offset) < rx_value_len) {
break;
}
//数据接收完成
if(get_check_sum((unsigned char *)wifi_data_process_buf + offset,rx_value_len - 1) != wifi_data_process_buf[offset + rx_value_len - 1]) {
//校验出错
//printf("crc error (crc:0x%X but data:0x%X)\r\n",get_check_sum((unsigned char *)wifi_data_process_buf + offset,rx_value_len - 1),wifi_data_process_buf[offset + rx_value_len - 1]);
offset += 3;
continue;
}
data_handle(offset);
offset += rx_value_len;
}//end while
rx_in -= offset;
if(rx_in > 0) {
my_memcpy((char *)wifi_data_process_buf, (const char *)wifi_data_process_buf + offset, rx_in);
}
}
/**
* @brief 协议串口初始化函数
* @param Null
* @return Null
* @note 在MCU初始化代码中调用该函数
*/
void wifi_protocol_init(void)
{
rx_buf_in = (unsigned char *)wifi_uart_rx_buf;
rx_buf_out = (unsigned char *)wifi_uart_rx_buf;
stop_update_flag = DISABLE;
#ifndef WIFI_CONTROL_SELF_MODE
wifi_work_state = WIFI_SATE_UNKNOW;
#endif
主函数
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
PowerInit(); //外设供电初始化
EXTIX_Init(); //外部中断初始化
if(Check_WKUP()==0)Sys_Enter_Standby(); //不是开机,进入待机模式
LED_Init(); //LED初始化
LED_On(); //LED全亮
wifi_protocol_init(); //协议串口初始化
uart1_init(115200); //串口初始化为115200
uart2_init(115200); //串口初始化为115200
RTC_Init(); //RTC初始化
Adc_Init(); //ADC初始化
SHT30_IIC_Init(); //温湿度传感器“SHT30”初始化
PWM_Init(5000-1, 288-1);//50HZ,即PWM周期为20ms
OLED_Init(); //OLED初始化
TIM2_Int_Init(1000-1, 7200-1); //中断时间为0.1s,在中断中更新OLED显示,读取温湿度传感器等数据
StartUp(); //显示开机界面
delay_ms(1000);
LED_Off();
while(1){
switch (GuiNum){
case FeaSetN:
OledGui_FeaSet(); //设置界面
break;
case GuiTempHum:
OledGui_Temp_Hum(); //温湿度界面
break;
case GuiTime:
OledGui_Time(); //时钟界面
break;
case GuiWeather:
OledGui_Weather(); //天气界面
break;
}
}
}