-
Notifications
You must be signed in to change notification settings - Fork 5
Audio Example using 2 DACs on Teensy 3.5 or 3.6
MichaelMeissner edited this page Apr 1, 2020
·
2 revisions
This example shows how to use the Tonesweep example on the Teensy 3.5 or 3.6 with two DACs (digital to analog converter). The Teensy 3.5 and 3.6 DACs are not amplified.
/*
Demo of the audio sweep function.
The user specifies the amplitude,
start and end frequencies (which can sweep up or down)
and the length of time of the sweep.
Modified to eliminate the audio shield, and use the two DACs on the Teensy 3.5 and 3.6.
Pins:
A21 Dac0
A22 Dac1
Ground: Ground Ground
VIN: 5v 5v */
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code (edited by meissner afterwards).
AudioSynthToneSweep tonesweep; //xy=99,198
AudioMixer4 mixer2; //xy=280,253
AudioMixer4 mixer1; //xy=280,175
AudioOutputAnalogStereo dacs; //xy=452,189
AudioConnection patchCord1 (tonesweep, 0, mixer1, 0);
AudioConnection patchCord2 (tonesweep, 0, mixer2, 0);
AudioConnection patchCord3 (mixer2, 0, dacs, 1);
AudioConnection patchCord4 (mixer1, 0, dacs, 0);
// GUItool: end automatically generated code
const float t_ampx = 0.8;
const int t_lox = 10;
const int t_hix = 22000;
const float t_timex = 10; // Length of time for the sweep in seconds
// Do a sweep in both directions, enabling or disabling the left/right speakers
void do_sweep (int i)
{
int do_left = (i & 1) != 0;
int do_right = (i & 2) != 0;
float gain = (do_left && do_right) ? 0.5f : 1.0f;
Serial.printf ("Sweep up, left = %c, right = %c\n",
(do_left) ? 'Y' : 'N',
(do_right) ? 'Y' : 'N');
mixer1.gain (0, do_left ? gain : 0.0f);
mixer2.gain (0, do_right ? gain : 0.0f);
if (!tonesweep.play (t_ampx, t_lox, t_hix, t_timex)) {
Serial.println ("ToneSweep - play failed");
while (1)
;
}
// wait for the sweep to end
while (tonesweep.isPlaying ())
;
// and now reverse the sweep
Serial.printf ("Sweep down, left = %c, right = %c\n",
(do_left) ? 'Y' : 'N',
(do_right) ? 'Y' : 'N');
if (!tonesweep.play (t_ampx, t_hix, t_lox, t_timex)) {
Serial.println("ToneSweep - play failed");
while (1)
;
}
// wait for the sweep to end
while (tonesweep.isPlaying ())
;
Serial.println ("Sweep done");
}
void setup(void)
{
// Wait for at least 3 seconds for the USB serial connection
Serial.begin (9600);
while (!Serial && millis () < 3000)
;
AudioMemory (8);
Serial.println ("setup done");
for (int i = 1; i <= 3; i++)
do_sweep (i);
Serial.println ("Done");
}
void loop (void)
{
}
Teensy is a PJRC trademark. Notes here are for reference and will typically refer to the ARM variants unless noted.