/
Example_02_INPUT2.ino
133 lines (101 loc) · 4.46 KB
/
Example_02_INPUT2.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/******************************************************************************
Example_02_INPUT2.ino
Demonstrates analog audio input (on INPUT2s), sets volume control, and
headphone output on the WM8960 Codec.
Audio should be connected to both the left and right "INPUT2" inputs,
they are labeled "RIN2" and "LIN2" on the board.
This example will pass your audio source through the mixers and gain stages of
the codec using all of the analog bypass paths.
It will output the sound on the headphone outputs.
It is setup to do a capless headphone setup, so connect your headphones ground
to "OUT3" and this provides a buffered VMID.
You can now control the volume of the codecs built in headphone buffers using
this function:
codec.setHeadphoneVolumeDB(6.00); Valid inputs are -74.00 (MUTE) up to +6.00,
(1.00dB steps).
Development platform used:
SparkFun ESP32 IoT RedBoard v10
HARDWARE CONNECTIONS
**********************
ESP32 ------- CODEC
**********************
QWIIC ------- QWIIC *Note this connects GND/3.3V/SDA/SCL
GND --------- GND *optional, but not a bad idea
5V ---------- VIN *needed to power codec's onboard AVDD (3.3V vreg)
**********************
CODEC ------- AUDIO IN
**********************
GND --------- TRS INPUT SLEEVE *ground for line level input
LINPUT2 ----- TRS INPUT TIP *left audio
RINPUT2 ----- TRS INPUT RING1 *right audio
**********************
CODEC -------- AUDIO OUT
**********************
OUT3 --------- TRS OUTPUT SLEEVE *buffered "vmid" (aka "HP GND")
HPL ---------- TRS OUTPUT TIP *left HP output
HPR ---------- TRS OUTPUT RING1 *right HP output
Pete Lewis @ SparkFun Electronics
October 14th, 2022
https://github.com/sparkfun/SparkFun_WM8960_Arduino_Library
This code was created using some code by Mike Grusin at SparkFun Electronics
Included with the LilyPad MP3 example code found here:
Revision history: version 1.0 2012/07/24 MDG Initial release
https://github.com/sparkfun/LilyPad_MP3_Player
Do you like this library? Help support SparkFun. Buy a board!
SparkFun Audio Codec Breakout - WM8960 (QWIIC)
https://www.sparkfun.com/products/21250
All functions return 1 if the read/write was successful, and 0
if there was a communications failure. You can ignore the return value
if you just don't care anymore.
For information on the data sent to and received from the CODEC,
refer to the WM8960 datasheet at:
https://github.com/sparkfun/SparkFun_Audio_Codec_Breakout_WM8960/blob/main/Documents/WM8960_datasheet_v4.2.pdf
This code is released under the [MIT License](http://opensource.org/licenses/MIT).
Please review the LICENSE.md file included with this example. If you have any questions
or concerns with licensing, please contact techsupport@sparkfun.com.
Distributed as-is; no warranty is given.
******************************************************************************/
#include <Wire.h>
#include <SparkFun_WM8960_Arduino_Library.h>
// Click here to get the library: http://librarymanager/All#SparkFun_WM8960
WM8960 codec;
void setup()
{
Serial.begin(115200);
Serial.println("Example 2 - INPUT2");
Wire.begin();
if (codec.begin() == false) //Begin communication over I2C
{
Serial.println("The device did not respond. Please check wiring.");
while (1); // Freeze
}
Serial.println("Device is connected properly.");
// General setup needed
codec.enableVREF();
codec.enableVMID();
// Setup signal flow through the analog audio bypass connections
// Set input boosts to get INPUT2 (both left and right) to the boost mixers
codec.setLIN2BOOST(WM8960_BOOST_MIXER_GAIN_0DB);
codec.setRIN2BOOST(WM8960_BOOST_MIXER_GAIN_0DB);
// Enable input boost mixers
codec.enableAINL();
codec.enableAINR();
// Connect LB2LO (booster to output mixer [aka analog bypass])
codec.enableLB2LO();
codec.enableRB2RO();
// Set gainstage between boost mixer and output mixers (analog bypass)
codec.setLB2LOVOL(WM8960_OUTPUT_MIXER_GAIN_0DB);
codec.setRB2ROVOL(WM8960_OUTPUT_MIXER_GAIN_0DB);
// Enable output mixers
codec.enableLOMIX();
codec.enableROMIX();
codec.enableHeadphones();
codec.enableOUT3MIX(); // Provides VMID as buffer for headphone ground
Serial.println("Volume set to +0dB");
codec.setHeadphoneVolumeDB(0.00);
Serial.println("Example complete. Listen to inputs 2 on headphone outputs.");
}
void loop()
{
// Nothing to see here.
}