src.nth.io/

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md59
-rw-r--r--main/src/bell.c52
2 files changed, 88 insertions, 23 deletions
diff --git a/README.md b/README.md
index 90348ae..0959a02 100644
--- a/README.md
+++ b/README.md
@@ -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;
}