You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
55 lines
1.7 KiB
/* Switches_float.ino Bob Larkin 20 June 2020
|
|
*
|
|
* Cascade an 4 position switch with an 8 position to swicth between
|
|
* an RMS and a Peak measure of a sine wave. This is a trivial
|
|
* example of switching. Normally, the switched paths would be involved
|
|
* enough to benefit from saving computations and DC power. An example
|
|
* that is more like this is <<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
*
|
|
*/
|
|
|
|
#include "Audio.h"
|
|
#include "OpenAudio_ArduinoLibrary.h"
|
|
|
|
// To work with T4.0 the I2S routine outputs 16-bit integer (I16). Then
|
|
// use Audette I16 to F32 convert. Same below for output, in reverse.
|
|
AudioInputI2S in1;
|
|
AudioSynthWaveformSine_F32 sine1;
|
|
AudioSwitch4_OA_F32 switch1;
|
|
AudioSwitch8_OA_F32 switch2;
|
|
AudioAnalyzePeak_F32 peak1;
|
|
AudioAnalyzeRMS_F32 rms1;
|
|
AudioConnection_F32 connect1(sine1, 0, switch1, 0);
|
|
AudioConnection_F32 connect2(switch1, 2, switch2, 0);
|
|
AudioConnection_F32 connect3(switch2, 1, peak1, 0);
|
|
AudioConnection_F32 connect4(switch2, 6, rms1, 0);
|
|
|
|
|
|
void setup(void) {
|
|
float32_t gain;
|
|
AudioMemory(5);
|
|
AudioMemory_F32(8);
|
|
|
|
Serial.begin(1); delay(1000);
|
|
sine1.frequency(1000.0f);
|
|
sine1.amplitude(0.2f);
|
|
// switch1 is always set to channel 2 to feed switch2.
|
|
switch1.setChannel(2);
|
|
}
|
|
|
|
void loop(void) {
|
|
// Lets switch back and forth between RMS and Peak measurements.
|
|
// This is switch2, channels 6 and 1.
|
|
switch2.setChannel(6); // RMS measurement
|
|
delay(1000);
|
|
if (rms1.available() ) {
|
|
Serial.print("RMS =");
|
|
Serial.println(rms1.read(), 6);
|
|
}
|
|
switch2.setChannel(1); // Peak-to-peak measurement
|
|
delay(1000);
|
|
if (peak1.available() ) {
|
|
Serial.print("P-P =");
|
|
Serial.println(peak1.readPeakToPeak(), 6);}
|
|
delay(1000);
|
|
}
|
|
|