buzzer is working
This commit is contained in:
@ -7,6 +7,72 @@
|
||||
|
||||
|
||||
#include "stm32f1xx_hal.h"
|
||||
#include <PontCoopScheduler.h>
|
||||
#include "alarm.h"
|
||||
|
||||
|
||||
extern TIM_HandleTypeDef htim1;
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint16_t f;
|
||||
uint8_t inUse;
|
||||
} tBuzzerHandle;
|
||||
|
||||
tBuzzerHandle buzzerHandle;
|
||||
|
||||
|
||||
static void startBuzzer(uint16_t f) {
|
||||
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
|
||||
__HAL_TIM_SET_COUNTER(&htim1, 0);
|
||||
__HAL_TIM_SET_AUTORELOAD(&htim1, f);
|
||||
HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_1);
|
||||
}
|
||||
|
||||
static void stopBuzzer() {
|
||||
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void buzzerTest(void *handle) {
|
||||
static enum {BUZZER_OFF, BUZZER_LOW, BUZZER_HIGH} state = BUZZER_OFF;
|
||||
|
||||
switch (state) {
|
||||
case BUZZER_OFF:
|
||||
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
|
||||
state = BUZZER_LOW;
|
||||
break;
|
||||
case BUZZER_LOW:
|
||||
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
|
||||
__HAL_TIM_SET_COUNTER(&htim1, 0);
|
||||
__HAL_TIM_SET_AUTORELOAD(&htim1, 2000);
|
||||
HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_1);
|
||||
state = BUZZER_HIGH;
|
||||
break;
|
||||
case BUZZER_HIGH:
|
||||
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
|
||||
__HAL_TIM_SET_COUNTER(&htim1, 0);
|
||||
__HAL_TIM_SET_AUTORELOAD(&htim1, 1000);
|
||||
HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_1);
|
||||
state = BUZZER_OFF;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void stopBuzzing(void *handle) {
|
||||
stopBuzzer();
|
||||
}
|
||||
|
||||
void buzz(void *handle) {
|
||||
tBuzzerHandle *lBuzzerHandle = (tBuzzerHandle*) handle;
|
||||
startBuzzer(lBuzzerHandle->f);
|
||||
schAdd(stopBuzzing, NULL, 100, 0);
|
||||
}
|
||||
|
||||
void alarmInit() {
|
||||
// schAdd(buzzerTest, NULL, 0, 5000);
|
||||
}
|
||||
|
||||
|
||||
void blink(void *handle) {
|
||||
@ -14,11 +80,24 @@ void blink(void *handle) {
|
||||
}
|
||||
|
||||
|
||||
void enableAlarm() {
|
||||
|
||||
void enableAlarm(tAlarmType alarmType) {
|
||||
schAdd(blink, NULL, 0, 100);
|
||||
|
||||
uint16_t f;
|
||||
if (alarmType == TIME_ALARM) {
|
||||
buzzerHandle.f = 4000;
|
||||
} else {
|
||||
buzzerHandle.f = 2000;
|
||||
}
|
||||
if (buzzerHandle.inUse == 0) {
|
||||
buzzerHandle.inUse = 1;
|
||||
schAdd(buzz, &buzzerHandle, 0, 10000);
|
||||
}
|
||||
}
|
||||
|
||||
void disableAlarm() {
|
||||
schDel(blink, NULL);
|
||||
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, RESET);
|
||||
schDel(buzz, &buzzerHandle);
|
||||
}
|
||||
|
@ -9,7 +9,13 @@
|
||||
#define ALARM_H_
|
||||
|
||||
|
||||
void enableAlarm();
|
||||
typedef enum {
|
||||
TIME_ALARM,
|
||||
TEMPERATURE_ALARM
|
||||
} tAlarmType;
|
||||
|
||||
void alarmInit();
|
||||
void enableAlarm(tAlarmType alarmType);
|
||||
void disableAlarm();
|
||||
|
||||
|
||||
|
@ -82,7 +82,7 @@ void eepromWrite(uint16_t addr, uint8_t *buf, uint8_t len) {
|
||||
eepromWren();
|
||||
|
||||
__EEPROM_CS(LOW);
|
||||
HAL_SPI_Transmit(&hspi1, &msg, ((uint16_t)(len+3)), HAL_MAX_DELAY);
|
||||
HAL_SPI_Transmit(&hspi1, &msg, ((uint16_t)(len+3+1)), HAL_MAX_DELAY);
|
||||
__EEPROM_CS(HIGH);
|
||||
}
|
||||
|
||||
@ -98,7 +98,7 @@ void eepromRead(uint16_t addr, uint8_t *buf, uint8_t len) {
|
||||
rxMsg;
|
||||
|
||||
__EEPROM_CS(LOW);
|
||||
HAL_SPI_TransmitReceive(&hspi1, &txMsg, &rxMsg, ((uint16_t)(len+3)), HAL_MAX_DELAY);
|
||||
HAL_SPI_TransmitReceive(&hspi1, &txMsg, &rxMsg, ((uint16_t)(len+3+1)), HAL_MAX_DELAY);
|
||||
__EEPROM_CS(HIGH);
|
||||
|
||||
memcpy(buf, rxMsg.data, len);
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "stm32f1xx_hal.h"
|
||||
|
||||
|
||||
#define STORAGE_ADDRESS 0x10
|
||||
#define STORAGE_ADDRESS 0x20
|
||||
|
||||
void eepromWrite(uint16_t addr, uint8_t *buf, uint8_t len);
|
||||
void eepromRead(uint16_t addr, uint8_t *buf, uint8_t len);
|
||||
|
14
my_src/hmi.c
14
my_src/hmi.c
@ -15,7 +15,8 @@
|
||||
|
||||
|
||||
|
||||
const uint32_t STORAGE_MAGIC = 0xaffe0002;
|
||||
const uint32_t STORAGE_MAGIC = 0xaffe000a;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -65,7 +66,7 @@ void updateDisplay(void *handle) {
|
||||
// sprintf(buf, "%d %d %d", c, i, i-h);
|
||||
// h = i;
|
||||
// c++;
|
||||
// LED_P8x16Str(0, 6, buf);
|
||||
LED_P8x16Str(0, 6, buf);
|
||||
}
|
||||
|
||||
|
||||
@ -76,13 +77,16 @@ void hmiInit() {
|
||||
display.targetTime = storage.savedTime;
|
||||
} else {
|
||||
storage.magic = STORAGE_MAGIC;
|
||||
storage.savedTemperature = 0;
|
||||
storage.savedTime = 0;
|
||||
storage.savedTemperature = 80;
|
||||
storage.savedTime = 90;
|
||||
eepromWrite(STORAGE_ADDRESS, &storage, sizeof(storage));
|
||||
|
||||
// eepromRead(STORAGE_ADDRESS, &storage, sizeof(storage));
|
||||
display.targetTemperature = storage.savedTemperature;
|
||||
display.targetTime = storage.savedTime;
|
||||
}
|
||||
|
||||
schAdd(updateDisplay, &display, 0, 250);
|
||||
|
||||
}
|
||||
|
||||
void clearSetMode(void *handle) {
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#include "oled.h"
|
||||
#include "timer.h"
|
||||
|
||||
#include "alarm.h"
|
||||
|
||||
|
||||
void my_setup_1() {
|
||||
@ -47,7 +47,7 @@ void my_setup_2() {
|
||||
hmiInit();
|
||||
timerInit();
|
||||
oledInit();
|
||||
|
||||
alarmInit();
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,9 +5,11 @@
|
||||
* Author: wn
|
||||
*/
|
||||
|
||||
#include <hmi.h>
|
||||
#include "hmi.h"
|
||||
#include "timer.h"
|
||||
#include "alarm.h"
|
||||
#include <PontCoopScheduler.h>
|
||||
|
||||
|
||||
|
||||
extern tDisplay display;
|
||||
@ -32,7 +34,7 @@ void secondTick(void *handle) {
|
||||
case RUNNING:
|
||||
lDisplay->currentTime -= 1;
|
||||
if (lDisplay->currentTime == 0) {
|
||||
enableAlarm();
|
||||
enableAlarm(TIME_ALARM);
|
||||
lDisplay->timerState = OVERRUN;
|
||||
}
|
||||
break;
|
||||
|
Reference in New Issue
Block a user