CTRL_REG1 = 0100 0111 ... 100 Hz, active, 2G scale, normal mode (not selftest), ZYX dataready signal enabled
CTRL_REG2 = 0000 0000 ... filter bypassed
CTRL_REG3 = 1100 0000 ... do not use int pins
CLICK_THSY_X = xxxx xxxx ... пороги по осям Y и X
CLICK_THSZ = 0000 xxxx ... порог по оси Z
CLICK_TimeLimit = 0xFF ... см. AN2768 на сайте производителя
CLICK_CFG= 010x 0x0x ... latch irq (i.e. keep until CLICK_SRC is read), прерывание по одиночному клику Z, Y или X
loop:
читаем CLICK_SRC
включаем лампочку, если в прочитанном установлен бит #X ... где X=0, 2 или 4 (соответственно по оси X, Y или Z клик)
длиннаяпауза
выключаем лампочку
goto loop
---
Баг:
а).
если порог по оси Y и/или Z равен 0000 - тогда клик по оси X не увижу никогда, хоть обнастраиваюсь его порогом
иначе клик определяется по превышению порога = min(thsX, thsZ) ... хотя, казалось бы - при чём тут ось Z ?
б).
если порог по оси X и/или Z равен 0000 - тогда клик по оси Y не увижу никогда, хоть обнастраиваюсь его порогом
иначе клик определяется по превышению порога = thsX (младшая тетрада регистра CLICK_THSY_X) ... так X или Y, какая ось-то ?
в).
если порог по оси X и/или Y равен 0000 - тогда клик по оси Z не увижу никогда, хоть обнастраиваюсь его порогом
иначе клик определяется по превышению порога = min(thsY, thsZ) ... хотя, казалось бы - при чём тут ось Y ?
---
... такой вот развесистый баг получился. Мутант.
Если оно правда, то надо что ли производителю это самое. Ну там документацию поправить для аккуратности и (особенно) неумножения граблей на ровном месте для знакомящихся с, как бы, продуктом. Хотя как это всё сдокументировать...
Иначе надо не производителю, а мне у себя в сабже смазать что полагается и публичное открытие америков устраивать не.
... а там дальше ещё и двойные клики же. Которые тоже "раздельно по осям". И их тоже