|
@@ -1,4 +1,5 @@
|
|
|
/* USER CODE BEGIN Header */
|
|
|
+/* USER CODE BEGIN Header */
|
|
|
/**
|
|
|
******************************************************************************
|
|
|
* @file : main.c
|
|
@@ -71,7 +72,7 @@ static const uint16_t nixieCathodeMap[4][10] = {
|
|
|
{0x0800, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400},
|
|
|
{0x0200, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100}
|
|
|
};
|
|
|
-static const uint8_t nixieCathodeMask[4][2] = {{0x00, 0x3f}, {0xc0, 0x0f}, {0xf0, 0x03}, {0xc0, 0x00}};
|
|
|
+//static const uint8_t nixieCathodeMask[4][2] = {{0x00, 0x3f}, {0xc0, 0x0f}, {0xf0, 0x03}, {0xc0, 0x00}};
|
|
|
static uint8_t tubesBuffer[SPI_BUFFER_SIZE] = {0};
|
|
|
static rtc_t Clock;
|
|
|
static struct bme280_dev SensorDev;
|
|
@@ -101,11 +102,11 @@ static void MX_TIM16_Init(void);
|
|
|
static void MX_TIM17_Init(void);
|
|
|
static void MX_USART1_UART_Init(void);
|
|
|
/* USER CODE BEGIN PFP */
|
|
|
-static void showDigit(tube_pos_t pos, uint8_t dig);
|
|
|
-static void tubes_Refresh(void);
|
|
|
+static void showDigits(uint8_t * dig);
|
|
|
int8_t user_i2c_read(uint8_t id, uint8_t reg_addr, uint8_t *data, uint16_t len);
|
|
|
int8_t user_i2c_write(uint8_t id, uint8_t reg_addr, uint8_t *data, uint16_t len);
|
|
|
int8_t i2c_check_err(void);
|
|
|
+static void sensor_Init(void);
|
|
|
static void sensorStartMeasure(void);
|
|
|
static void sensorGetData(void);
|
|
|
static void btnProcess(void);
|
|
@@ -174,23 +175,29 @@ int main(void)
|
|
|
/* Enable tube power */
|
|
|
TUBE_PWR_ON;
|
|
|
|
|
|
+ RTC_Init();
|
|
|
+
|
|
|
+ sensor_Init();
|
|
|
+
|
|
|
/** Start RGB & Tube Power PWM */
|
|
|
- /* LL_TIM_CC_EnableChannel */
|
|
|
+ /* TIM1 LL_TIM_CC_EnableChannel */
|
|
|
TIM1->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E);
|
|
|
/* LL_TIM_EnableCounter */
|
|
|
TIM1->CR1 |= TIM_CR1_CEN;
|
|
|
-
|
|
|
+ /* TIM3 */
|
|
|
TIM3->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E);
|
|
|
TIM3->CR1 |= TIM_CR1_CEN;
|
|
|
|
|
|
- /* Start Blink Engine */
|
|
|
+ /** Start Blink Engine */
|
|
|
Flag.Blink_1 = 0;
|
|
|
Flag.Blink_2 = 0;
|
|
|
Flag.Blink_3 = 0;
|
|
|
Flag.Blink_4 = 0;
|
|
|
Flag.Blink_5 = 0;
|
|
|
+ //TIM14->CCER |= TIM_CCER_CC1E; ???
|
|
|
TIM14->CR1 |= TIM_CR1_CEN;
|
|
|
|
|
|
+ /** Star SPI transfer to shift registers */
|
|
|
/* Set DMA source and destination addresses. */
|
|
|
/* Source: Address of the SPI buffer. */
|
|
|
DMA1_Channel1->CMAR = (uint32_t)&tubesBuffer;
|
|
@@ -198,40 +205,14 @@ int main(void)
|
|
|
DMA1_Channel1->CPAR = (uint32_t)&(SPI1->DR);
|
|
|
/* Set DMA data transfer length (SPI buffer length). */
|
|
|
DMA1_Channel1->CNDTR = SPI_BUFFER_SIZE;
|
|
|
-
|
|
|
/* Enable SPI+DMA transfer */
|
|
|
SPI1->CR2 |= SPI_CR2_TXDMAEN;
|
|
|
SPI1->CR1 |= SPI_CR1_SPE;
|
|
|
+ Flag.SPI_TX_End = 1;
|
|
|
|
|
|
- tubes_Refresh();
|
|
|
-
|
|
|
- IN15_OFF;
|
|
|
-
|
|
|
- RTC_Init();
|
|
|
-
|
|
|
- int8_t rsltSensor;
|
|
|
- SensorDev.dev_id = (BME280_I2C_ADDR_PRIM << 1);
|
|
|
- SensorDev.intf = BME280_I2C_INTF;
|
|
|
- SensorDev.read = user_i2c_read;
|
|
|
- SensorDev.write = user_i2c_write;
|
|
|
- SensorDev.delay_ms = tdelay_ms;
|
|
|
- rsltSensor = bme280_init(&SensorDev);
|
|
|
- if (rsltSensor == BME280_OK) {
|
|
|
- Flag.BME280 = 1;
|
|
|
-
|
|
|
- /* BME280 Recommended mode of operation: Indoor navigation */
|
|
|
- SensorDev.settings.osr_h = BME280_OVERSAMPLING_1X;
|
|
|
- SensorDev.settings.osr_p = BME280_OVERSAMPLING_16X;
|
|
|
- SensorDev.settings.osr_t = BME280_OVERSAMPLING_2X;
|
|
|
- SensorDev.settings.filter = BME280_FILTER_COEFF_16;
|
|
|
- rsltSensor = bme280_set_sensor_settings((BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL | BME280_OSR_HUM_SEL | BME280_FILTER_SEL), &SensorDev);
|
|
|
- RTOS_SetTask(sensorStartMeasure, 103, 1000);
|
|
|
- RTOS_SetTask(sensorGetData, 603, 1000);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /* Set tasks for Sheduler */
|
|
|
+ /** Set tasks for Sheduler */
|
|
|
RTOS_SetTask(btnProcess, 1, BTN_SCAN_PERIOD);
|
|
|
+
|
|
|
/* USER CODE END 2 */
|
|
|
|
|
|
/* USER CODE BEGIN WHILE */
|
|
@@ -250,8 +231,6 @@ int main(void)
|
|
|
|
|
|
RTC_ReadAll(&Clock);
|
|
|
|
|
|
- ES_PlaceEvent(evNewSecond);
|
|
|
-
|
|
|
if (dispWDT != 0) {
|
|
|
dispWDT --;
|
|
|
if (dispWDT == 0) {
|
|
@@ -276,15 +255,6 @@ int main(void)
|
|
|
/* USER CODE END 3 */
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-/**
|
|
|
- * @brief Launch SPI transaction.
|
|
|
- * @retval None
|
|
|
- */
|
|
|
-static void tubes_Refresh(void) {
|
|
|
- LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* @brief Check I2C fjr errors.
|
|
|
* @retval I2C return code
|
|
@@ -411,6 +381,31 @@ int8_t user_i2c_write(const uint8_t id, const uint8_t reg_addr, uint8_t *data, c
|
|
|
/**
|
|
|
* Sensor
|
|
|
*/
|
|
|
+static void sensor_Init(void) {
|
|
|
+ int8_t rsltSensor;
|
|
|
+
|
|
|
+ Flag.BME280 = 0;
|
|
|
+ SensorDev.dev_id = (BME280_I2C_ADDR_PRIM << 1);
|
|
|
+ SensorDev.intf = BME280_I2C_INTF;
|
|
|
+ SensorDev.read = user_i2c_read;
|
|
|
+ SensorDev.write = user_i2c_write;
|
|
|
+ SensorDev.delay_ms = tdelay_ms;
|
|
|
+ rsltSensor = bme280_init(&SensorDev);
|
|
|
+
|
|
|
+ if (rsltSensor == BME280_OK) {
|
|
|
+ Flag.BME280 = 1;
|
|
|
+
|
|
|
+ /* BME280 Recommended mode of operation: Indoor navigation */
|
|
|
+ SensorDev.settings.osr_h = BME280_OVERSAMPLING_1X;
|
|
|
+ SensorDev.settings.osr_p = BME280_OVERSAMPLING_16X;
|
|
|
+ SensorDev.settings.osr_t = BME280_OVERSAMPLING_2X;
|
|
|
+ SensorDev.settings.filter = BME280_FILTER_COEFF_16;
|
|
|
+ rsltSensor = bme280_set_sensor_settings((BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL | BME280_OSR_HUM_SEL | BME280_FILTER_SEL), &SensorDev);
|
|
|
+ RTOS_SetTask(sensorStartMeasure, 103, 1000);
|
|
|
+ RTOS_SetTask(sensorGetData, 603, 1000);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void sensorStartMeasure(void) {
|
|
|
bme280_set_sensor_mode(BME280_FORCED_MODE, &SensorDev);
|
|
|
}
|
|
@@ -1280,75 +1275,72 @@ static void MX_GPIO_Init(void)
|
|
|
}
|
|
|
|
|
|
/* USER CODE BEGIN 4 */
|
|
|
-/**
|
|
|
- * S U B R O U T I N E S
|
|
|
- */
|
|
|
+/*************************
|
|
|
+ * S U B R O U T I N E S *
|
|
|
+ *************************/
|
|
|
|
|
|
-/* Feel byte with tube position by digit.
|
|
|
- * If digit == 0xf, then tube is off -- clear all bits.
|
|
|
- */
|
|
|
-static void showDigit(tube_pos_t pos, uint8_t dig)
|
|
|
+/**
|
|
|
+ * @brief Out digits ti SPI buffer. ON/off tube power.
|
|
|
+ * @param : array with four BCD digits
|
|
|
+ * @retval : None
|
|
|
+ */
|
|
|
+static void showDigits(uint8_t * dig)
|
|
|
{
|
|
|
- if (dig > 9) {
|
|
|
- if (dig != 0xf) {
|
|
|
- dig = 0;
|
|
|
+ /* Clear buffer */
|
|
|
+ tubesBuffer[0] = 0;
|
|
|
+ tubesBuffer[1] = 0;
|
|
|
+ tubesBuffer[2] = 0;
|
|
|
+ tubesBuffer[3] = 0;
|
|
|
+ tubesBuffer[4] = 0;
|
|
|
+
|
|
|
+ /* check values range */
|
|
|
+ int i;
|
|
|
+ for (i=0; i<4; i++) {
|
|
|
+ if (dig[i] > 9) {
|
|
|
+ if (dig[i] != 0xf) {
|
|
|
+ dig[i] = 0;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- switch (pos) {
|
|
|
- case Tube_E:
|
|
|
- tubesBuffer[0] = 0;
|
|
|
- tubesBuffer[1] &= nixieCathodeMask[Tube_E][1];
|
|
|
- if (Tube_E != 0xf) {
|
|
|
- TUBE_E_ON;
|
|
|
- tubesBuffer[0] = (uint8_t)(nixieCathodeMap[Tube_E][dig] >> 8);
|
|
|
- tubesBuffer[1] |= (uint8_t)(nixieCathodeMap[Tube_E][dig]);
|
|
|
- } else {
|
|
|
- TUBE_E_OFF;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case Tube_D:
|
|
|
- tubesBuffer[1] &= nixieCathodeMask[Tube_D][0];
|
|
|
- tubesBuffer[2] &= nixieCathodeMask[Tube_D][1];
|
|
|
- if (Tube_D != 0xf) {
|
|
|
- TUBE_D_ON;
|
|
|
- tubesBuffer[1] |= (uint8_t)(nixieCathodeMap[Tube_D][dig] >> 8);
|
|
|
- tubesBuffer[2] |= (uint8_t)(nixieCathodeMap[Tube_D][dig]);
|
|
|
- } else {
|
|
|
- TUBE_D_OFF;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case Tube_B:
|
|
|
- tubesBuffer[2] &= nixieCathodeMask[Tube_B][0];
|
|
|
- tubesBuffer[3] &= nixieCathodeMask[Tube_B][1];
|
|
|
- if (Tube_B != 0xf) {
|
|
|
- TUBE_B_ON;
|
|
|
- tubesBuffer[2] |= (uint8_t)(nixieCathodeMap[Tube_B][dig] >> 8);
|
|
|
- tubesBuffer[3] |= (uint8_t)(nixieCathodeMap[Tube_B][dig]);
|
|
|
- } else {
|
|
|
- TUBE_B_OFF;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case Tube_A:
|
|
|
- tubesBuffer[3] &= nixieCathodeMask[Tube_A][0];
|
|
|
- tubesBuffer[4] = 0;
|
|
|
- if (Tube_A != 0xf) {
|
|
|
- TUBE_A_ON;
|
|
|
- tubesBuffer[3] |= (uint8_t)(nixieCathodeMap[Tube_A][dig] >> 8);
|
|
|
- tubesBuffer[4] = (uint8_t)(nixieCathodeMap[Tube_A][dig]);
|
|
|
- } else {
|
|
|
- TUBE_A_OFF;
|
|
|
- }
|
|
|
- break;
|
|
|
+ /* Wait for SPI */
|
|
|
+ while (Flag.SPI_TX_End == 0) {};
|
|
|
+ Flag.SPI_TX_End = 0;
|
|
|
+
|
|
|
+ /* Feel buffer */
|
|
|
+ tubesBuffer[0] = (uint8_t)(nixieCathodeMap[Tube_E][dig[Tube_E]] >> 8);
|
|
|
+ tubesBuffer[1] = (uint8_t)((nixieCathodeMap[Tube_E][dig[Tube_E]]) | (nixieCathodeMap[Tube_D][dig[Tube_D]] >> 8));
|
|
|
+ tubesBuffer[2] = (uint8_t)((nixieCathodeMap[Tube_D][dig[Tube_D]]) | (nixieCathodeMap[Tube_B][dig[Tube_B]] >> 8));
|
|
|
+ tubesBuffer[3] = (uint8_t)((nixieCathodeMap[Tube_B][dig[Tube_B]]) | (nixieCathodeMap[Tube_A][dig[Tube_A]] >> 8));
|
|
|
+ tubesBuffer[4] = (uint8_t)(nixieCathodeMap[Tube_A][dig[Tube_A]]);
|
|
|
|
|
|
- default:
|
|
|
- break;
|
|
|
+ /* Start DMA transfer to SPI */
|
|
|
+ DMA1_Channel1->CCR |= DMA_CCR_EN;
|
|
|
+
|
|
|
+
|
|
|
+ /* On/Off tube power */
|
|
|
+ if (dig[Tube_A] == 0xf) {
|
|
|
+ TUBE_A_OFF;
|
|
|
+ } else {
|
|
|
+ TUBE_A_ON;
|
|
|
+ }
|
|
|
+ if (dig[Tube_B] == 0xf) {
|
|
|
+ TUBE_B_OFF;
|
|
|
+ } else {
|
|
|
+ TUBE_B_ON;
|
|
|
+ }
|
|
|
+ if (dig[Tube_D] == 0xf) {
|
|
|
+ TUBE_D_OFF;
|
|
|
+ } else {
|
|
|
+ TUBE_D_ON;
|
|
|
+ }
|
|
|
+ if (dig[Tube_E] == 0xf) {
|
|
|
+ TUBE_E_OFF;
|
|
|
+ } else {
|
|
|
+ TUBE_E_ON;
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
+}
|
|
|
/**
|
|
|
* @brief Âûâîä HEX çíà÷åíèé öâåòà â òàéìåð.
|
|
|
* @param : RGB value in range 0x00-0xFF
|
|
@@ -1364,7 +1356,7 @@ static void Color_RGB(uint8_t r, uint8_t g, uint8_t b) {
|
|
|
÷òî-áû âûâåñòè çíà÷åíèÿ â òàéìåð ìàêñèìàëüíî îäíîâðåìåííî. */
|
|
|
/*
|
|
|
uint32_t val_r, val_g, val_b;
|
|
|
-
|
|
|
+ // * 999 + 127 / 255 ???
|
|
|
val_r = ((uint32_t)(r * 1000) + 128) / 256;
|
|
|
val_g = ((uint32_t)(g * 1000) + 128) / 256;
|
|
|
val_b = ((uint32_t)(b * 1000) + 128) / 256;
|
|
@@ -1411,6 +1403,9 @@ static void btnProcess(void) {
|
|
|
} /* end FOR */
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * On/off symbols on IN-15 tube.
|
|
|
+ */
|
|
|
void in15Off(void) {
|
|
|
IN15_OFF;
|
|
|
TUBE_C_OFF;
|
|
@@ -1418,134 +1413,137 @@ void in15Off(void) {
|
|
|
|
|
|
void in15Minus(void) {
|
|
|
IN15_OFF;
|
|
|
- TUBE_C_ON;
|
|
|
IN15_Minus;
|
|
|
+ TUBE_C_ON;
|
|
|
}
|
|
|
|
|
|
void in15Plus(void) {
|
|
|
IN15_OFF;
|
|
|
- TUBE_C_ON;
|
|
|
IN15_Plus;
|
|
|
+ TUBE_C_ON;
|
|
|
}
|
|
|
|
|
|
void in15Percent(void) {
|
|
|
IN15_OFF;
|
|
|
- TUBE_C_ON;
|
|
|
IN15_Percent;
|
|
|
+ TUBE_C_ON;
|
|
|
}
|
|
|
|
|
|
void in15P(void) {
|
|
|
IN15_OFF;
|
|
|
- TUBE_C_ON;
|
|
|
IN15_P;
|
|
|
+ TUBE_C_ON;
|
|
|
}
|
|
|
|
|
|
void showTime(void) {
|
|
|
in15Minus();
|
|
|
RTOS_SetTask(in15Off, 500, 0);
|
|
|
|
|
|
- showDigit(Tube_A, Clock.Hr >> 4);
|
|
|
- showDigit(Tube_B, Clock.Hr & 0xf);
|
|
|
- showDigit(Tube_D, Clock.Min >> 4);
|
|
|
- showDigit(Tube_E, Clock.Min & 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ 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);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Show info on tubes.
|
|
|
+ */
|
|
|
void showWD(void) {
|
|
|
dispWDT = DISP_WDT_TIME;
|
|
|
IN15_OFF;
|
|
|
|
|
|
- showDigit(Tube_A, 0xf);
|
|
|
- showDigit(Tube_B, Clock.WD & 0xf);
|
|
|
- showDigit(Tube_D, 0xf);
|
|
|
- showDigit(Tube_E, 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ 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;
|
|
|
|
|
|
- showDigit(Tube_A, Clock.Day >> 4);
|
|
|
- showDigit(Tube_B, Clock.Day & 0xf);
|
|
|
- showDigit(Tube_D, 0xf);
|
|
|
- showDigit(Tube_E, 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ 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;
|
|
|
|
|
|
- showDigit(Tube_A, 0xf);
|
|
|
- showDigit(Tube_B, 0xf);
|
|
|
- showDigit(Tube_D, Clock.Mon >> 4);
|
|
|
- showDigit(Tube_E, Clock.Mon & 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ 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;
|
|
|
|
|
|
- showDigit(Tube_A, Clock.Day >> 4);
|
|
|
- showDigit(Tube_B, Clock.Day & 0xf);
|
|
|
- showDigit(Tube_D, Clock.Mon >> 4);
|
|
|
- showDigit(Tube_E, Clock.Mon & 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ 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;
|
|
|
|
|
|
- showDigit(Tube_A, 2);
|
|
|
- showDigit(Tube_B, 0);
|
|
|
- showDigit(Tube_D, Clock.Year >> 4);
|
|
|
- showDigit(Tube_E, Clock.Year & 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ 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();
|
|
|
|
|
|
- showDigit(Tube_A, Humidity >> 4);
|
|
|
- showDigit(Tube_B, Humidity & 0xf);
|
|
|
- showDigit(Tube_D, 0xf);
|
|
|
- showDigit(Tube_E, 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ uint8_t buf[4];
|
|
|
+ buf[Tube_A] = Humidity >> 4;
|
|
|
+ buf[Tube_B] = Humidity & 0xf;
|
|
|
+ buf[Tube_D] = 0xf;
|
|
|
+ buf[Tube_E] = 0xf;
|
|
|
+ showDigits(buf);
|
|
|
}
|
|
|
|
|
|
void showTemperature(void) {
|
|
|
dispWDT = DISP_WDT_TIME;
|
|
|
in15Plus();
|
|
|
|
|
|
- showDigit(Tube_A, 0xf);
|
|
|
- showDigit(Tube_B, 0xf);
|
|
|
- showDigit(Tube_D, Temperature >> 4);
|
|
|
- showDigit(Tube_E, Temperature & 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ uint8_t buf[4];
|
|
|
+ buf[Tube_A] = 0xf;
|
|
|
+ buf[Tube_B] = 0xf;
|
|
|
+ buf[Tube_D] = Temperature >> 4;
|
|
|
+ buf[Tube_E] = Temperature & 0xf;
|
|
|
+ showDigits(buf);
|
|
|
}
|
|
|
|
|
|
void showPressure(void) {
|
|
|
dispWDT = DISP_WDT_TIME;
|
|
|
in15P();
|
|
|
|
|
|
- showDigit(Tube_A, 0xf);
|
|
|
- showDigit(Tube_B, Pressure.s16.u8H & 0xf);
|
|
|
- showDigit(Tube_D, Pressure.s16.u8L >> 4);
|
|
|
- showDigit(Tube_E, Pressure.s16.u8L & 0xf);
|
|
|
-
|
|
|
- tubes_Refresh();
|
|
|
+ uint8_t buf[4];
|
|
|
+ buf[Tube_A] = 0xf;
|
|
|
+ buf[Tube_B] = Pressure.s16.u8H & 0xf;
|
|
|
+ buf[Tube_D] = Pressure.s16.u8L >> 4;
|
|
|
+ buf[Tube_E] = Pressure.s16.u8L & 0xf;
|
|
|
+ showDigits(buf);
|
|
|
}
|
|
|
|
|
|
/* Simple function for cyclic show all sensor data */
|