2.VU-Meter-OLED-USB-DAC
This example shows the usage of the AudioVU and AnalogVUDisplay classes of the Control Surface library.
It displays two analog-style VU meters on two 128×64 OLED displays.
The VU meters imitate the inertia and ballistics of real analog VU meters.
It acts as a USB Audio DAC (Digital-to-Analog Converter).
- Boards: 🛈
- Teensy 3.x
Connections
- A0: wiper of a potentiometer to change the output volume
- A1: wiper of a potentiometer to change the VU gain
- 9: BCK (I²S)
- 11: SCK (I²S)
- 22: DIN (I²S)
- 23: LRCK (I²S)
- 7: OLED Data/D1 (SPI MOSI)
- 13: OLED Clock/D0 (SPI SCK)
- 17: OLED Data/Command
- 10: Left OLED Cable Select
- 18: Right OLED Cable Select
Add a capacitor between the reset pin of the displays and ground, and a resistor from reset to 3.3V. The values are not critical, 0.1µF and 10kΩ work fine.
You do need some way to reset the displays, without it, it won't work.
Alternatively, you could use an IO pin from the Teensy to reset the displays, but this just "wastes" a pin.
Behavior
Upload the sketch, and select the Control Surface as the audio output of your computer. Connect the output of the DAC to a pair of headphones or powered speakers, and play some music.
You should see the VU meters come to life and jump around to the music.
You can now adjust the volume using the potentiometer on pin A0, and the gain/sensitivity of the meters using the potentiometer on pin A1.
Mapping
None.
Demo
Written by PieterP, 2019-08-09
https://github.com/tttapa/Control-Surface
};
};
public:
if (!disp.begin())
#ifdef DIGITAL_VU
disp.setRotation(1);
#endif
}
#ifdef DIGITAL_VU
#else
{63, 63},
63,
};
};
#endif
constexpr float maxGain = 5;
}
void loop() {
}
float gain =
gainKnob.getFloatValue() * maxGain;
}
}
The main header file that includes all Control-Surface header files.
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
constexpr uint8_t MAX_FPS
The maximum frame rate of the displays.
A class that reads and filters an analog input.
static void setupADC()
Select the configured ADC resolution.
A super class for object that have to be updated regularly.
A VU meter that reads from an Audio stream using the Analyzer class.
void updateDisplays()
Clear, draw and display all displays that contain display elements that have changed.
virtual void begin()
Initialize the display.
Displays a MCU level meter.
static MovingCoilBallistics noOvershoot(float Tsfactor=1.0)
static MovingCoilBallistics responsiveVU(float Tsfactor=2.0)
This class creates a mapping between the Adafruit_SSD1306 display driver and the general display inte...
void drawBackground() override=0
Draw a custom background.
A class for controlling the volume of AudioMixer4 objects using a potentiometer.
Array< T, N > copyAs(const Array< U, N > &src)
Copy an Array to an Array of a different type.
#define FATAL_ERROR(msg, errc)
Print the error message and error code, and stop the execution.
static constexpr Frequency SPI_MAX_SPEED