#include "Params.h"
#include "Chart.h"
#include "BarChart.h"
void setup() {
oled.init();
Wire.setClock(800000L);
oled.clear();
ChartInit();
BarChartInit();
}
uint8_t _oldVal = 0;
#if UPDATE_INTERVAL >= 0
unsigned long previousMillis = 0;
#endif
/*
Корректировка значения
Здесь можно перевести входные данные в Децибелы (линейная регрессия)
Пример как вычисляют параметры линейной регрессии можно найти тут
=> https://microkontroller.ru/arduino-projects/izmerenie-urovnya-zvuka-shuma-v-deczibelah-s-pomoshhyu-arduino-i-mikrofona
*/
inline uint16_t correctVal(uint16_t val){
return val;
}
void loop() {
#if UPDATE_INTERVAL >= 0
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > UPDATE_INTERVAL) {
previousMillis = currentMillis;
#endif
uint16_t val = correctVal(analogRead(PIN_MICROPHONE));
ChartUpdate(val);
BarChartUpdate(val);
if(val != _oldVal){
oled.setCursorXY(CORRECT_POS_X(TEXT_POS_X), CORRECT_POS_Y(TEXT_POS_Y));
char buffer[5];
snprintf(buffer,sizeof(buffer), "%04d", val);
oled.print(buffer);
oled.update(OLED_RECT_PARAMS(
CORRECT_POS_X(0),
CORRECT_POS_Y(0),
CORRECT_POS_X(TEXT_POS_X + 32),
CORRECT_POS_Y(TEXT_POS_Y + 8)
));
_oldVal = val;
}
#if UPDATE_INTERVAL >= 0
}
#endif
}