Waterme11on
Active member
Hey guys,
So i'm making a poi that makes sound as you swing it around. For those who don't know, a poi is pretty much just a weight on the end of a short tether, that is spun around the hand in various motions. In a nutshell what I have Is a teensy with a speaker on the end of a short rope.
My problem is that I have the poi making sound and reacting to motion really well, but if I leave it turned on for more than a minute or two, the sound reactivity gets really laggy. This becoming worse the longer I leave it turned on.
If you run my code on your own teensy you can see this by rotating and shaking the teensy, and hearing the sound react smoothly, then come back a few minutes later and the sound will no longer react smoothly and will be jumpy and laggy.
My hardware setup is at its core this:
18650 LiPo -> Sparkfun powercell -> Teensy with Prop shield -> Speakers
I also have a few pushbuttons connected and an external usb port connected to the teensy and the Powercell for charging and programming
Here is my code:
Note that my actual code is way larger than this, but this is the smallest version of what I have that still replicates the lagging effect.
I'm suspecting it might have something to do with the floatmap function but I don't know for sure. It's the only thing that Isn't straight from the audio or NXp library as I got it from some random example on the internet.
Any help would be greatly appreciated.
Thanks.
So i'm making a poi that makes sound as you swing it around. For those who don't know, a poi is pretty much just a weight on the end of a short tether, that is spun around the hand in various motions. In a nutshell what I have Is a teensy with a speaker on the end of a short rope.
My problem is that I have the poi making sound and reacting to motion really well, but if I leave it turned on for more than a minute or two, the sound reactivity gets really laggy. This becoming worse the longer I leave it turned on.
If you run my code on your own teensy you can see this by rotating and shaking the teensy, and hearing the sound react smoothly, then come back a few minutes later and the sound will no longer react smoothly and will be jumpy and laggy.
My hardware setup is at its core this:
18650 LiPo -> Sparkfun powercell -> Teensy with Prop shield -> Speakers
I also have a few pushbuttons connected and an external usb port connected to the teensy and the Powercell for charging and programming
Here is my code:
Note that my actual code is way larger than this, but this is the smallest version of what I have that still replicates the lagging effect.
Code:
#include <NXPMotionSense.h>
#include <EEPROM.h>
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioSynthWaveform waveform1; //xy=242,270
AudioMixer4 mixer1; //xy=456,258
AudioOutputAnalog dac1; //xy=662,263
AudioConnection patchCord1(waveform1, 0, mixer1, 0);
AudioConnection patchCord2(mixer1, dac1);
// GUItool: end automatically generated code
NXPMotionSense imu;
NXPSensorFusion filter;
void setup() {
// Initialize IMU and filter
imu.begin();
filter.begin(100);
// Turn on amp
AudioMemory(150);
dac1.analogReference(EXTERNAL); // much louder!
delay(50); // time for DAC voltage stable
pinMode(5, OUTPUT);
digitalWrite(5, HIGH); // turn on the amplifier
delay(10); // allow time to wake up
//set waveform parameters
waveform1.begin(WAVEFORM_SAWTOOTH);
waveform1.amplitude(1);
waveform1.frequency(160);
}
void loop() {
float ax, ay, az;
float gx, gy, gz;
float mx, my, mz;
// Read motion sensors and filter the results
imu.readMotionSensor(ax, ay, az, gx, gy, gz, mx, my, mz);
filter.update(gx, gy, gz, ax, ay, az, mx, my, mz);
//accel and gyro values added up to one value using pythagoreas
float acc = sqrt(ax * ax + ay * ay + az * az);
float gyro = sqrt(gx * gx + gy * gy + gz * gz);
//accel and gyro added together to get overall motion of device
//this number ranges from 0 at freefall to around 5000 at full motion
//the reason for this is i want the teensy to be silent when not moving, and also silent when in freefall
float both = acc * gyro;
//motion based volume
//view the floatmap function below to understand how this works
mixer1.gain(0, floatMap(both, 100, 5000, 0, 1));
}
//used for scaling max and min sensor values to synth values
//I think this might be causing the lag but not sure
//also I dont know how to scale values any other way
float floatMap(float x,
float inMin,
float inMax,
float outMin,
float outMax) {
// Set bounds
if ( x < inMin ) x = inMin;
if ( x > inMax ) x = inMax;
return (x - inMin) * (outMax - outMin) /
(inMax - inMin) + outMin;
}
I'm suspecting it might have something to do with the floatmap function but I don't know for sure. It's the only thing that Isn't straight from the audio or NXp library as I got it from some random example on the internet.
Any help would be greatly appreciated.
Thanks.