//ПОТЕНЦИОМЕТР:
const byte pin_pot = A0; // задали аналоговый вход А0 для средней ножки потенциометра (с неё будут считываться показания потенциометра)
//ПЕРЕМЕННЫЕ ДЛЯ ПОТЕНЦИОМЕТРА:
int val_pot_Bad = 0; //переменная для хранения текущих значений потенциометра (которые берутся прямо с ножки потенциометра и постоянно скачут туда-сюда)
int val_pot_Real = 0; //переменная для хранения прошлого реального значения потенциометра, которое прошло мою обработку по устранению дребезга
int val;
int i;
int masPot[200]; //объявили массив из элементов 0 - 100
int masPotCol = 200; //задали кол-во элементов в этом массиве (чтобы, если захочу изменить кол-во, потом не пришлось в куче мест исправлять. Достаточно исправить только в этих двух строках)
void setup() {
Serial.begin(9600); //инициализировали функцию для вывода инфы в монитор компа (она нужна только для отладки. Потом можно удалить)
//А для вывода инфы в монитор команда: Serial.print(); или Serial.println(); (вторая с переходом к новой строке)
}
void loop() {
//сдвинем элементы массива на шаг к последнему элементу (т.е. первый станет вторым, второй третим )
for (int i = masPotCol-1; i >= 1; i--) { //переберем элементы массива в обратном порядке
masPot[i] = masPot[i-1];
}
//теперь все элементы сдвинуты на шаг дальше, осталось заполнить элемент [0]
val_pot_Bad = analogRead(pin_pot); //получим значение с средней ножки потенциометра (от 0 до 1023)(это значение плохое. Оно всё время скачет туда-сюда из-за дребезга контактов)
//(на ножке будет от 0 до 5В, но функция возвратит от 0 до 1023, где 0 соответствует 0В, 1023 соответствует 5В.
masPot[0] = val_pot_Bad;
//теперь массив masPot заполнен последними значениями потенциометра, где masPot[0] - самое последнее значение, masPot[1] - получено в прошлый проход цикла loop, masPot[1] - получено в позапрошлый проход цикла loop и т.д.
long sred=0; //int - м/б до 32767 это 32 раза по 1023. long - до 2 147 483 647 это миллион по 1023
for (int i = 0; i <= masPotCol-1; i++) {
sred = sred + masPot[i];
}
sred=sred/masPotCol;
Serial.println(sred);
/*
Serial.println("шаг-----------------");
for (int i = 0; i <= masPotCol-1; i++) {
Serial.println(masPot[i]);
}
*/
/*
//======================================
//УСТРАНЯЕМ ДРЕБЕЗГ ПОТЕНЦИОМЕТРА:
//======================================
if (indMasPot <= 29) { //если массив не до конца заполнен
masPot[indMasPot] = val_pot_Bad; //присвоили элементу массива значение потенциометра
indMasPot = indMasPot + 1; //увеличим индекс массива
} else { //если заполнили весь массив значениями потенциометра
indMasPot = 0; //обнулим счётчик элементов массива
//если все элементы массива БОЛЬШЕ старого РЕАЛЬНОГО значения потенциометра (т.е. 100% мы увеличили яркость)
// или все элементы массива МЕНЬШЕ старого РЕАЛЬНОГО значения потенциометра (т.е. 100% мы уменьшили яркость)
if ((masPot[0] > val_pot_Real && masPot[1] > val_pot_Real && masPot[2] > val_pot_Real && masPot[3] > val_pot_Real && masPot[4] > val_pot_Real && masPot[5] > val_pot_Real && masPot[6] > val_pot_Real && masPot[7] > val_pot_Real && masPot[8] > val_pot_Real && masPot[9] > val_pot_Real && masPot[10] > val_pot_Real && masPot[11] > val_pot_Real && masPot[12] > val_pot_Real && masPot[13] > val_pot_Real && masPot[14] > val_pot_Real && masPot[15] > val_pot_Real && masPot[16] > val_pot_Real && masPot[17] > val_pot_Real && masPot[18] > val_pot_Real && masPot[19] > val_pot_Real && masPot[20] > val_pot_Real && masPot[21] > val_pot_Real && masPot[22] > val_pot_Real && masPot[23] > val_pot_Real && masPot[24] > val_pot_Real && masPot[25] > val_pot_Real && masPot[26] > val_pot_Real && masPot[27] > val_pot_Real && masPot[28] > val_pot_Real && masPot[29] > val_pot_Real) ||
(masPot[0] < val_pot_Real && masPot[1] < val_pot_Real && masPot[2] < val_pot_Real && masPot[3] < val_pot_Real && masPot[4] < val_pot_Real && masPot[5] < val_pot_Real && masPot[6] < val_pot_Real && masPot[7] < val_pot_Real && masPot[8] < val_pot_Real && masPot[9] < val_pot_Real && masPot[10] < val_pot_Real && masPot[11] < val_pot_Real && masPot[12] < val_pot_Real && masPot[13] < val_pot_Real && masPot[14] < val_pot_Real && masPot[15] < val_pot_Real && masPot[16] < val_pot_Real && masPot[17] < val_pot_Real && masPot[18] < val_pot_Real && masPot[19] < val_pot_Real && masPot[20] < val_pot_Real && masPot[21] < val_pot_Real && masPot[22] < val_pot_Real && masPot[23] < val_pot_Real && masPot[24] < val_pot_Real && masPot[25] < val_pot_Real && masPot[26] < val_pot_Real && masPot[27] < val_pot_Real && masPot[28] < val_pot_Real && masPot[29] < val_pot_Real)) {
//присвоим среднее значение из этого массива:
val_pot_Real = (masPot[0] + masPot[1] + masPot[2] + masPot[3] + masPot[4] + masPot[5] + masPot[6] + masPot[7] + masPot[8] + masPot[9] + masPot[10] + masPot[11] + masPot[12] + masPot[13] + masPot[14] + masPot[15] + masPot[16] + masPot[17] + masPot[18] + masPot[19]) / 20;
} //конец (если все элементы массива ...)
} //конец (indMasPot <= 29)
//теперь val_pot_Real содержит реальное значение потенциометра без дребезга контактов (от 0 до 1023)
*/
//Serial.print(i);
//Serial.print(" - ");
//Serial.println(masPot[i]);
//увеличим счётчик массива
//if (i<100){
// i=i+1;
// }else{
// i=0;
// }
delay(8);
}