buzzer is working

This commit is contained in:
Wolfgang Hottgenroth
2017-06-12 17:50:08 +02:00
parent 49a7f2592c
commit 7f54b22e6b
14 changed files with 271 additions and 29 deletions

View File

@ -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);
}

View File

@ -9,7 +9,13 @@
#define ALARM_H_
void enableAlarm();
typedef enum {
TIME_ALARM,
TEMPERATURE_ALARM
} tAlarmType;
void alarmInit();
void enableAlarm(tAlarmType alarmType);
void disableAlarm();

View File

@ -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);

View File

@ -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);

View File

@ -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) {

View File

@ -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();
}

View File

@ -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;