|
@@ -30,8 +30,6 @@
|
|
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
|
/* USER CODE BEGIN PD */
|
|
|
-/* Display timeout, sec */
|
|
|
-#define DISP_WDT_TIME 10
|
|
|
/* USER CODE END PD */
|
|
|
|
|
|
/* Private macro -------------------------------------------------------------*/
|
|
@@ -39,27 +37,12 @@
|
|
|
/* USER CODE END PM */
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
|
-
|
|
|
/* USER CODE BEGIN PV */
|
|
|
volatile flag_t Flag = {0};
|
|
|
-static rtc_t Clock;
|
|
|
-static btn_t Button[BTN_NUM] = {
|
|
|
- {0, evBTN1Pressed, evBTN1Holded, BTN1_PIN},
|
|
|
- {0, evBTN2Pressed, evBTN2Pressed, BTN2_PIN},
|
|
|
- {0, evBTN3Pressed, evBTN3Pressed, BTN3_PIN},
|
|
|
- {0, evBTN4Pressed, evBTN4Holded, BTN4_PIN}
|
|
|
-};
|
|
|
-static volatile uint8_t dispWDT = 0;
|
|
|
-
|
|
|
/* USER CODE END PV */
|
|
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
|
/* USER CODE BEGIN PFP */
|
|
|
-static void btnProcess(void);
|
|
|
-static void Color_RGB(uint8_t r, uint8_t g, uint8_t b);
|
|
|
-static void ColorCircle(void);
|
|
|
-void MinusFadeIn(void);
|
|
|
-void MinusFadeOut(void);
|
|
|
/* USER CODE END PFP */
|
|
|
|
|
|
/* Private user code ---------------------------------------------------------*/
|
|
@@ -91,7 +74,6 @@ int main(void)
|
|
|
RTOS_SetTask(btnProcess, 1, BTN_SCAN_PERIOD);
|
|
|
|
|
|
/* USER CODE BEGIN WHILE */
|
|
|
- Color_RGB(0xFF, 0x12, 0x0); // Nixie color. FF1200 or FF7E00 or FFBF00
|
|
|
showTime();
|
|
|
|
|
|
/* Infinite loop */
|
|
@@ -100,20 +82,8 @@ int main(void)
|
|
|
/* new second interrupt from RTC */
|
|
|
if (Flag.RTC_IRQ != 0) {
|
|
|
Flag.RTC_IRQ = 0;
|
|
|
- ColorCircle();
|
|
|
-
|
|
|
- Blink_Start(); // !!! TODO
|
|
|
- RTC_ReadAll(&Clock);
|
|
|
-
|
|
|
- if (dispWDT != 0) {
|
|
|
- dispWDT --;
|
|
|
- if (dispWDT == 0) {
|
|
|
- ES_PlaceEvent(evDisplayWDT);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ new_Second();
|
|
|
} /* end of New second */
|
|
|
-
|
|
|
/* USER CODE END WHILE */
|
|
|
|
|
|
/* USER CODE BEGIN 3 */
|
|
@@ -130,271 +100,6 @@ int main(void)
|
|
|
} /* End of mine() */
|
|
|
|
|
|
/* USER CODE BEGIN 4 */
|
|
|
-/*************************
|
|
|
- * S U B R O U T I N E S *
|
|
|
- *************************/
|
|
|
-/**
|
|
|
- * @brief Вывод HEX значений цвета в таймер.
|
|
|
- * @param : RGB value in range 0x00-0xFF
|
|
|
- * @retval : None
|
|
|
- */
|
|
|
-static void Color_RGB(uint8_t r, uint8_t g, uint8_t b) {
|
|
|
- COLOR_R(r);
|
|
|
- COLOR_G(g);
|
|
|
- COLOR_B(b);
|
|
|
-}
|
|
|
-
|
|
|
-/* cheng led color by time seconds */
|
|
|
-static void ColorCircle(void) {
|
|
|
- int16_t hue = bcd2bin(Clock.Sec) * 6;
|
|
|
- HSV2LED(hue, 255, 255);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * @brief Обработка кнопок.
|
|
|
- * @param : None
|
|
|
- * @retval : None
|
|
|
- */
|
|
|
-static void btnProcess(void) {
|
|
|
- /* get pin state */
|
|
|
- uint32_t pins = BTNS_STATE;
|
|
|
-
|
|
|
- int i;
|
|
|
- for (i=0; i<BTN_NUM; i++) {
|
|
|
- if ((pins & Button[i].pin) == 0) {
|
|
|
- /* button pressed */
|
|
|
- Button[i].time ++;
|
|
|
- if (Button[i].time >= (BTN_TIME_HOLDED/BTN_SCAN_PERIOD)) {
|
|
|
- Button[i].time -= (BTN_TIME_REPEATED/BTN_SCAN_PERIOD);
|
|
|
- if (Button[i].holded == Button[i].pressed) {
|
|
|
- /* if pressed and holded - same function, then button pressed auto repeat */
|
|
|
- ES_PlaceEvent(Button[i].pressed);
|
|
|
- }
|
|
|
- }
|
|
|
- } else if (Button[i].time != 0) {
|
|
|
- /* button released */
|
|
|
- if (Button[i].time >= ((BTN_TIME_HOLDED - BTN_TIME_REPEATED)/BTN_SCAN_PERIOD)) {
|
|
|
- /* process long press */
|
|
|
- ES_PlaceEvent(Button[i].holded);
|
|
|
- } else if (Button[i].time >= (BTN_TIME_PRESSED/BTN_SCAN_PERIOD)) {
|
|
|
- /* process short press */
|
|
|
- ES_PlaceEvent(Button[i].pressed);
|
|
|
- }
|
|
|
- Button[i].time = 0;
|
|
|
- RTOS_SetTask(btnProcess, BTN_SCAN_PAUSE, BTN_SCAN_PERIOD);
|
|
|
- }
|
|
|
- } /* end FOR */
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * On/off symbols on IN-15 tube.
|
|
|
- */
|
|
|
-void in15Off(void) {
|
|
|
- IN15_OFF;
|
|
|
- TUBE_C_OFF;
|
|
|
-}
|
|
|
-
|
|
|
-void in15Minus(void) {
|
|
|
- IN15_OFF;
|
|
|
- IN15_Minus;
|
|
|
- TUBE_C_ON;
|
|
|
-}
|
|
|
-
|
|
|
-void MinusFadeIn(void) {
|
|
|
- static uint8_t on = 0;
|
|
|
- static uint8_t off = 20;
|
|
|
- static uint8_t st = 0;
|
|
|
-
|
|
|
- if (st == 0) {
|
|
|
- st = 1;
|
|
|
- IN15_Minus;
|
|
|
- on += 2;
|
|
|
- if (on < 20) {
|
|
|
- RTOS_SetTask(MinusFadeIn, on, 0);
|
|
|
- } else {
|
|
|
- on = 0; off = 20; st = 0;
|
|
|
- }
|
|
|
- } else {
|
|
|
- st = 0;
|
|
|
- IN15_OFF;
|
|
|
- off -= 2;
|
|
|
- RTOS_SetTask(MinusFadeIn, off, 0);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void MinusFadeOut(void) {
|
|
|
- static uint8_t off = 0;
|
|
|
- static uint8_t on = 20;
|
|
|
- static uint8_t st = 0;
|
|
|
-
|
|
|
- if (st == 0) {
|
|
|
- st = 1;
|
|
|
- IN15_OFF;
|
|
|
- off += 2;
|
|
|
- if (off < 20) {
|
|
|
- RTOS_SetTask(MinusFadeOut, off, 0);
|
|
|
- } else {
|
|
|
- off = 0; on = 20; st = 0;
|
|
|
- }
|
|
|
- } else {
|
|
|
- st = 0;
|
|
|
- IN15_Minus;
|
|
|
- on -= 2;
|
|
|
- RTOS_SetTask(MinusFadeOut, on, 0);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void in15Plus(void) {
|
|
|
- IN15_OFF;
|
|
|
- IN15_Plus;
|
|
|
- TUBE_C_ON;
|
|
|
-}
|
|
|
-
|
|
|
-void in15Percent(void) {
|
|
|
- IN15_OFF;
|
|
|
- IN15_Percent;
|
|
|
- TUBE_C_ON;
|
|
|
-}
|
|
|
-
|
|
|
-void in15P(void) {
|
|
|
- IN15_OFF;
|
|
|
- IN15_P;
|
|
|
- TUBE_C_ON;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * Show info on tubes.
|
|
|
- */
|
|
|
-void showTime(void) {
|
|
|
- //in15Minus();
|
|
|
- //RTOS_SetTask(in15Off, 500, 0);
|
|
|
- MinusFadeIn();
|
|
|
- RTOS_SetTask(MinusFadeOut, 500, 0);
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- buf[Tube_A] = Clock.Hr >> 4;
|
|
|
- buf[Tube_B] = Clock.Hr & 0xf;
|
|
|
- buf[Tube_D] = Clock.Min >> 4;
|
|
|
- buf[Tube_E] = Clock.Min & 0xf;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-void showWD(void) {
|
|
|
- dispWDT = DISP_WDT_TIME;
|
|
|
- IN15_OFF;
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- buf[Tube_A] = 0xf;
|
|
|
- buf[Tube_B] = Clock.WD & 0xf;
|
|
|
- buf[Tube_D] = 0xf;
|
|
|
- buf[Tube_E] = 0xf;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-void showDay(void) {
|
|
|
- dispWDT = DISP_WDT_TIME;
|
|
|
- IN15_OFF;
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- buf[Tube_A] = Clock.Day >> 4;
|
|
|
- buf[Tube_B] = Clock.Day & 0xf;
|
|
|
- buf[Tube_D] = 0xf;
|
|
|
- buf[Tube_E] = 0xf;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-void showMonth(void) {
|
|
|
- dispWDT = DISP_WDT_TIME;
|
|
|
- IN15_OFF;
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- buf[Tube_A] = 0xf;
|
|
|
- buf[Tube_B] = 0xf;
|
|
|
- buf[Tube_D] = Clock.Mon >> 4;
|
|
|
- buf[Tube_E] = Clock.Mon & 0xf;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-void showDayMon(void) {
|
|
|
- dispWDT = DISP_WDT_TIME;
|
|
|
- IN15_OFF;
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- buf[Tube_A] = Clock.Day >> 4;
|
|
|
- buf[Tube_B] = Clock.Day & 0xf;
|
|
|
- buf[Tube_D] = Clock.Mon >> 4;
|
|
|
- buf[Tube_E] = Clock.Mon & 0xf;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-void showYear(void) {
|
|
|
- dispWDT = DISP_WDT_TIME;
|
|
|
- IN15_OFF;
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- buf[Tube_A] = 2;
|
|
|
- buf[Tube_B] = 0;
|
|
|
- buf[Tube_D] = Clock.Year >> 4;
|
|
|
- buf[Tube_E] = Clock.Year & 0xf;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-void showHumidity(void) {
|
|
|
- dispWDT = DISP_WDT_TIME;
|
|
|
- in15Percent();
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- buf[Tube_A] = Humidity / 10;
|
|
|
- buf[Tube_B] = Humidity % 10;
|
|
|
- buf[Tube_D] = 0xf;
|
|
|
- buf[Tube_E] = 0xf;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-void showTemperature(void) {
|
|
|
- dispWDT = DISP_WDT_TIME;
|
|
|
- in15Plus();
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- buf[Tube_A] = 0xf;
|
|
|
- buf[Tube_B] = 0xf;
|
|
|
- buf[Tube_D] = Temperature / 10;
|
|
|
- buf[Tube_E] = Temperature % 10;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-void showPressure(void) {
|
|
|
- dispWDT = DISP_WDT_TIME;
|
|
|
- in15P();
|
|
|
-
|
|
|
- uint8_t buf[4];
|
|
|
- int tmp;
|
|
|
- buf[Tube_A] = 0xf;
|
|
|
- buf[Tube_B] = Pressure / 100;
|
|
|
- tmp = Pressure % 100;
|
|
|
- buf[Tube_D] = tmp / 10;
|
|
|
- buf[Tube_E] = tmp % 10;
|
|
|
- showDigits(buf);
|
|
|
-}
|
|
|
-
|
|
|
-/* Simple function for cyclic show all sensor data */
|
|
|
-void showSensorData(void) {
|
|
|
- ES_SetState(stShowSensorData);
|
|
|
- RTOS_DeleteTask(MinusFadeOut);
|
|
|
- RTOS_DeleteTask(ColorCircle);
|
|
|
-
|
|
|
- showTemperature();
|
|
|
- tdelay_ms(3000);
|
|
|
-
|
|
|
- showHumidity();
|
|
|
- tdelay_ms(3000);
|
|
|
-
|
|
|
- showPressure();
|
|
|
- tdelay_ms(3000);
|
|
|
-
|
|
|
- ES_SetState(stShowTime);
|
|
|
- showTime();
|
|
|
-}
|
|
|
|
|
|
/* USER CODE END 4 */
|
|
|
|