Teensy 4.1-based programmable guitar pedal
Designed by Nuclaer Tech in United States of America
Buy with confidence.
Our Tindie Guarantee protects your purchase from fraud. Learn More
Notice: My gitlab server has some SSL issues currently, but is still online and secure at https://162.243.164.209/ If you have any issues, reach out to me at dylanbrophy@protonmail.com
What is it? This programmable guitar pedal is your sandbox for creating new sounds and altering the sounds of your instrument. Armed with the Teensy 4.1, this pedal has an absurd amount of processin…
Read More…This programmable guitar pedal is your sandbox for creating new sounds and altering the sounds of your instrument. Armed with the Teensy 4.1, this pedal has an absurd amount of processing power for you to work with. The Teensy outperforms virtually all microcontrollers on the market, and excels at audio tasks, including FFTs, digital effects, and sound synthesis. Paired with the WM8960 audio codec, it is ready to generate endless high-quality sounds, and apply limitless digital effects to your instrument.
This pedal is designed for insertion into a 1590B enclosure, so you're all set when you're ready to make your design look professional.
This device is convenient and well-priced such that you can implement whatever sound alteration you can imagine.
Use the highly flexible Teensy Audio Library to build the exact sound you imagine. PJRC provides an online GUI for you to build effects in, check it out here: https://www.pjrc.com/teensy/gui/ This guitar pedal is designed to work perfectly with the PJRC Audio System Design tool, so your development can go smoothly.
This board is designed with audio quality in mind - expect perfect audio.
Designed for enclosure: 1590B (not included - for now)
Audio chipset: WM8960
Board includes:
Bitcrusher Pedal:
#include
#include
#include
#include
#include
// GUItool: begin automatically generated code
AudioInputI2S2 i2s2_input1; //xy=608,249
AudioEffectBitcrusher bitcrusher1; //xy=844,290
AudioEffectBitcrusher bitcrusher2; //xy=854,400
AudioMixer4 mixer_left; //xy=1013,364
AudioMixer4 mixer_right; //xy=1018,498
AudioOutputI2S2 i2s2_output1; //xy=1204,429
AudioConnection patchCord1(i2s2_input1, 0, mixer_left, 0);
AudioConnection patchCord2(i2s2_input1, 0, bitcrusher1, 0);
AudioConnection patchCord3(i2s2_input1, 1, mixer_right, 0);
AudioConnection patchCord4(i2s2_input1, 1, bitcrusher2, 0);
AudioConnection patchCord5(bitcrusher1, 0, mixer_left, 1);
AudioConnection patchCord6(bitcrusher2, 0, mixer_right, 1);
AudioConnection patchCord7(mixer_left, 0, i2s2_output1, 0);
AudioConnection patchCord8(mixer_right, 0, i2s2_output1, 1);
// GUItool: end automatically generated code
#define POT1 14
#define POT2 15
#define POT3 16
#define FOOTSWITCH 40
#define LED 29
#include
// Click here to get the library: http://librarymanager/All#SparkFun_WM8960
WM8960 codec;
bool buttonState = false;
void setup() {
AudioMemory(1952);
// Pins
pinMode(FOOTSWITCH, INPUT_PULLUP);
pinMode(LED, OUTPUT);
Serial.begin(115200);
Wire.begin();
if (codec.begin() == false) {
Serial.println("The audio codec did not respond. Please check wiring.");
while (1);
}
// General setup needed
codec.enableVREF();
codec.enableVMID();
// Set input boosts to get INPUT2 (both left and right) to the boost mixers
codec.setLIN3BOOST(WM8960_BOOST_MIXER_GAIN_0DB);
codec.setRIN3BOOST(WM8960_BOOST_MIXER_GAIN_0DB);
// Enable input boost mixers
codec.enableAINL();
codec.enableAINR();
// Connect from DAC outputs to output mixer
codec.enableLD2LO();
codec.enableRD2RO();
// Set gainstage between booster mixer and output mixer
// For this loopback example, we are going to keep these as low as they go
codec.setLB2LOVOL(WM8960_OUTPUT_MIXER_GAIN_0DB);
codec.setRB2ROVOL(WM8960_OUTPUT_MIXER_GAIN_0DB);
// Enable output mixers
codec.enableLOMIX();
codec.enableROMIX();
codec.setWL(WM8960_WL_16BIT);
// Enable DACs
codec.enableDacLeft();
codec.enableDacRight();
// Enable DACs
codec.enableAdcLeft();
codec.enableAdcRight();
//codec.enableLoopBack(); // Loopback sends ADC data directly into DAC
codec.disableLoopBack();
// Default is "soft mute" on, so we must disable mute to make channels active
codec.disableDacMute();
codec.enableHeadphones();
codec.setHeadphoneVolumeDB(6.00);
}
bool enabled = false;
void loop() {
if (enabled) {
float levelDry = 1.0f - analogRead(POT1) / 1023.0f;
float levelWet = 1.0f - analogRead(POT2) / 1023.0f;
int bits = (1056 - analogRead(POT3)) / 64;
bitcrusher1.bits(bits);
bitcrusher2.bits(bits);
mixer_left.gain(0, levelDry);
mixer_left.gain(1, levelWet);
mixer_right.gain(0, levelDry);
mixer_right.gain(1, levelWet);
}
if (digitalRead(FOOTSWITCH)) {
enabled = !enabled;
if (!enabled) {
mixer_left.gain(0, 1);
mixer_left.gain(1, 0);
mixer_right.gain(0, 1);
mixer_right.gain(1, 0);
}
digitalWrite(LED, enabled);
delay(3);
while (digitalRead(FOOTSWITCH));
}
delay(10);
}
Delay Pedal:
#include
#include
#include
#include
#include
// GUItool: begin automatically generated code
AudioInputI2S2 i2s2_input; //xy=674,286
AudioEffectDelay delay_left; //xy=909,428
AudioEffectDelay delay_right; //xy=909,561
AudioMixer4 mixer_left; //xy=1079,401
AudioMixer4 mixer_right; //xy=1084,535
AudioOutputI2S2 i2s2_output; //xy=1270,466
AudioConnection patchCord1(i2s2_input, 0, delay_left, 0);
AudioConnection patchCord2(i2s2_input, 0, mixer_left, 0);
AudioConnection patchCord3(i2s2_input, 1, delay_right, 0);
AudioConnection patchCord4(i2s2_input, 1, mixer_right, 0);
AudioConnection patchCord5(delay_left, 0, mixer_left, 1);
AudioConnection patchCord6(delay_right, 0, mixer_right, 1);
AudioConnection patchCord7(mixer_left, 0, i2s2_output, 0);
AudioConnection patchCord8(mixer_right, 0, i2s2_output, 1);
// GUItool: end automatically generated code
#define POT1 14
#define POT2 15
#define POT3 16
#define FOOTSWITCH 40
#define LED 29
#include
// Click here to get the library: http://librarymanager/All#SparkFun_WM8960
WM8960 codec;
bool buttonState = false;
void setup() {
AudioMemory(1952);
// Pins
pinMode(FOOTSWITCH, INPUT_PULLUP);
pinMode(LED, OUTPUT);
Serial.begin(115200);
Wire.begin();
if (codec.begin() == false) {
Serial.println("The audio codec did not respond. Please check wiring.");
while (1);
}
// General setup needed
codec.enableVREF();
codec.enableVMID();
// Set input boosts to get INPUT2 (both left and right) to the boost mixers
codec.setLIN3BOOST(WM8960_BOOST_MIXER_GAIN_0DB);
codec.setRIN3BOOST(WM8960_BOOST_MIXER_GAIN_0DB);
// Enable input boost mixers
codec.enableAINL();
codec.enableAINR();
// Connect from DAC outputs to output mixer
codec.enableLD2LO();
codec.enableRD2RO();
// Set gainstage between booster mixer and output mixer
// For this loopback example, we are going to keep these as low as they go
codec.setLB2LOVOL(WM8960_OUTPUT_MIXER_GAIN_0DB);
codec.setRB2ROVOL(WM8960_OUTPUT_MIXER_GAIN_0DB);
// Enable output mixers
codec.enableLOMIX();
codec.enableROMIX();
codec.setWL(WM8960_WL_16BIT);
// Enable DACs
codec.enableDacLeft();
codec.enableDacRight();
// Enable DACs
codec.enableAdcLeft();
codec.enableAdcRight();
//codec.enableLoopBack(); // Loopback sends ADC data directly into DAC
codec.disableLoopBack();
// Default is "soft mute" on, so we must disable mute to make channels active
codec.disableDacMute();
codec.enableHeadphones();
codec.setHeadphoneVolumeDB(6.00);
}
bool enabled = false;
float levelDry;
float levelWet;
float delaySeconds;
void loop() {
if (enabled) {
levelDry = 1.0f - analogRead(POT1) / 1023.0f;
levelWet = 1.0f - analogRead(POT2) / 1023.0f;
float newDelaySeconds = (1.0f - analogRead(POT3) / 1023.0f);
//Serial.printf("Levels: %i %i Delay: %f\n", (int)(100 * levelDry), (int)(100 * levelWet), (double)delaySeconds);
if (abs(newDelaySeconds - delaySeconds) / delaySeconds > 0.02f) {
delaySeconds = newDelaySeconds;
delay_left.delay(0, delaySeconds * 1000);
delay_right.delay(0, delaySeconds * 1000);
}
mixer_left.gain(0, levelDry);
mixer_left.gain(1, levelWet);
mixer_right.gain(0, levelDry);
mixer_right.gain(1, levelWet);
delay(50);
}
if (digitalRead(FOOTSWITCH)) {
enabled = !enabled;
if (!enabled) {
mixer_left.gain(0, 1);
mixer_left.gain(1, 0);
mixer_right.gain(0, 1);
mixer_right.gain(1, 0);
}
digitalWrite(LED, enabled);
delay(3);
while (digitalRead(FOOTSWITCH));
}
delay(10);
}
No country selected, please select your country to see shipping options.
No rates are available for shipping to .
Enter your email address if you'd like to be notified when Programmable Guitar Pedal (Teensy 4.1) can be shipped to you:
Thanks! We'll let you know when the seller adds shipping rates for your country.
Shipping Rate | Tracked | Ships From | First Item | Additional Items |
---|---|---|---|---|
:
|
I will ship all days except Sundays, provided the order is placed early enough for me to get it to the post office.
If I'm away from home, I'll usually take some stock with me to ship orders wherever I happen to be.
Quantity | Price |
---|---|
1-9 | $120.00 |
10-24 | $108.00 |
25+ | $95.00 |
Buy with confidence.
Our Tindie Guarantee protects your purchase from fraud. Learn More
Austin, TX, United States of America
Ships from United States of America.
1 Review | 15 Orders
By clicking Register, you confirm that you accept our Terms & Conditions
We recognize our top users by making them a Tindarian. Tindarians have access to secret & unreleased features.
We look for the most active & best members of the Tindie community, and invite them to join. There isn't a selection process or form to fill out. The only way to become a Tindarian is by being a nice & active member of the Tindie community!