diff options
| author | Luke Hoersten <[email protected]> | 2021-03-21 16:51:36 -0500 |
|---|---|---|
| committer | Luke Hoersten <[email protected]> | 2021-03-21 16:51:36 -0500 |
| commit | 70a4d7ab79f7579155a888be54e6d1ab55c780f9 (patch) | |
| tree | 77d057a0c5cf81344c06af16a73594bfc22ded6c | |
| parent | 64b699cd3151969fb3798e456ca6833edaf3c45a (diff) | |
Making progress on the doorbell.
| -rw-r--r-- | README.md | 59 | ||||
| -rw-r--r-- | main/src/bell.c | 52 |
2 files changed, 88 insertions, 23 deletions
@@ -17,6 +17,30 @@ in a teir. I haven't yet determined exactly how the buzzer indexes to the AC/DC high. When the buzzer is triggered, the ADC measures a voltage drop of about 20%. I'm assuming this is the DC component only measured by the ADC. +### AC + +- 52V +- Peak 73V +- 100kO, 12.2kO +- Peak 8V +- + +- f = 60 Hz +- C = 33 * 10^-6 + +4.7uF capacitor + + +### DC + +- 23V +- HI (2.475V, 3.6V) +- LO (-0.3V, 0.825V) + +- r1 = 100kO +- r2 = 10kO + 2.2kO + + ## Partition Sizing When flashing, the following error may occur: @@ -37,3 +61,38 @@ nvs, data, nvs, , 0x6000, phy_init, data, phy, , 0x1000, factory, app, factory, , 0x180000, # Change from 1M to 0x180000 ``` + + +## Doorbell ADC Output + +```I (65813) HAP Intercom: Intercom bell ring value in range [2960] +I (66813) HAP Intercom: Intercom bell ring value in range [2966] +I (67813) HAP Intercom: Intercom bell ring value in range [2957] +I (68813) HAP Intercom: Intercom bell ring value in range [2945] +I (69813) HAP Intercom: Intercom bell ring value in range [2953] +I (70813) HAP Intercom: Intercom bell ring value in range [2951] +I (71813) HAP Intercom: Intercom bell ring value in range [2959] +I (72813) HAP Intercom: Intercom bell ring value in range [2930] +I (73813) HAP Intercom: Intercom bell ring value in range [2951] +I (74813) HAP Intercom: Intercom bell ring value in range [2960] +I (75813) HAP Intercom: Intercom bell ring value in range [2978] +I (76813) HAP Intercom: Intercom bell ring value in range [2987] +I (77813) HAP Intercom: Intercom bell ring value in range [2949] +I (78813) HAP Intercom: Intercom bell ring value in range [2951] +I (79813) HAP Intercom: Intercom bell ring value in range [2929] +I (80813) HAP Intercom: Intercom bell ring value in range [2961] +I (81813) HAP Intercom: Intercom bell ring value in range [2960] +I (82813) HAP Intercom: Intercom bell ring value in range [2953] +I (83813) HAP Intercom: Intercom bell ring value in range [2957] +I (84813) HAP Intercom: Intercom bell ring value in range [2957] +I (85813) HAP Intercom: Intercom bell ring value in range [2705] +I (86813) HAP Intercom: Intercom bell ring value in range [2343] ---- start +I (87813) HAP Intercom: Intercom bell ring value in range [2343] +I (88813) HAP Intercom: Intercom bell ring value in range [2359] ---- stop +I (89813) HAP Intercom: Intercom bell ring value in range [2909] +I (90813) HAP Intercom: Intercom bell ring value in range [3045] +I (91813) HAP Intercom: Intercom bell ring value in range [2951] +I (92813) HAP Intercom: Intercom bell ring value in range [2959] +I (93813) HAP Intercom: Intercom bell ring value in range [2951] +I (94813) HAP Intercom: Intercom bell ring value in range [2949] +``` diff --git a/main/src/bell.c b/main/src/bell.c index cfe05a7..753b16e 100644 --- a/main/src/bell.c +++ b/main/src/bell.c @@ -10,8 +10,6 @@ #include <intercom.h> #include <bell.h> -#define ESP_INTR_FLAG_DEFAULT 0 - static hap_val_t HAP_PROGRAMMABLE_SWITCH_EVENT_SINGLE_PRESS = {.u = 0}; volatile bool is_intercom_bell_blocked; @@ -20,27 +18,33 @@ static hap_char_t *intercom_bell_current_state; bool is_bell_ringing(int val) { - return 1.2 < val && val < 2.5; + return 2340 < val && val < 2360; } -void IRAM_ATTR intercom_bell_isr(void *arg) +void intercom_bell_read() { - if (is_intercom_bell_blocked) - { - ESP_LOGI(TAG, "Intercom bell ring BLOCKED"); - return; - } - int val = adc1_get_raw(CONFIG_HOMEKIT_INTERCOM_BELL_ADC1_CHANNEL); + ESP_LOGI(TAG, "Intercom bell ring value in range [%d]", val); + if (is_bell_ringing(val)) - { - ESP_LOGI(TAG, "Intercom bell ring value in range [%d]", val); intercom_bell_ring(); - } - else +} + +/* static void intercom_bell_task(void *p) +{ + while (true) { - ESP_LOGI(TAG, "Intercom bell ring value out of range [%d]", val); + intercom_bell_read(); + vTaskDelay(100); } +} */ + +void IRAM_ATTR intercom_bell_isr(void *arg) +{ + if (is_intercom_bell_blocked) + ESP_LOGI(TAG, "Intercom bell ring BLOCKED"); + else + intercom_bell_read(); } void intercom_bell_ring() @@ -48,7 +52,7 @@ void intercom_bell_ring() ESP_LOGI(TAG, "Intercom bell ring"); hap_char_update_val(intercom_bell_current_state, &HAP_PROGRAMMABLE_SWITCH_EVENT_SINGLE_PRESS); is_intercom_bell_blocked = true; - xTimerReset(intercom_bell_timer, 10); + xTimerResetFromISR(intercom_bell_timer, 10); } void intercom_bell_timer_cb(TimerHandle_t timer) @@ -68,20 +72,22 @@ hap_serv_t *intercom_bell_init(uint32_t key_gpio_pin) gpio_config_t io_conf; - io_conf.intr_type = GPIO_INTR_NEGEDGE; /* Interrupt for rising edge */ - io_conf.pin_bit_mask = 1ULL << key_gpio_pin; /* Bit mask of the pins */ - io_conf.mode = GPIO_MODE_INPUT; /* Set as input mode */ - io_conf.pull_up_en = GPIO_PULLUP_DISABLE; /* Disable internal pull-up */ - io_conf.pull_down_en = GPIO_PULLDOWN_ENABLE; /* Enable internal pull-down */ + io_conf.intr_type = GPIO_INTR_NEGEDGE; /* Interrupt for rising edge */ + io_conf.pin_bit_mask = 1ULL << key_gpio_pin; /* Bit mask of the pins */ + io_conf.mode = GPIO_MODE_INPUT; /* Set as input mode */ + io_conf.pull_up_en = GPIO_PULLUP_DISABLE; /* Disable internal pull-up */ + io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE; /* Enable internal pull-down */ gpio_config(&io_conf); /* Set the GPIO configuration */ - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); /* Install gpio isr service */ + gpio_install_isr_service(ESP_INTR_FLAG_EDGE | ESP_INTR_FLAG_LOWMED); /* Install gpio isr service */ gpio_isr_handler_add(key_gpio_pin, intercom_bell_isr, (void *)key_gpio_pin); /* Hook isr handler for specified gpio pin */ // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html#_CPPv425adc1_config_channel_atten14adc1_channel_t11adc_atten_t adc1_config_width(ADC_WIDTH_BIT_12); - adc1_config_channel_atten(CONFIG_HOMEKIT_INTERCOM_BELL_ADC1_CHANNEL, ADC_ATTEN_DB_6); + adc1_config_channel_atten(CONFIG_HOMEKIT_INTERCOM_BELL_ADC1_CHANNEL, ADC_ATTEN_DB_11); + + //xTaskCreate(intercom_bell_task, INTERCOM_TASK_NAME, INTERCOM_TASK_STACKSIZE, NULL, INTERCOM_TASK_PRIORITY, NULL); return intercom_bell_service; } |
