zotos пишет:
Не пойму логики смысла строки
if ((abs(val_sm - val_sm_old)) > 3)
в вашем коде.
...
В чем тайный смысл этой строки кода?
Это "зона нечувствительности" в реакции кода по ADC (вход для S-метра) в отправка данных по Wire I2C.
Смысл для:
1. разгрузки микроконтроллера (во времени: для возможност будущих функциях и действиях).
2. уменшения помех из I2C при передаче данных.
Для чего отправлять данные, если они не изменились? Для чего делаем внутренние шумовые помехи в корпусе устройство, если данни без изменений?
(x - x_old), которое часто используется (как триггер) неприложимо из-за шума и флуктуации (в 1 бит) на шине АЦП. Поэтому я выбрал разницу "3" (или значение (нов - стар) > 3 из 2^10 или 1024 значения).
---
Ниже приведен частотный спектр данных, передаваемых по I2C шине (приемик на RTL2832 + 50 MHz конв. с антеннa-кабель до SDA и SCL). По правило: спектр широкополосный, причем полоса повторяются (в основном: главно нечетные гармоники) "до бесконечности" x 100 kHz -> 100 kHz, 300 kHz, 500 kHz ...
zotos пишет:
... в конце концов вообще удалил эту строку ...
Удаляете код. Вы решаете. Это не изменит логику в целом.