uint8_t kol = 16; // количество лучей;
uint8_t iter = 30; // Число раз считывания с аналогового порта
uint8_t alarm = 0; // Флаг тревоги.
uint16_t reference[16] = {0}; // Массив данных по лучам
uint16_t average = 0; // Среднее значение считанного
// -------------------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT); // Индикатор работы
uint16_t average = 0; // Среднее значение данных по лучу
// Калибровка данных по kol лучам
for (uint8_t i = 0; i < kol; i++)// Цикл по лучам
{
// функциzя установки адреса луча !!! Здесь пропущена
average = readRey(); // Чтение аналогового порта iter раз
reference[i] = average; // Запись среднего в массив по лучу.
}
digitalWrite(13, ! digitalRead(13)); // Мигаем для контроля
}
// -------------------------------------------------------------------------------------
void loop() {
// Основная работа после калибровки.
for (uint8_t i = 0; i < kol; i++) // Цикл по лучам kol раз
{
// функциzя установки адреса луча !!! Здесь пропущена
average = readRey(); // на функцию чтение аналогового порта iter раз
alarm = reference[i] - average; // разница между калибровкой и считанным
// Для отладки вывод сравнения из массива и считанного
Serial.print(i); Serial.print(":"); Serial.print(reference[i]); Serial.print("-");
Serial.print(average); Serial.print(" = "); Serial.println(alarm);
// Функция обработки сигнала тревоги !!! Здесь нет
}
digitalWrite(13, ! digitalRead(13)); // Мигаем для контроля
Serial.println(); // Для отладки
}// конец loop()
// ======================================================================================
uint16_t readRey() // Чтение и усреднение данных по лучу
// Используется глобальная переменная iter
// Возврат среднее значенияе
{
uint16_t dat = 0;
for (uint8_t i = 0; i < iter; i++)
{
delay(5); // для устранения переходных процессов
dat = dat + analogRead(0); //Чтение с 0 аналоговога порта
}
dat = dat / iter;
return dat; // вернули среднее значение считанного
}