int Avg1[SumCounterMax];
int Avg2[SumCounterMax];
byte nAvg = 0;
const byte Log_Conv[256] = {0,2,4,5,7,9,10,12,13,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,33,34,35,36,37,37,38,39,40,40,41,42,42,43,44,44,45,45,46,47,47,48,48,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,57,58,58,59,59,60,60,60,61,61,62,62,63,63,63,64,64,64,65,65,66,66,66,67,67,67,68,68,68,69,69,69,70,70,70,71,71,72,73,73,73,74,74,74,74,75,75,75,76,76,76,76,77,77,77,78,78,78,78,79,79,79,79,80,81,81,82,82,82,82,83,83,83,83,84,84,84,84,84,85,85,86,86,87,87,87,87,88,88,88,88,88,89,89,89,89,90,90,90,90,90,91,91,91,91,92,93,93,93,93,93,94,94,94,94,94,95,95,95,95,95,96,96,96,96,96,96,97,97,97,97,97,98,98,98,98,98,98,99,99,99,100,100,100,101,101,101,101,101,101,102,102,102,102,102,102,103,103,103,103,103,103,104,104,104,104,104,104,104,105,105,105,105,105,105,106,106,106,106,106,106,106,107,107,107,107,107,107,107};
void setup()
{
pinMode(pA1, OUTPUT);
pinMode(pA2, OUTPUT);
pinMode(pK1, OUTPUT);
pinMode(pK2, OUTPUT);
pinMode(pK3, OUTPUT);
pinMode(pKR, OUTPUT);
digitalWrite(pA1, LOW);
digitalWrite(pA2, LOW);
digitalWrite(pK1, LOW);
digitalWrite(pK2, LOW);
digitalWrite(pK3, LOW);
digitalWrite(pA1, LOW);
digitalWrite(pA2, LOW);
digitalWrite(pKR, HIGH);
delay(100);
analogReference(INTERNAL);
}
void loop()
{
//reset
digitalWrite(pA1, LOW);
digitalWrite(pA2, LOW);
digitalWrite(pK1, LOW);
digitalWrite(pK2, LOW);
digitalWrite(pK3, LOW);
digitalWrite(pA1, LOW);
digitalWrite(pA2, LOW);
// "" .
digitalWrite(pKR, HIGH);
digitalWrite(pA1, HIGH);
digitalWrite(pA2, HIGH);
// . * =)
nAvg ++;
if (nAvg == SumCounterMax)
{
nAvg = 0;
}
Avg1[nAvg] = min(analogRead(4) * InputMultiplier, 255);
Avg2[nAvg] = min(analogRead(5) * InputMultiplier, 255);
unsigned long sn1 = 0;
unsigned long sn2 = 0;
for(byte i = 0; i < SumCounterMax; i++)
{
sn1 += Avg1[i];
sn2 += Avg2[i];
}
int n1 = Log_Conv[sn1 / SumCounterMax];
int n2 = Log_Conv[sn2 / SumCounterMax];
// - .
for (int i = 0; i < max(max(n1, n2), 60) ; i++)
{
if ((i + 0) % 3 == 0)
{
digitalWrite(pK1, HIGH);
digitalWrite(pKR, LOW);
digitalWrite(pK3, LOW);
}
if ((i + 2) % 3 == 0)
{
digitalWrite(pK2, HIGH);
digitalWrite(pK1, LOW);
}
if ((i + 1) % 3 == 0)
{
digitalWrite(pK3, HIGH);
digitalWrite(pK2, LOW);
}
if (i > n1)
{
digitalWrite(pA1, LOW);
}
if (i > n2)
{
digitalWrite(pA2, LOW);
}
delayMicroseconds(90);
}
}
Nun, am Ende:

Und auf Wunsch der Arbeiter Video:
PS. Es gab jedoch Fragen für erfahrene:
1) - Warum musste ich die zusätzliche Anode und die zusätzliche Kathode verwenden, um den Referenzpunkt am Anfang der Skala zu stabilisieren, aber für andere wird er nicht verwendet und nichts ist kaputt? Laut Handbuch werden sie benötigt.
2) - Aktualisierungsfrequenz. Wie kritisch ist es oben / unten empfohlen?
Gerne antworte ich in den Kommentaren. Danke.