#include <Adafruit_SSD1306.h>
#include <Wire.h>
#define PIN_QUIET 4
#define PIN_MODERATE 6
#define PIN_LOUD 23
#define SENSOR_PIN 26
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int sampleWindow = 50;
unsigned int sample;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
// pinMode(PIN_LOUD, OUTPUT);
// pinMode(PIN_MODERATE, OUTPUT);
// pinMode(PIN_QUIET, OUTPUT);
// digitalWrite(PIN_LOUD, HIGH);
// digitalWrite(PIN_MODERATE, HIGH);
// digitalWrite(PIN_QUIET, HIGH);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.display();
}
void loop() {
// put your main code here, to run repeatedly:
unsigned long startMillis = millis();
float peakToPeak = 0;
unsigned int signalMax = 0;
unsigned int signalMin = 4095;
// collect data for 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(SENSOR_PIN);
//Serial.println(sample);
}
if (sample <= 2000)
{
digitalWrite(PIN_QUIET, HIGH);
digitalWrite(PIN_MODERATE, LOW);
digitalWrite(PIN_LOUD, LOW);
display.clearDisplay();
display.setCursor(0, 1);
display.print("Level:Quite");
display.display();
}
else if ((sample > 2000) && (sample <= 3000))
{
digitalWrite(PIN_QUIET, LOW);
digitalWrite(PIN_MODERATE, HIGH);
digitalWrite(PIN_LOUD, LOW);
display.clearDisplay();
display.setCursor(0, 1);
display.print("Level:Moderate");
display.display();
}
else
{
digitalWrite(PIN_QUIET, LOW);
digitalWrite(PIN_MODERATE, LOW);
digitalWrite(PIN_LOUD, HIGH);
display.clearDisplay();
display.setCursor(0, 1);
display.print("Level:Loud");
display.display();
}
delay(200);
}