Hi
I have been struggling to get my Trellis boards to work correctly with an oscillator. Basically I am making a soundboard that plays an oscillator frequency depending on button press on the Trellis.
The Trellis code works great without the oscillator, but as soon as I use any daisy code like DAISY.begin or DAISY.init, nothing works. The oscillator does not play and the Trellis boards are completely dead.
Here is the code that I strongly believe should work, but does not:
#include <DaisyDuino.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Trellis.h>
Adafruit_Trellis matrix0 = Adafruit_Trellis();
Adafruit_Trellis matrix1 = Adafruit_Trellis();
Adafruit_TrellisSet trellis = Adafruit_TrellisSet(&matrix0, &matrix1);
constexpr int8_t numTrellis = 2;
constexpr int8_t numKeys = (numTrellis * 16);
constexpr uint8_t intPin = A6;
bool trellisKeysPressed[16] = { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false };
float pitchknob = 0.1;
static DaisyHardware hw;
size_t num_channels;
float sample_rate;
static Oscillator osc;
void setupOscillator(){
// Initialize for Daisy seed at 48kHz
hw = DAISY.init(DAISY_SEED, AUDIO_SR_48K);
num_channels = hw.num_channels;
// num_channels = 2;
sample_rate = DAISY.get_samplerate();
//sample_rate = 48;
osc.Init(sample_rate);
osc.SetFreq(440);
osc.SetAmp(0.5);
osc.SetWaveform(osc.WAVE_TRI);
DAISY.begin(AudioCallback);
}
void setup() {
Serial.begin(9600);
pinMode(intPin, INPUT);
digitalWrite(intPin, HIGH);
trellis.begin(0x71, 0x72);
setupOscillator();
showTrellisStartSequence();
}
void loop() {
readTrellis();
delay(30);
checkInput();
delay(30);
}
void readTrellis() {
if (trellis.readSwitches()) {
// go through every button
for (int8_t i = 0; i < numKeys; i++) {
if (trellis.justPressed(i)) {
trellisKeysPressed[i] = true;
trellis.setLED(i);
trellis.writeDisplay();
}
if (trellis.justReleased(i)) {
trellisKeysPressed[i] = false;
trellis.clrLED(i);
trellis.writeDisplay();
}
}
}
}
void checkInput() {
for (int8_t i = 0; i < numKeys; i++) {
// if it was pressed...
if (trellisKeysPressed[i] == true) {
pitchknob = 24.0 + (i) * 7;
}
else if (trellisKeysPressed[i] == false) {
pitchknob = 0.1;
}
}
}
void showTrellisStartSequence() {
for (int8_t i = 0; i < numKeys; i++) {
trellis.setLED(i);
trellis.writeDisplay();
delay(50);
}
for (int8_t i = 0; i < numKeys; i++) {
trellis.clrLED(i);
trellis.writeDisplay();
delay(50);
}
}
void AudioCallback(float **in, float **out, size_t size){
// Convert Pitchknob MIDI Note Number to frequency
osc.SetFreq(mtof(pitchknob));
for (size_t i = 0; i < size; i++) {
float sig = osc.Process();
for (size_t chn = 0; chn < num_channels; chn++) {
out[chn][i] = sig;
}
}
}