#define ENCODER_DO_NOT_USE_INTERRUPTS
#define ENCODER_OPTIMIZE_INTERRUPTS
//#include <Encoder.h>
#include <EEPROM.h>
#include <AccelStepper.h>
// Audio Stuff
#include <Audio.h>
#include <Wire.h>
const int myInput = AUDIO_INPUT_LINEIN;
// const int myInput = AUDIO_INPUT_MIC;
AudioInputI2S i2s1; //xy=286,128
AudioMixer4 mixer1;
AudioAnalyzePeak peak1; //xy=512,149
AudioAnalyzeRMS rms1;
AudioConnection patchCord1(i2s1, 0, mixer1, 0);
AudioConnection patchCord2(i2s1, 1, mixer1, 1);
AudioConnection patchCord3(mixer1, peak1);
AudioConnection patchCord4(mixer1, rms1);
AudioControlSGTL5000 audioShield;
// end of Audio Stuff
//Encoder readEnc1(5, 6);
AccelStepper stepper(AccelStepper::DRIVER,3,4);
int acceleration;
int readEncoder_1;
int readEncoder_2;
int speed;
long stroke;
float stroke_scale = 1;
elapsedMillis fps;
void setup() {
Serial.begin(57600);
while(!Serial && millis() < 2000 );
Serial.println("begin setup");
AudioMemory(6);
audioShield.enable();
audioShield.lineInLevel(5); // 0 to 15 5 default sets sensitivity 0 less sensitive 15 more sensitive
audioShield.inputSelect(myInput);
audioShield.volume(0);
stepper.setPinsInverted(true,true,true);
stepper.setMinPulseWidth(20);
stepper.setCurrentPosition(0) ;
stepper.setMaxSpeed(30000.0);
stepper.setAcceleration(200000.0);
delay(500); // this is needed for some reason to let voltage stabilize???
// these pins need to be connected between audio board and teensy,
// others hould be left unconnected for this sketch 9,11,13,18,19,22,23 3.3 v gnd
pinMode(3, OUTPUT); // step
pinMode(4, OUTPUT); // direction
// the following are for digital encoder, no pullup required but might be necessary for slave operation???
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
Serial.println("end setup");
}
void loop() {
stepper.run();
uint8_t monoPeak;
uint8_t monoRms;
float stroke_scale_float; // why float? needed in larger sketch
if(fps > 1) {
stepper.run();
fps=0;
if (peak1.available() && rms1.available()) { // need to set up patches etc
fps = 0;
monoPeak = peak1.read() * 600.0;
monoRms = rms1.read() * 600.0;
}
stroke = monoRms * stroke_scale;
Serial.print("stroke ");
Serial.println(stroke);
if (stroke > 70){
stepper.moveTo(stroke);
stepper.run();
}
}
}