Library Lobby Noise Signal Light - Raw Arduino Code


int thresholdLow = 4;  // triggers the yellow light
int thresholdHigh = 8; // triggers the red light

int ledGreen = 11;
int ledYellow = 12;
int ledRed = 13;

int fnd[] = {2, 3, 4, 5, 6, 7, 8, 9}; // 7-digit segment
byte num[10][8] = {
    {1, 1, 0, 0, 0, 0, 0, 0},
    {1, 1, 1, 1, 1, 0, 0, 1},
    {1, 0, 1, 0, 0, 1, 0, 0},
    {1, 0, 1, 1, 0, 0, 0, 0},
    {1, 0, 0, 1, 1, 0, 0, 1},
    {1, 0, 0, 1, 0, 0, 1, 0},
    {1, 0, 0, 0, 0, 0, 1, 0},
    {1, 1, 1, 1, 1, 0, 0, 0},
    {1, 0, 0, 0, 0, 0, 0, 0},
    {1, 0, 0, 1, 0, 0, 0, 0},
};

int mapped;
const int sampleWindow = 3; // sampling time
unsigned int sample;

void setup()
{
  Serial.begin(9600);
  pinMode(ledGreen, OUTPUT);
  pinMode(ledYellow, OUTPUT);
  pinMode(ledRed, OUTPUT);
  digitalWrite(ledGreen, HIGH);

  for (int i = 0; i < 8; i++)
  {
    pinMode(fnd[i], OUTPUT);
  }
}

void loop()
{
  unsigned long startMillis = millis(); // start sampling
  unsigned int peakToPeak = 0;

  unsigned int signalMax = 0;
  unsigned int signalMin = 1024;

  // read the Max. and Min. of decibels
  while (millis() - startMillis < sampleWindow)
  {
    sample = analogRead(A0);
    if (sample < 1024) // toss out spurious readings
    {
      if (sample > signalMax)
      {
        signalMax = sample; // save just the max levels
      }
      else if (sample < signalMin)
      {
        signalMin = sample; // save just the min levels
      }
    }
  }
  peakToPeak = signalMax - signalMin; // calculate the average
  double volts = peakToPeak * 25;     // transform it to real levels

  constrain(mapped, 0, 9);
  mapped = map(volts, 0, 250, 0, 9);

  Serial.println(volts);

  for (int i = 0; i < 8; i++)
  {
    if (mapped == 9)
    {
      digitalWrite(fnd[i], num[9][i]);
    }
    else
    {
      digitalWrite(fnd[i], num[mapped][i]);
    }
  }
  if ((mapped >= thresholdLow) and (mapped <= thresholdHigh))
  {
    digitalWrite(ledYellow, HIGH);
    digitalWrite(ledGreen, LOW);
    delay(1500);
    digitalWrite(ledYellow, LOW);
    digitalWrite(ledGreen, HIGH);
  }
  if (mapped >= thresholdHigh)
  {
    for (int i = 0; i < 8; i++)
    {
      digitalWrite(fnd[i], num[9][i]);
    }
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledRed, HIGH);
    delay(300);
    digitalWrite(ledRed, LOW);
    delay(300);
    digitalWrite(ledRed, HIGH);
    delay(300);
    digitalWrite(ledRed, LOW);
    delay(300);
    digitalWrite(ledRed, HIGH);
    delay(3000);
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, HIGH);
  }

  delay(150);
}
    

Alternatively, you can download the .ino file.