Welcome, Guest
Username: Password: Remember me

TOPIC: Delay Effect

Delay Effect 4 years 1 month ago #1647

  • Ray
  • Ray's Avatar
  • OFFLINE
  • Moderator
  • Posts: 702
  • Thank you received: 152
  • Karma: 44
This is a Delay guitar effect. One of the easiest in terms of programming.

The main loop of the code does:
  1. Check if the pedal is ON or OFF, reading the Bypass_detect pin (digitalRead(BYPASS_DETECT) == LOW)
  2. Read the Encoder: updating the ENC_counter variable. This variables goes from 50 (maximum delay, around 600ms) to 230 (minimum delay, around 60ms)
  3. Set the delay on the PT2399 chips using "analogWrite(DELAY1, ENC_counter);"
  4. Update the LED colors: using "digitalWrite(LED1_G,HIGH); etc" you can set the colors you like
  5. Set the Audio Relays: using "digitalWrite(SWA, LOW), etc..." to the configuration needed. For delay we have:
delay.jpg


The complete code looks like this:
// CC-by-www.ElectroSmash.com Delay Effect Pedal.
// More info about the project at www.ElectroSmash.com/Time-Manipulator
 
// Pin Definitions: 
#define DELAY1 10
#define DELAY2 9
#define SWA 3
#define SWB 14
#define SWC 2
#define SWD 4 
#define LED1_G 1 
#define LED1_R 0
#define LED2_G 5
#define LED2_R 6
#define ENC_A 16
#define ENC_B 18
#define ENC_GND 17
#define ENC_PUSH 19
#define BYPASS_DETECT 8
#define TAP_DETECT  15

//VARIABLES
unsigned int ENC_counter = 100; 
int ENC_aState;
int ENC_aLastState;  
int ENC_aState_selection=0;
int ENC_aLastState_selection=0;
 
// the setup function runs once when you press reset or power the board
void setup() 
{
//set the pins //init the values
pinMode(DELAY1, OUTPUT);    analogWrite(DELAY1, 100);
pinMode(DELAY2, OUTPUT);    analogWrite(DELAY2, 100);
pinMode(SWA, OUTPUT);       digitalWrite(SWA, LOW);
pinMode(SWB, OUTPUT);       digitalWrite(SWB, LOW);
pinMode(SWC, OUTPUT);       digitalWrite(SWC, LOW);
pinMode(SWD, OUTPUT);       digitalWrite(SWD, LOW);
pinMode(LED1_G, OUTPUT);    analogWrite(LED1_G, 0);
pinMode(LED1_R, OUTPUT);    analogWrite(LED1_R, 0);
pinMode(LED2_G, OUTPUT);    analogWrite(LED2_G, 0);
pinMode(LED2_R, OUTPUT);    analogWrite(LED2_R, 0);
pinMode(ENC_A, INPUT_PULLUP);
pinMode(ENC_B, INPUT_PULLUP);
pinMode(ENC_GND, OUTPUT);
pinMode(ENC_PUSH, INPUT_PULLUP);
pinMode(BYPASS_DETECT, INPUT_PULLUP);
pinMode(TAP_DETECT, INPUT_PULLUP);
ENC_aLastState = digitalRead(ENC_A); 
void read_encoder(void);
}
 
 
void loop() // the loop function runs over and over again forever
{
//detect if the effect is on or off
while((digitalRead(BYPASS_DETECT) == LOW)) 
  {
  digitalWrite(LED1_R,LOW);digitalWrite(LED2_R,LOW);digitalWrite(LED1_G,LOW);digitalWrite(LED2_G,LOW); 
  }  
read_encoder();
//update the delay value based on the encoder reading
analogWrite(DELAY1, ENC_counter);
analogWrite(DELAY2, ENC_counter);
//update the LED colors
digitalWrite(LED1_G,HIGH); digitalWrite(LED2_G,HIGH);digitalWrite(LED1_R,LOW);  digitalWrite(LED2_R,LOW);    
//set the audio relay
digitalWrite(SWA, LOW);digitalWrite(SWB, HIGH);digitalWrite(SWC, HIGH);digitalWrite(SWD, LOW);
}
 
void read_encoder(void)
{
 ENC_aState = digitalRead(ENC_A); // Reads the "current" state
   if (ENC_aState != ENC_aLastState)
   {    
     if (digitalRead(ENC_B) != ENC_aState) 
          {if(ENC_counter>50)ENC_counter-=5;}
     else 
          {if(ENC_counter<230)ENC_counter+=5;}   
   } 
ENC_aLastState = ENC_aState; // Updates the prev. state 
 
}


File Attachment:

File Name: Time-Manipulator_delay.zip
File Size: 1 KB
Last Edit: 4 years 1 month ago by Ray.
The administrator has disabled public write access.
Time to create page: 0.124 seconds
Powered by Kunena Forum
Joomla SEF URLs by Artio