Control and monitor the Digitech Brian May Pedal via phone!
A serial interface to the Digitech Brian May Pedal allows you to control and view your selected tone using an Android phone or tablet. Also you can save your tone presets for Queen song in an app.
Components and supplies
1
Stereo Jack Socket, 6.3mm
1
USB Cable, USB Type C Plug
1
Arduino Nano Every
Tools and machines
1
Soldering kit
Apps and platforms
1
Arduino IDE 1.8
1
Serial USB Terminal (for Android)
Project description
Code
Source code
cpp
For Arduino Nano Every
1/* 2 A Serial Monitor for Digitech Brian May Pedal! 3 4 v.1.0 5 6 created 16 May 2023 7 by Carlo Giletto 8 9 * TIP to analog pin 0 // = digital pin 14 10 * RING to analog pin 1 // = digital pin 15 11 * 12*/ 13 14const int tip = 0; 15const int ring = 1; 16const int downPin = 15; 17const int upPin = 8; 18const int modePin = 14; 19 20const int highTS = 300; 21const int diodeTS = 50; 22const int groundTS = 20; 23 24const int green = 1, red = 2, blue = 3; 25const int longPressionTime = 2300; //long pression time in milliseconds, it should be 3000 ms, value tuned for my pedal 26const int shortPressionTime = 150; 27 28unsigned long downPressedTime = 0; 29unsigned long upPressedTime = 0; 30 31long downPressDuration = 0; 32long upPressDuration = 0; 33 34unsigned long lastDebounceTime = 0; // the last time the output pin was toggled 35const unsigned long debounceDelay = 30; // the debounce time; increase if the output flickers 36 37String readString; 38 39int buttonState = 0; 40int lastButtonState = 0; 41int refresh = HIGH; 42 43// default state 44 45int Tone = 1; 46int Mode = red; 47int settedTone = Tone; 48int settedMode = Mode; 49 50 51void setup() { 52 53 Serial.begin(115200); 54 55 Serial.println("Digitech Brian May Display"); 56 Serial.println("Version 2.0"); 57 58 toneDown(longPressionTime); 59 60} 61void loop() { 62 63 while (Serial.available()) { 64 delay(3); 65 char c = Serial.read(); 66 readString += c; 67 } 68 69 if (readString.length() > 0) { 70 //Serial.println(readString); 71 72 if (readString == "u\n") { 73 toneUp(shortPressionTime); 74 } 75 else if (readString == "d\n") { 76 toneDown(shortPressionTime); 77 } 78 else if (readString == "m\n") { 79 modeToggle(); 80 } 81 else if (readString == "ld\n") { 82 toneDown(longPressionTime); 83 } 84 else if (readString == "lu\n") { 85 toneUp(longPressionTime); 86 } 87 else if (readString == "1g\n") { 88 settedTone = 1; 89 settedMode = green; 90 } 91 else if (readString == "2g\n") { 92 settedTone = 2; 93 settedMode = green; 94 } 95 else if (readString == "3g\n") { 96 settedTone = 3; 97 settedMode = green; 98 } 99 else if (readString == "4g\n") { 100 settedTone = 4; 101 settedMode = green; 102 } 103 else if (readString == "5g\n") { 104 settedTone = 5; 105 settedMode = green; 106 } 107 else if (readString == "6g\n") { 108 settedTone = 6; 109 settedMode = green; 110 } 111 else if (readString == "7g\n") { 112 settedTone = 7; 113 settedMode = green; 114 } 115 else if (readString == "1r\n") { 116 settedTone = 1; 117 settedMode = red; 118 } 119 else if (readString == "2r\n") { 120 settedTone = 2; 121 settedMode = red; 122 } 123 else if (readString == "3r\n") { 124 settedTone = 3; 125 settedMode = red; 126 } 127 else if (readString == "4r\n") { 128 settedTone = 4; 129 settedMode = red; 130 } 131 else if (readString == "5r\n") { 132 settedTone = 5; 133 settedMode = red; 134 } 135 else if (readString == "6r\n") { 136 settedTone = 6; 137 settedMode = red; 138 } 139 else if (readString == "7r\n") { 140 settedTone = 7; 141 settedMode = red; 142 } 143 else{ 144 Serial.println(); 145 Serial.println(); 146 Serial.println("Help: m = toggle mode, u = up, d = down,"); 147 Serial.println("ld = long pression down, lu = long pression up"); 148 Serial.println("1r = Tone 1 Mode Red, 2g = Tone 2 green, etc..."); 149 } 150 151 readString = ""; 152 } 153 154 if (settedTone < Tone) { 155 refresh = HIGH; 156 for (int i = Tone - settedTone; i > 0; i--) { 157 toneDown(shortPressionTime); 158 } 159 } 160 if (settedTone > Tone) { 161 refresh = HIGH; 162 for (int i = settedTone - Tone; i > 0; i--) { 163 toneUp(shortPressionTime); 164 } 165 } 166 167 if (Mode != settedMode) { 168 modeToggle(); 169 refresh = HIGH; 170 } 171 172 int reading = buttons(); 173 174 if (reading != lastButtonState) { 175 lastDebounceTime = millis(); 176 } 177 178 if ((millis() - lastDebounceTime) > debounceDelay) { 179 if (reading != buttonState) { 180 buttonState = reading; 181 if (buttonState == 0) { 182 //Serial.println("Buttons Released"); 183 } 184 if (buttonState == 1) { 185 //Serial.println("MODE Pressed"); 186 refresh = HIGH; 187 if (Mode == green) { 188 //backLightRed(redBrightness); 189 Mode = red; 190 settedMode = Mode; 191 } else { 192 //backLightGreen(greenBrightness); 193 Mode = green; 194 settedMode = Mode; 195 } 196 } 197 if (buttonState == 2) { 198 //Serial.println("DOWN Pressed"); 199 downPressedTime = millis(); 200 if (Tone > 1) { 201 refresh = HIGH; 202 Tone = Tone - 1; 203 settedTone = Tone; 204 } 205 } 206 if (buttonState == 3) { 207 //Serial.println("UP Pressed"); 208 upPressedTime = millis(); 209 if (Tone < 7) { 210 refresh = HIGH; 211 Tone = Tone + 1; 212 settedTone = Tone; 213 } 214 } 215 } 216 } 217 218 downPressDuration = millis() - downPressedTime; 219 if ((buttonState == 2) && (downPressDuration > longPressionTime)) { 220 if (Tone > 1) { 221 Tone = 1; 222 settedTone = Tone; 223 refresh = HIGH; 224 } 225 } 226 upPressDuration = millis() - upPressedTime; 227 if ((buttonState == 3) && (upPressDuration > longPressionTime)) { 228 if (Tone < 7) { 229 Tone = 7; 230 settedTone = Tone; 231 refresh = HIGH; 232 } 233 } 234 235 if (refresh == HIGH) { 236 237 Serial.println(); 238 Serial.println(); 239 240 //Serial.print("Tone: "); 241 Serial.print(Tone); 242 //Serial.print(" Mode: "); 243 if (Mode == 1) 244 Serial.print(" GREEN - "); 245 else 246 Serial.print(" RED - "); 247 248 if (Mode == green) { 249 if (Tone == 1) 250 display1Green(); 251 if (Tone == 2) 252 display2Green(); 253 if (Tone == 3) 254 display3Green(); 255 if (Tone == 4) 256 display4Green(); 257 if (Tone == 5) 258 display5Green(); 259 if (Tone == 6) 260 display6Green(); 261 if (Tone == 7) 262 display7Green(); 263 } 264 265 if (Mode == red) { 266 if (Tone == 1) 267 display1Red(); 268 if (Tone == 2) 269 display2Red(); 270 if (Tone == 3) 271 display3Red(); 272 if (Tone == 4) 273 display4Red(); 274 if (Tone == 5) 275 display5Red(); 276 if (Tone == 6) 277 display6Red(); 278 if (Tone == 7) 279 display7Red(); 280 } 281 282 refresh = LOW; 283 } 284 lastButtonState = reading; 285} 286 287int buttons() { 288 if ((analogRead(tip) > highTS) && (analogRead(ring) > highTS)) { 289 return 0; 290 } 291 if ((analogRead(tip) < groundTS) && (analogRead(ring) > highTS)) { 292 return 1; 293 } 294 if ((analogRead(ring) < groundTS) && (analogRead(tip) > highTS)) { 295 return 2; 296 } 297 if ((analogRead(tip) < highTS) && (analogRead(tip) > diodeTS) && (analogRead(ring) < highTS) && (analogRead(ring) > diodeTS)) { 298 return 3; 299 } else { 300 return 4; 301 } 302} 303 304void display1Green() { 305 Serial.println("Keep Yourself Alive"); 306 Serial.println("Intro with Tape Flanger"); 307 Serial.println("Tape Flanger Amount / Midrange"); 308} 309 310void display2Green() { 311 Serial.println(" Bohemian Rhapsody"); 312 Serial.println("First Solo"); 313 Serial.println("No Function / Midrange"); 314} 315 316void display3Green() { 317 Serial.println("Tie Your Mother Down"); 318 Serial.println("Intro"); 319 Serial.println("No Function / Midrange"); 320} 321 322void display4Green() { 323 Serial.println("We Will Rock You"); 324 Serial.println("Solo"); 325 Serial.println("Phaser Amount / Phaser Speed"); 326} 327 328void display5Green() { 329 Serial.println(" Crazy Little Thing Called Love"); 330 Serial.println("Intro"); 331 Serial.println("No Function / Reverb Level"); 332} 333 334void display6Green() { 335 Serial.println("Brighton Rock Solo - Live"); 336 Serial.println("Delay (three amps) & Tight Chorus"); 337 Serial.println("Delay Amount / Delay Time"); 338} 339 340void display7Green() { 341 Serial.println("Deacy Amp"); 342 Serial.println("Deacy Unprocessed"); 343 Serial.println("No Function / Midrange"); 344} 345 346void display1Red() { 347 Serial.println("Keep Yourself Alive"); 348 Serial.println("Solo with Tape Flanger"); 349 Serial.println("Tape Flanger / Midrange"); 350} 351 352void display2Red() { 353 Serial.println("Bohemian Rhapsody"); 354 Serial.println("Rhythm & finale orchestral Fanfare"); 355 Serial.println("Cross fade to Deacy / Midrange"); 356} 357 358void display3Red() { 359 Serial.println("Tie Your Mother Down"); 360 Serial.println("Solo"); 361 Serial.println("No Function / Midrange"); 362} 363 364void display4Red() { 365 Serial.println("We Are The Champions"); 366 Serial.println("Solo"); 367 Serial.println("Phaser Amount / Phaser Speed"); 368} 369 370void display5Red() { 371 Serial.println("Crazy Little Thing Called Love"); 372 Serial.println("Solo"); 373 Serial.println("No Function / Reverb Level"); 374} 375 376void display6Red() { 377 Serial.println("Brighton Rock - Solo"); 378 Serial.println("Orchestral Harmonizer with three part harmony"); 379 Serial.println("Minor to Major / Pitch Blend"); 380} 381 382void display7Red() { 383 Serial.println("A Winter's Tale"); 384 Serial.println("Solo"); 385 Serial.println("No Function / Effect level - Reverb & Delay"); 386} 387 388void modeToggle() { 389 pinMode(modePin, OUTPUT); 390 digitalWrite(modePin, LOW); 391 delay(shortPressionTime); 392 pinMode(modePin, INPUT); 393 refresh = HIGH; 394 if (Mode == green) { 395 //backLightRed(redBrightness); 396 Mode = red; 397 settedMode = Mode; 398 } else { 399 //backLightGreen(greenBrightness); 400 Mode = green; 401 settedMode = Mode; 402 } 403 delay(shortPressionTime); 404} 405 406void toneDown(int PressionTime) { 407 pinMode(downPin, OUTPUT); 408 digitalWrite(downPin, LOW); 409 delay(PressionTime); 410 pinMode(downPin, INPUT); 411 if (Tone > 1) { 412 refresh = HIGH; 413 if (PressionTime < longPressionTime) { 414 Tone = Tone - 1; 415 settedTone = Tone; 416 } else { 417 Tone = 1; 418 settedTone = Tone; 419 } 420 } 421 delay(shortPressionTime); 422} 423 424void toneUp(int PressionTime) { 425 pinMode(modePin, OUTPUT); 426 pinMode(downPin, OUTPUT); 427 digitalWrite(downPin, LOW); 428 digitalWrite(modePin, LOW); 429 //pinMode(upPin, OUTPUT); 430 //digitalWrite(upPin,LOW); 431 delay(PressionTime); 432 pinMode(modePin, INPUT); 433 pinMode(downPin, INPUT); 434 //pinMode(upPin, INPUT); 435 if (Tone < 7) { 436 refresh = HIGH; 437 if (PressionTime < longPressionTime) { 438 Tone = Tone + 1; 439 settedTone = Tone; 440 } else { 441 Tone = 7; 442 settedTone = Tone; 443 } 444 } 445 delay(shortPressionTime); 446}
Downloadable files
Configuration for Serial USB Terminal App
Configuration of Serial and song presets
file.None
Comments
Only logged in users can leave comments