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);
}
}
Eh bien, à la fin:

Et, à la demande des travailleurs, vidéo:
PS. Cependant, il y avait des questions pour les plus expérimentés:
1) - Pourquoi ai-je dû utiliser l'anode supplémentaire et la cathode supplémentaire pour stabiliser le point de référence au début de l'échelle, mais pour d'autres, il n'est pas utilisé et rien n'est cassé? Selon le manuel, ils sont nécessaires.
2) - Fréquence de mise à jour. Dans quelle mesure est-il recommandé au-dessus / en dessous?
Je serai heureux de répondre dans les commentaires. Remercier.