|
@@ -50,16 +50,6 @@ static const uint8_t PROGMEM brightConv[BRIGHT_IDX_MAX+1] = {
|
|
|
};
|
|
|
#endif // USE_BRIGHT_CONTROL
|
|
|
|
|
|
-#ifdef USE_DHT
|
|
|
-// timeout in timer tiks, step 4 mks
|
|
|
-#define DHT_TIMEOUT 1500
|
|
|
-#define DHT_TOUT1 55
|
|
|
-static struct {
|
|
|
- uint8_t Humidity;
|
|
|
- uint16_t Temperature;
|
|
|
-} dhtData;
|
|
|
-#endif // USE_DHT
|
|
|
-
|
|
|
|
|
|
/* Variables */
|
|
|
static volatile uint8_t Digit[LAMP_NUM] = {1, 2, 3, 4, 5, 6};
|
|
@@ -92,13 +82,6 @@ static void valDecrease(uint8_t * val, uint8_t max);
|
|
|
static void blink(void);
|
|
|
static void setSummerWinterTime(void);
|
|
|
static void lampTest(void);
|
|
|
-#ifdef USE_DHT
|
|
|
-static void dhtStart(void);
|
|
|
-static void dhtProcess(void);
|
|
|
-static void dhtEnd(void);
|
|
|
-static void dhtTimeout(void);
|
|
|
-static void dhtNoAck(void);
|
|
|
-#endif // USE_DHT
|
|
|
#ifdef USE_UART
|
|
|
void usart_putc (char send);
|
|
|
void usart_puts (const char *send);
|
|
@@ -147,9 +130,6 @@ void main(void) {
|
|
|
showTime();
|
|
|
|
|
|
RTOS_SetTask(btnProcess, 3, BTN_SCAN_PERIOD);
|
|
|
-#ifdef USE_DHT
|
|
|
- RTOS_SetTask(dhtStart, 2000, 15000);
|
|
|
-#endif // USE_DHT
|
|
|
|
|
|
/** main loop */
|
|
|
do {
|
|
@@ -193,24 +173,6 @@ void main(void) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-#ifdef USE_DHT
|
|
|
- switch(RTC.Sec) {
|
|
|
- case 0x20:
|
|
|
- case 0x50:
|
|
|
- ES_PlaceEvent(evShTemp);
|
|
|
- break;
|
|
|
-
|
|
|
- case 0x22:
|
|
|
- case 0x52:
|
|
|
- ES_PlaceEvent(evShHum);
|
|
|
- break;
|
|
|
-
|
|
|
- case 0x24:
|
|
|
- case 0x54:
|
|
|
- ES_PlaceEvent(evShTime);
|
|
|
- break;
|
|
|
- }
|
|
|
-#endif // USE_DHT
|
|
|
} // End of New Second
|
|
|
|
|
|
event = ES_GetEvent();
|
|
@@ -245,11 +207,6 @@ static void Board_Init(void) {
|
|
|
DDRC = DIGIT_PINS; // as output
|
|
|
DDRD = (DOT_PIN | ANODD_PINS); // as output
|
|
|
|
|
|
-#ifdef USE_DHT
|
|
|
- /* Timer1, IC negative edge, CTC mode, 64 prescaler, 4 mks one tick */
|
|
|
- TCCR1B = ((0<<ICES1) | (1<<CS11) | (1<<CS10));
|
|
|
-#endif // USE_DHT
|
|
|
-
|
|
|
/* Timer2 - refresh Nixie values */
|
|
|
TCCR2 = TIMER2_CS;
|
|
|
TCNT2 = TIMER2_CNT;
|
|
@@ -320,116 +277,6 @@ void dotOnPersistent(void) {
|
|
|
PORTD |= DOT_PIN;
|
|
|
}
|
|
|
|
|
|
-#ifdef USE_DHT
|
|
|
-static void dhtStart(void) {
|
|
|
- RTOS_SetTask(dhtProcess, 2, 0);
|
|
|
- DHT_PIN_LOW;
|
|
|
-}
|
|
|
-
|
|
|
-static void dhtProcess(void) {
|
|
|
- uint8_t cnt1, cnt2, buf;
|
|
|
- uint16_t tcnt_old, hmdt, tmprtr;
|
|
|
-
|
|
|
- DHT_PIN_INPUT;
|
|
|
- TCNT1 = 0;
|
|
|
-
|
|
|
- // ждём первого "0"
|
|
|
- while(bit_is_set(PINB, PB0) && TCNT1<DHT_TOUT1);
|
|
|
- if (TCNT1 >= DHT_TOUT1) {
|
|
|
- RTOS_SetTask(dhtNoAck, 0, 0);
|
|
|
- return;
|
|
|
- }
|
|
|
- // white for end of preamble
|
|
|
- while(bit_is_clear(PINB, PB0));
|
|
|
- while(bit_is_set(PINB, PB0) && TCNT1<DHT_TIMEOUT);
|
|
|
- if (TCNT1 >= DHT_TIMEOUT) {
|
|
|
- RTOS_SetTask(dhtTimeout, 0, 0);
|
|
|
- }
|
|
|
- hmdt = 0; tmprtr = 0;
|
|
|
- for (cnt1=0; cnt1<32; cnt1+=8) { // 0 8 16 24 32
|
|
|
- buf = 0;
|
|
|
- for (cnt2=0; cnt2<8; cnt2++) {
|
|
|
- buf <<= 1;
|
|
|
- // "0", начало периода
|
|
|
- while(bit_is_clear(PINB, PB0)); // ждём начало импульса
|
|
|
- tcnt_old = TCNT1; // начало импульса
|
|
|
- while(bit_is_set(PINB, PB0) && TCNT1<DHT_TIMEOUT); // ждём конец импульса
|
|
|
- if ((TCNT1 - tcnt_old) > 10) {
|
|
|
- buf |= 1;
|
|
|
- }
|
|
|
- }
|
|
|
- switch (cnt1) {
|
|
|
- case 0:
|
|
|
- hmdt = buf << 8;
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- hmdt |= buf;
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- tmprtr = buf << 8;
|
|
|
- break;
|
|
|
- case 24:
|
|
|
- tmprtr |= buf;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (TCNT1 >= DHT_TIMEOUT) {
|
|
|
- RTOS_SetTask(dhtTimeout, 0, 0);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- dhtData.Humidity = (uint8_t)((hmdt + 5) / 10);
|
|
|
- dhtData.Temperature = tmprtr;
|
|
|
-
|
|
|
- RTOS_SetTask(dhtEnd, 0, 0);
|
|
|
-}
|
|
|
-
|
|
|
-static void dhtEnd(void) {
|
|
|
-#ifdef USE_UART
|
|
|
- char buffer[6];
|
|
|
-
|
|
|
- usart_puts("Humidity: ");
|
|
|
- itoa(dhtData.Humidity, buffer, 10);
|
|
|
- usart_puts(buffer);
|
|
|
- usart_puts(" %\t\t");
|
|
|
-
|
|
|
- usart_puts("Temperature: ");
|
|
|
- itoa(dhtData.Temperature/10, buffer, 10);
|
|
|
- usart_puts(buffer);
|
|
|
- usart_putc('.');
|
|
|
- itoa(dhtData.Temperature%10, buffer, 10);
|
|
|
- usart_puts(buffer);
|
|
|
- usart_puts("oC\r\n");
|
|
|
-#endif // USE_UART
|
|
|
-}
|
|
|
-
|
|
|
-static void dhtNoAck(void) {
|
|
|
-#ifdef USE_UART
|
|
|
- usart_puts("DHT22 no ACK occurred.\r\n");
|
|
|
-#endif // USE_UART
|
|
|
-}
|
|
|
-
|
|
|
-static void dhtTimeout(void) {
|
|
|
-#ifdef USE_UART
|
|
|
- usart_puts("DHT22 Timeout occurred.\r\n");
|
|
|
-#endif // USE_UART
|
|
|
-}
|
|
|
-
|
|
|
-void showTemperature(void) {
|
|
|
- uint8_t a = dhtData.Temperature / 10;
|
|
|
- uint8_t b = dhtData.Temperature % 10;
|
|
|
- Digit[0] = a / 10;
|
|
|
- Digit[1] = a % 10;
|
|
|
- Digit[2] = b;
|
|
|
- Digit[3] = DIGIT_BLANK;
|
|
|
-}
|
|
|
-
|
|
|
-void showHumidity(void) {
|
|
|
- Digit[0] = DIGIT_BLANK;
|
|
|
- Digit[1] = DIGIT_BLANK;
|
|
|
- Digit[2] = dhtData.Humidity / 10;
|
|
|
- Digit[3] = dhtData.Humidity % 10;}
|
|
|
-#endif // USE_DHT
|
|
|
|
|
|
/**
|
|
|
* @brief Обработка кнопок.
|