该智能水杯控制系统是由 STM32 单片机作为主要控制芯片,接受和发送信号给温度传感器,进行温度检测;温度检测是由温度传感器来执行,实时采集水杯内液体温度并利用 LCD 屏显示; 电池检测由电池电压指示电路进行操控, 实时检测电池电量, 并通过 LED 灯进行提示;内置充电电池充电可提供无线和 USB接口充电方式;控温及发热系统由 PTC 发热体构成, 并利用闭环控制使水杯液体温度恒温;利用无线模块,接收来自手机App所发出的指令, 通过手机App与水杯进行匹配进行加热操作,并反馈水杯的使用状态
系统设计
写个例子
#include "stm32f4xx_hal.h"
#define LED_PIN_1 GPIO_PIN_0
#define LED_PIN_2 GPIO_PIN_1
#define LED_PIN_3 GPIO_PIN_2
#define LED_PIN_4 GPIO_PIN_3
#define LED_PORT GPIOD
void Delay(uint32_t ms) {
HAL_Delay(ms);
}
void LED_On(uint16_t pin) {
HAL_GPIO_WritePin(LED_PORT, pin, GPIO_PIN_SET);
}
void LED_Off(uint16_t pin) {
HAL_GPIO_WritePin(LED_PORT, pin, GPIO_PIN_RESET);
}
void LED_Toggle(uint16_t pin) {
HAL_GPIO_TogglePin(LED_PORT, pin);
}
void LED_AllOff() {
LED_Off(LED_PIN_1);
LED_Off(LED_PIN_2);
LED_Off(LED_PIN_3);
LED_Off(LED_PIN_4);
}
void FlowingPattern1() {
for (int i = 0; i < 4; i++) {
LED_On(LED_PIN_1 << i);
Delay(200);
LED_Off(LED_PIN_1 << i);
}
}
void FlowingPattern2() {
for (int i = 0; i < 4; i++) {
LED_On(LED_PIN_4 >> i);
Delay(200);
LED_Off(LED_PIN_4 >> i);
}
}
void FlowingPattern3() {
for (int i = 0; i < 4; i++) {
LED_Toggle(LED_PIN_1 << i);
Delay(200);
}
LED_AllOff();
}
void FlowingPattern4() {
for (int i = 0; i < 4; i++) {
LED_Toggle(LED_PIN_4 >> i);
Delay(200);
}
LED_AllOff();
}
void FlowingPattern5() {
for (int i = 0; i < 4; i++) {
LED_Toggle(LED_PIN_1 << i);
Delay(200);
}
for (int i = 3; i >= 0; i--) {
LED_Toggle(LED_PIN_1 << i);
Delay(200);
}
LED_AllOff();
}
void FlowingPattern6() {
for (int i = 0; i < 4; i++) {
LED_Toggle(LED_PIN_4 >> i);
Delay(200);
}
for (int i = 3; i >= 0; i--) {
LED_Toggle(LED_PIN_4 >> i);
Delay(200);
}
LED_AllOff();
}
int main(void) {
HAL_Init();
__HAL_RCC_GPIOD_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = LED_PIN_1 | LED_PIN_2 | LED_PIN_3 | LED_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
while (1) {
FlowingPattern1();
FlowingPattern2();
FlowingPattern3();
FlowingPattern4();
FlowingPattern5();
FlowingPattern6();
}
}