Issues I've seen in the current Dev Library.
Re: Issues I've seen in the current Dev Library.
Oh. I remember you posting about it now.
I didn't know that was the name.
I didn't know that was the name.
Re: Issues I've seen in the current Dev Library.
Everything has been running well with the new code.
One thing I did notice and I'm not sure if it was intentional or not was when with the current released libraries when I had the portal set to custom and I was running my random wave modes that Lee created the portal would display the actual wave mode that was running that day (Lagoonal, Short, Pulse ReefCrest, etc) with the dev libraries it displays Custom.
For me it was kind of nice knowing what mode was running that day or seeing that the mode actually changed when I reboot the controller.
Just something I wanted to mention.
Thanks;
One thing I did notice and I'm not sure if it was intentional or not was when with the current released libraries when I had the portal set to custom and I was running my random wave modes that Lee created the portal would display the actual wave mode that was running that day (Lagoonal, Short, Pulse ReefCrest, etc) with the dev libraries it displays Custom.
For me it was kind of nice knowing what mode was running that day or seeing that the mode actually changed when I reboot the controller.
Just something I wanted to mention.
Thanks;
Re: Issues I've seen in the current Dev Library.
That may be something in the portal. Are you looking in the Internal Memory section or on the portal main page. What's odd is that when the mode is custom we set memory to false and set the mode to the appropriate mode so it should be showing the correct mode. What do you see for DCM in the r99 output?
Re: Issues I've seen in the current Dev Library.
I will look at the r99 when I get home, but I'm talking about the display on the portal, not the internal memory.
The Internal memory displays correctly as Custom 50/30
This is an older screen shot.
This one on the new library.
The Internal memory displays correctly as Custom 50/30
This is an older screen shot.
This one on the new library.
Re: Issues I've seen in the current Dev Library.
DCM in the r99 output is 11lnevo wrote:What do you see for DCM in the r99 output?
Re: Issues I've seen in the current Dev Library.
That makes no sense we override the mode to the random setting. what happens when you're in night or feeding mode? and by feeding mode, I mean the time when you should have nutrient transport...
Re: Issues I've seen in the current Dev Library.
When I go into feeding mode the Jebao pumps go off for 15 min and the Portal and U-App display Nutrient Transport Mode 50/30
DCM = 5
After the 15 min the Portal and U-App display Nutrient Transport Mode 50/30
DCM = 5
In night mode the Portal and U-App display Constant 30/30
DCM = 0
DCM = 5
After the 15 min the Portal and U-App display Nutrient Transport Mode 50/30
DCM = 5
In night mode the Portal and U-App display Constant 30/30
DCM = 0
Re: Issues I've seen in the current Dev Library.
That's wierd, we're not doing anything different with the modes when we're in the random section. we set the mode to the appropriate mode. Do the pumps look like they're doing the right then when they're in the random selection?
Re: Issues I've seen in the current Dev Library.
I'm not sure. I'm at work most of the time they are in Random mode.
By the time I get home they are in NTM from after feeding then between 7 and 10pm they go back to Random.
I'll have to look at it more carefully tomorrow.
By the time I get home they are in NTM from after feeding then between 7 and 10pm they go back to Random.
I'll have to look at it more carefully tomorrow.
Re: Issues I've seen in the current Dev Library.
I see your problem. In the first page when you were troubleshooting the DNS code you posted your modified INO...
You have this code for the custom section:
In your original code you have this:
So it seems you took too much out
This is what that section should look like:
And finally here is your updated future 1.1.11 code should look like:
You have this code for the custom section:
Code: Select all
} else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
Code: Select all
} else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
if (modes[rmode]==Else) {
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Mode=Constant;
ReefAngel.DCPump.Speed=ElseMode(InternalMemory.DCPumpSpeed_read(),20,true ); // ElseMode on sync mode, Portal Speed Setting +/- 20%
} else {
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Set speed from portal
}
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
This is what that section should look like:
Code: Select all
} else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Set speed from portal
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
Code: Select all
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>fF
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>f
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <Salinity.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <Humidity.h>
#include <DCPump.h>
#include <ReefAngel.h>
// Define Relay Ports by Name
#define Actinic_Lights 1
#define Day_Lights 2
#define Kalkwasser 3
#define Pumps 4
#define Sump_Fan 5
#define DeNit_Doser 6
#define DeNit_Pump 7
#define ATO_Pump 8
#define Unused Box1_Port1
#define Feeder Box1_Port2
#define Unused Box1_Port3
#define Unused Box1_Port4
#define Unused Box1_Port5
#define Unused Box1_Port6
#define Unused Box1_Port7
#define Dummy Box1_Port8
////// Place global variable code below here
// Does not need to be global.
// unsigned long ATOUpdate=0;
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = 0;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port4Bit;
ReefAngel.WaterChangePortsE[0] = Port1Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port1Bit | Port2Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port2Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 825 );
//Set Standard Menu
ReefAngel.AddStandardMenu();
//Webserver Authentication
ReefAngel.Network.WifiAuthentication("Sacohen:xxxxxxxx");
//DDNS Server
ReefAngel.DDNS("xxxxxxxx");
// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;
ReefAngel.DCPump.ActinicChannel=Sync; // Now you're pump will be affected by the portal settings.
ReefAngel.DCPump.DaylightChannel=AntiSync; // Now you're pump will be affected by the portal settings.
ReefAngel.DCPump.AntiSyncOffset=0;
// Ports that are always on
ReefAngel.Relay.On( Pumps );
ReefAngel.Relay.On( Dummy );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.StandardLights( Actinic_Lights,12,0,22,0 );
ReefAngel.StandardLights( Day_Lights,13,0,21,0 );
ReefAngel.StandardLights( Sump_Fan,13,0,21,0 );
ReefAngel.WaterLevelATO(ATO_Pump,720,28,31);
if ( hour()>=13 && hour()<21 )
ReefAngel.PWM.SetChannel( 5, 0 );
else
ReefAngel.PWM.SetChannel( 5, PWMSlope(21,0,13,0,0,MoonPhase() ,60,0) );
////// Place your custom code below here
//Mix Kalkwasser
static unsigned long Kalk_Mixing = 0;
static unsigned long stopTime = 0;
static byte prevWL=0;
if (ReefAngel.WaterLevel.GetLevel(1)>=100 && prevWL<100) {
stopTime=now()+3600; // Get time one hour from now.
}
prevWL = ReefAngel.WaterLevel.GetLevel(1); // Store the water level
if (now() < stopTime) { ReefAngel.Relay.On(Kalkwasser); } else { ReefAngel.Relay.Off(Kalkwasser); }
//AutoFeeder
static unsigned long autofeeding = 0;
if ((now()%SECS_PER_DAY==64800)) //if it is 6 pm
{
ReefAngel.FeedingModeStart(); //START FEEDING MODE
}
if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
if ( autofeeding == 0 ) {
autofeeding = now(); //set the time of the start of feeding to variable feeding
}
if ((now()-autofeeding>=60) && (now()-autofeeding<=61)) //if between 60 and 61 seconds has past
{
ReefAngel.Relay.On(Feeder); //TURN FEEDER RELAY ON
}
else
{
ReefAngel.Relay.Off(Feeder); //TURN FEEDER RELAY OFF
}
} else {
if ( autofeeding > 0 ) {
autofeeding = 0;
}
}
// DeNitrate Routine
int DeNit_Offset=3600;
int DeNit_Repeat=21600;
int DeNit_Doser_Offset=1200;
int DeNit_Doser_Runtime=600;
int DeNit_Pump_Runtime=1200;
int DeNit_ATO_Offtime=1500;
// Pump comes on first
ReefAngel.Relay.Set(DeNit_Pump,(now()-DeNit_Offset)%DeNit_Repeat<DeNit_Pump_Runtime); // Runs denitrator pump
// Doser comes on second
ReefAngel.Relay.Set(DeNit_Doser,((now()-DeNit_Offset)-DeNit_Doser_Offset)%DeNit_Repeat<DeNit_Doser_Runtime); // Runs denitrator doser
// Disable ATO
if ( (now()-3600)%21600<DeNit_ATO_Offtime) ReefAngel.WaterLevelATO(ATO_Pump,720,0,1);
// Delay WL ATO after water change and DeNit_Dosing
static time_t wcTimer=0;
if (ReefAngel.DisplayedMenu == WATERCHANGE_MODE) wcTimer=now();
// First 10 minutes after WC disable ATO
if (now()-wcTimer >= 0 && now()-wcTimer < 600)
ReefAngel.WaterLevelATO(ATO_Pump,720,0,1);
// Track Salinity low duration
static unsigned long lastGoodSal;
static boolean lowSalFlag;
// Salinity is good, update counter
if (ReefAngel.Params.Salinity>=335) lastGoodSal=now();
// Counter hasn't been updating in 300 seconds..
if (now()-lastGoodSal>300) {
lowSalFlag=true; // Salinity is definitely below 33.5
} else {
lowSalFlag=false; // Salinity back to normal
}
// Disable ATO if lowSalFlag is true
if (lowSalFlag) ReefAngel.WaterLevelATO(ATO_Pump,720,0,1);
// Disable ATO if ATO High IsActive()
if (ReefAngel.HighATO.IsActive())
ReefAngel.WaterLevelATO(ATO_Pump,720,0,1);
// Add random mode if we set to Mode to Custom in portal
static int rmode;
static boolean changeMode=true;
// These are the modes we can cycle through. You can add more and even repeat...
byte modes[] = { ReefCrest, Lagoon, Constant, TidalSwell, ShortPulse, LongPulse, Else };
if (now()%SECS_PER_DAY==0 || changeMode==true) { // Change at midnight or if controller rebooted
rmode=random(100)%sizeof(modes); // Change the mode once per day to pick from our array
changeMode=false;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<3600) {
// Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
} else if (now()%SECS_PER_DAY<43200 || now()%SECS_PER_DAY>=79200) { // 12pm / 10pm
// Night mode (go to 30%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=Constant;
ReefAngel.DCPump.Speed=30;
} else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Set speed from portal
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "Sacohen","xxxxxxxx" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
int x,y;
char text[10];
// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 20, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 20, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();
// Water Level
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,75,57, "WL:" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,99,57, ReefAngel.WaterLevel.GetLevel() );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,66,66, "WL 1:" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,99,66, ReefAngel.WaterLevel.GetLevel(1) );
//Salinity
ConvertNumToString(text, ReefAngel.Params.Salinity, 10);
strcat(text," ");
ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,39,75,"Salinity:");
ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,99,75,text);
pingSerial();
// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 92, TempRelay );
pingSerial();
TempRelay = ReefAngel.Relay.RelayDataE[0];
TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
ReefAngel.LCD.DrawOutletBox(12, 104, TempRelay);
// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}
void DrawCustomGraph()
{
}
Re: Issues I've seen in the current Dev Library.
Thank you Lee.
I was actually surprised when I removed the else mode code and didn't get errors.
I had a feeling it too much out, but I was trying to do it myself.
The new code is uploaded and we'll see what happens at noon when I comes our of night mode.
I was actually surprised when I removed the else mode code and didn't get errors.
I had a feeling it too much out, but I was trying to do it myself.
The new code is uploaded and we'll see what happens at noon when I comes our of night mode.
Re: Issues I've seen in the current Dev Library.
Thanks again Lee.
That looks like it did it.
I just checked on the Portal and it's showing that it's running Gyre. The U-App shows Constant 50/30 but Roberto may not have updated it with the new wave modes yet.
The actual speeds of the relay dimming channels are showing 0% for both Daylight and Actinic.
That looks like it did it.
I just checked on the Portal and it's showing that it's running Gyre. The U-App shows Constant 50/30 but Roberto may not have updated it with the new wave modes yet.
The actual speeds of the relay dimming channels are showing 0% for both Daylight and Actinic.
Re: Issues I've seen in the current Dev Library.
That's expected? or an issue?The actual speeds of the relay dimming channels are showing 0% for both Daylight and Actinic.
Re: Issues I've seen in the current Dev Library.
I don't know how Gyre Mode works, but I don't think they should be at 0 since the are Anti-sync.
I remove Gyre from the list of Random modes and it rebooted as Reef Crest with the Day light channel at 05 and the Actinic starting at 50 and now down to 46%.
I change the options list to Short Pulse only to see what is happening better.
On Short Pulse it is supposed to alternate between 50% and 0% in Anti-Sync.
So when The Daylight is at 50% the Actininc is at 0% and then it switches.
It's not happening. the Daylight is at 0% all the time.
I just looked at the code again and the Pumps offest that you created was at 0% so I changed it to 100% and re-uploaded the code.
It came back as ReefCrest with both pumps showing different percentages as it should.
I guess the version of the code you pulled from earlier in this post had the offset at 0% because I was testing something at that time.
It seems to be fine now.
Thanks.
I remove Gyre from the list of Random modes and it rebooted as Reef Crest with the Day light channel at 05 and the Actinic starting at 50 and now down to 46%.
I change the options list to Short Pulse only to see what is happening better.
On Short Pulse it is supposed to alternate between 50% and 0% in Anti-Sync.
So when The Daylight is at 50% the Actininc is at 0% and then it switches.
It's not happening. the Daylight is at 0% all the time.
I just looked at the code again and the Pumps offest that you created was at 0% so I changed it to 100% and re-uploaded the code.
It came back as ReefCrest with both pumps showing different percentages as it should.
I guess the version of the code you pulled from earlier in this post had the offset at 0% because I was testing something at that time.
It seems to be fine now.
Thanks.
Re: Issues I've seen in the current Dev Library.
If offset was 0 then yeah that would be expected. Gyre mode does one pump at a time for a decent duration. So if offset was 0 it could have ended up 0/0.
Re: Issues I've seen in the current Dev Library.
I'm not sure I like Gyre.
I looked at it again and it's now on 50% on the Daylight Channel and I haven't seen the Actinic channel come off 0%.
Going to keep watching it.
I looked at it again and it's now on 50% on the Daylight Channel and I haven't seen the Actinic channel come off 0%.
Going to keep watching it.
Re: Issues I've seen in the current Dev Library.
Whats your range and duration?
Re: Issues I've seen in the current Dev Library.
Where is that set?
I have a speed of 50 and a duration of 30 on the Portal. I think my threshold is at 30 also.
I have a speed of 50 and a duration of 30 on the Portal. I think my threshold is at 30 also.
Re: Issues I've seen in the current Dev Library.
So what the means is that every 30 minutes one pump will start at 0 and work up to 50% speed and then back down to 0% and then the other pump will ramp up from 0% to 50%. It will basically create a gyre in one direction for the duration in minutes and then smoothly switch between the pumps.
The gyre concept is that you're not making turbulent changes to the water and having the waters momentum add to the speed and having the turbulence where the water crashes into the coral versus having the turbulence created by opposing pumps. For a real gyre affect, I would increase the duration to something longer than 30 minutes may more like hours
The gyre concept is that you're not making turbulent changes to the water and having the waters momentum add to the speed and having the turbulence where the water crashes into the coral versus having the turbulence created by opposing pumps. For a real gyre affect, I would increase the duration to something longer than 30 minutes may more like hours
Re: Issues I've seen in the current Dev Library.
The amounts are set in the Portal and are used for all the modes that are randomly chosen.
Is there a way with the random mode that you created for PaulTurner911 and modified for me to have different setting for each mode?
Is there a way with the random mode that you created for PaulTurner911 and modified for me to have different setting for each mode?
Re: Issues I've seen in the current Dev Library.
Yeah thats the chunk of code we took out with the Else mode that you chopped up
I'll let you take a stab at it, but basically you just want to check if the mode is going to be Gyre you can set the duration to whatever you'd prefer. I would just set a multiple that you want and multiply it. Like DCPump.Duration * 5 or whatever you'd like it to be.
I'll let you take a stab at it, but basically you just want to check if the mode is going to be Gyre you can set the duration to whatever you'd prefer. I would just set a multiple that you want and multiply it. Like DCPump.Duration * 5 or whatever you'd like it to be.
Re: Issues I've seen in the current Dev Library.
So, is there a default threshold of 30%?
If so, does a mode like Gyre just basically stop between 30 and 0 (and 0 and 30)? That leaves a lot of time with no movement.
I'm speaking of Portal selection. Looks like the library code includes a range.
--Colin
If so, does a mode like Gyre just basically stop between 30 and 0 (and 0 and 30)? That leaves a lot of time with no movement.
I'm speaking of Portal selection. Looks like the library code includes a range.
--Colin
Re: Issues I've seen in the current Dev Library.
The default threshold in the library is 30. I'm not sure what happens when set to 0 since I dont have one. If you set the threshold to 30 then 30 would be your slowest speed. I dont believe it scaled so basically anything less than 30 becomes 30.
Re: Issues I've seen in the current Dev Library.
I notice the pumps shut down as part of the cycle in Gyre mode when selected from the portal. Not sure if it's supposed to do that or not. Makes me nervous not having any movement.
--Colin
--Colin
Re: Issues I've seen in the current Dev Library.
Alan would need to comment on that..cosmith71 wrote:I notice the pumps shut down as part of the cycle in Gyre mode when selected from the portal. Not sure if it's supposed to do that or not. Makes me nervous not having any movement.
--Colin
Re: Issues I've seen in the current Dev Library.
Put this in your loop:cosmith71 wrote:Is there a way to exclude the DCPumps from feeding mode? I.e., ignore ReefAngel.DCPump.FeedingSpeed when in feeding mode?
Thanks,
--Colin
ReefAngel.DCPump.FeedingSpeed=InternalMemory.DCPumpSpeed_read();
I dont know if i have the function name right but essentially you can set the feeding mode speed to what you've set in memory.
Maybe roberto has a better suggestion.
You could also do math on it, lets say you want it 50% of the usual, you can add /2
Re: Issues I've seen in the current Dev Library.
I run Gyre with a duration of five minutes and speed of 70. It would normally go from 0 up to 70 and back down on one side, then from 0 up to 70 on the other side. However with the way it is now, because of the threshold set for DC pumps which has a default of 30 it will have both pumps off when the math calls for values between 0 and 15. Then it will come on at 30 and stay there until the math calls for values over 30 and start increasing. I should change it up a bit so that the variance is between the threshold and the max, not 0 and the max, then something would always be running.
Re: Issues I've seen in the current Dev Library.
I thought it was something like that. I noticed it runs at 0 and at 30 for longer than other values. It's pretty noticeable at higher durations, especially the 0.AlanM wrote:I run Gyre with a duration of five minutes and speed of 70. It would normally go from 0 up to 70 and back down on one side, then from 0 up to 70 on the other side. However with the way it is now, because of the threshold set for DC pumps which has a default of 30 it will have both pumps off when the math calls for values between 0 and 15. Then it will come on at 30 and stay there until the math calls for values over 30 and start increasing. I should change it up a bit so that the variance is between the threshold and the max, not 0 and the max, then something would always be running.
--Colin
Re: Issues I've seen in the current Dev Library.
You can call Gyre mode manually and set the range from 30 to whatever manually and then it won't spend as long under the threshold...
Alan's curly tail curve spends a lot of time at the low end, sine mode would do the same thing actually.
Alan, maybe for the threshold function we should use map() to map the 0-100 to threshold-100 instead of just cutting it off, then you don't have to make arbitrary decisions like when to go to 0....
Alan's curly tail curve spends a lot of time at the low end, sine mode would do the same thing actually.
Alan, maybe for the threshold function we should use map() to map the 0-100 to threshold-100 instead of just cutting it off, then you don't have to make arbitrary decisions like when to go to 0....
Re: Issues I've seen in the current Dev Library.
If you'd like to try this branch, I switched the Threshold function to use the map function instead.
https://github.com/lnevo/Libraries/tree/thresholdmap
So now, the range from 0-100 will get mapped to threshold-100.
https://github.com/lnevo/Libraries/tree/thresholdmap
So now, the range from 0-100 will get mapped to threshold-100.