teensy 4 + audio rev d, tutorial issues?

Status
Not open for further replies.
I have just started with teensy, have been looking at the audio tutorial. This largely appears to be written as for earlier version. I have managed many of the examples, mostly with success. (At the same time as getting my setup organised!)

sdcard play is working and playing all files., but the two examples for "blink while playing" seem to stick at initial play of the first file. Question is:- are these known to work, or is it possibly not something I am doing? Is it possible I have an incorrect (wrong or too early version) of teensyduino?

If the examples are known to work on teensy 4 then I will look again at my setup, etc...
Cannot see anything in the forum relevant to teensy 4 and audio board revD

Thanks..
 
Indeed, the audio tutorial was written (and the video created) in late 2015. That was before Teensy 4.0 or even Teensy 3.5 and 3.6 existed.

Yes, that's expected because the SD card is using pin 13 on Rev D with Teensy 4.0. Controlling that pin for LED blinking will interfere with access to the card.

The Rev C audio shield uses pin 14 for the SD card clock.
 
Thanks for the quick answer - I will try modifying the code....

Awesome sound so far with such a small package.


p.s.
I hope to use the power of the "4" to try a selective hearing project, to select different frequencies and to try removing unwanted background music.
 
I modified the example so it works, I put a separate LED on out3. It works, so I believe I changed the address for sd card correctly:-

Code:
// Advanced Microcontroller-based Audio Workshop
//
// http://www.pjrc.com/store/audio_tutorial_kit.html
// https://hackaday.io/project/8292-microcontroller-audio-workshop-had-supercon-2015
// 
// Part 1-5: Respond to Pushbuttons & Volume Knob
// Modified for teensy 4.0 and audio shield

// Do more while playing.  Monitor pushbuttons and adjust
// the volume.  Whe the buttons are pressed, stop playing
// the current file and skip to the next or previous.

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
#include <Bounce.h>

AudioPlaySdWav           playSdWav1;
AudioOutputI2S           i2s1;
AudioConnection          patchCord1(playSdWav1, 0, i2s1, 0);
AudioConnection          patchCord2(playSdWav1, 1, i2s1, 1);
AudioControlSGTL5000     sgtl5000_1;

Bounce button0 = Bounce(0, 15);
Bounce button2 = Bounce(2, 15);  // 15 = 15 ms debounce time

// Use these with the Teensy Audio Shield rev D (I think! RR)
#define SDCARD_CS_PIN    10
#define SDCARD_MOSI_PIN  11
#define SDCARD_SCK_PIN   13

#define ledPin           3

void setup() {
  Serial.begin(9600);
  AudioMemory(8);
  sgtl5000_1.enable();
  sgtl5000_1.volume(0.5);
  
  SPI.setMOSI(SDCARD_MOSI_PIN);
  SPI.setSCK(SDCARD_SCK_PIN);

  if (!(SD.begin(SDCARD_CS_PIN))) {
    while (1) {
      Serial.println("Unable to access the SD card");
      delay(500);
    }
  }
  pinMode(ledPin, OUTPUT);
  pinMode(0, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
  delay(1000);
}

int filenumber = 0;  // while file to play

const char * filelist[4] = {
  "SDTEST1.WAV", "SDTEST2.WAV", "SDTEST3.WAV", "SDTEST4.WAV"
};

elapsedMillis blinkTime;

void loop() {
  
  if (playSdWav1.isPlaying() == false) {
    const char *filename = filelist[filenumber];
    filenumber = filenumber + 1;
    if (filenumber >= 4) filenumber = 0;
    Serial.print("Start playing ");
    Serial.println(filename);
    playSdWav1.play(filename);
    delay(10); // wait for library to parse WAV info
  }
  
  // blink the LED without delays
  if (blinkTime < 250) {
    digitalWrite(ledPin, LOW);
  } else if (blinkTime < 500) {
    digitalWrite(ledPin, HIGH);
  } else {
    blinkTime = 0; // start blink cycle over again
  }
  
  // read pushbuttons
  button0.update();
  if (button0.fallingEdge()) {
    Serial.println("Button (pin 0) Press");
    playSdWav1.stop();
  }
  button2.update();
  if (button2.fallingEdge()) {
    Serial.println("Button (pin 2) Press");
    playSdWav1.stop();
    filenumber = filenumber - 2;
    if (filenumber < 0) filenumber = filenumber + 4;
  }
  
  // read the knob position (analog input A2)
  int knob = analogRead(A2);
  float vol = (float)knob / 1280.0;
  sgtl5000_1.volume(vol);
  //Serial.print("volume = ");
  //Serial.println(vol);
}
 
Status
Not open for further replies.
Back
Top