Подключение нескольких датчиков тока YHDC SCT-013 к Ардуино

Так d это смещение, постоянная составляющая. Должна быть a равна 3.

Если знать постоянную составляющую, то Вы совершенно правы, но не совсем по любой точке.

Если мы знаем точку (x1, y1) и постоянную составляющую c, то из уравнения:

image

Сразу имеем, что амплитуда равна:

image

Как видите, надо только следить – те точки, в которых знаменатель равен нулю, нужно отбрасывать, они не походят.

Ну да, в теории так и есть. На практике ведь нет точек, при которых знаменатель равен нулю. Мы не можем это чисто физически)
Хотя…
Да, в момент, кратный полупериоду, можно таки попасть в просак ноль.

У нас нет перехода через ноль. У нас однополярный сигнал.

Посмотрите на знаменатель в решении из №42. В самой функции (там выше) не бывает нуля за счёт постоянной составляющей. А вот у знаменателя из решения есть переход через 0 (там ведь обычный синус) и именно он создаёт проблемы. Его надо избегать.

В программе я проверяю знаменатель.

Ну, даже не знаю. Набросал сейчас по-быстрому …

Вот здесь источника 2В (возле него написано) через делитель пополам, даёт амплитуду 1В, которую мы и наблюдаем и на осциллограмме, и в мониторе порта.

И, да, замеры здесь делаются через случайные промежутки времени. Если точка неудачна, там внутри функции measureAC есть цикл ожидания пока она от нуля отойдёт.

void loop(void) {
	// Интервал между замерами от полусекунды, до полутора секунд
	delay(random(500, 1500));
	measureAC();	// замер
}

А MeasureAC() чья функция? Из какой библиотеки?

Своя. Измеряет и в сериал выводит.