- Posts: 4402
Control Mixer
- PhracturedBlue
- Topic Author
- Offline
Please Log in or Create an account to join the conversation.
- FDR
- Offline
PhracturedBlue wrote: I implemented the er9x system almost as-is, but did not implement the dual-rate/expo as a pre-filter. Instead the template will automatically define multiple mixers to get the desired behavior. We may need a new template or moodify the existing template to handle the flight-mode switch.
Here is the DR template. There is only 1 screen for input, but it is implemented as 2 mixers:
1) ch = If (! dr_switch) Input1 * rate1 * curve1
2) ch = If (dr_switch) Input1 * rate2 * curve1
To do flight mode, you'd need something like this:
Here is a collective definition (throttle stick controls the collective in both modes, but with different curves)
1) var1 = If (! fmode) Input1 * curve1 //This is a 2d curve
2) var1 = If (fmode) Input1 * curve2 //This is a 3d curve
3) collective = If (! dr_switch) var1 * rate1
4) collective = If (dr_switch) var1 * rate2
The throttle could be the same, using an 'idle up' curve for 3dmode, or it could be a function of a different channel (like the collective or a mix) for 3dmode.
Note that after defining a dual-rate mode (and pressing 'ok'), you can switch to 'complex' to see how the mixers were actually configured.
I think it will be better to continue here, even though my post will concern things about both the mixer and the GUI...
I will try to write down, what I understand about the mixer interface and what I do not:
Main sreen:
1. On the screen in the first column there are the 8 channels (numbered correctly from 1 to 8, so users can understand, as opposed to the right pane of the emulator, where the same channels are indexed from zero)
2. The second column contains the stick associated with this channel, or does this come from the source? If it is the source, what happens when the mixer type is "None", because it has no source definition? Is it an unassigned channel then? Either way, I couldn't change that, so it is so far probably just a hardcoded example, isn't it?
3. The third column is a button titled with the selected "mixer type". It opens the mixer for editing. Clear.
4. The last (fourth) column shows the switches and/or curves applied. I couldn't change it either, so the comment for the 2nd column applies here too. What I do not understand is: what if it is a complex mixer, which can have more pages (= more mixers) with different switches and curves? The other thing: in all the "switch" controls the items are rather channels, than actually harware or software switches.
"None" mixer type:
5. See 2. Is it an unassigned channel then? By the way it freezes when I click OK in the "None" window...
"Simple" mixer type:
6. "Src" is the source stick or channel value. I see the four sticks: THR, RUD, ELE, AIL; the three premixed cyclic channel: CYC0, CYC2, CYC2 (Wouldn't be better to index them 1 to 3 for the non-programmer users? ); and the channel outputs (?) from Ch1 to Ch12. Will the channels be used as a calculated dummy one to use in other mixes, like in the er9x, or these are only the actual channels, and there are other ways to implement the intermediate calculations?
7. "Curve" I see some useful predefined functions here, plus the EXPO option, which duplicates the function of the "Expo" mixer type, plus the PWL curves with six different resolution from 3 points to 13. (They are cool! ) My only (GUI related) complaints here, that it is not visible that some of them are clickable, which then opens it for editing. I realized it only by accident. Is there a way to indicate the editing possibility? By the way it contradicts one of my GUI ideas to show a selection list in case of clicking in such an option spin button...
Expo editing screen:
8. I have opened it by an accident.
9. I like setting it with the mouse (i.e. the touch pen)! It was a little bit confusing first, because I thought it is the curve that I have to drag, but after that I realized, that only the Y value of the click matters. Nice.
10. IMO it would be better to insist on one layout for the OK and Cancel buttons. For me it is more logical in the OK-Cancel order than vice versa, YMMV.
Curve editing screen:
11. It's cool to have different number of points! It very well substitutes Walkera's approach of having optional points. Not the same, but can be matched pretty good.
12. It is also cool to set points by touch! It would be even better if one doesn't have to select the point first, but just clicking throw the graph to set the curve, i.e. it could use the X coordinate of the click to change the point.
13. GUI related: IMO the graphs should maintain the same proportional XY size on all screens to help to understand the curves. Besides I would like some helping grid (with low contrast, for example dark grey, supposing a black background, and light grey for the XY axles) by every 20% or 25%. Other fancy idea is to show the X and Y value projections of the actual stick (or channel) value point with dashed or dotted lines, where applicable...
14. Is it intentional that if I set a curve, and then go to an other channel, there will be the same curve by default?
Scale, Offset, Max, Min:
15. I see no effect they have. Shouldn't they change the transfer function visibly?
16. Again the opposit order, i.e. Min-Max would be more logical to me. YMMV
"DualRate" mixer type:
17. How the D/R value is different from the Scale or Min/Max? Since neither of them has effect on the graph, it isn't easy to understand...
18. Shouldn't some of the values offer more than 100% to scale thing up? That is where the separate D/R filter would come handy, or the current travel adjust after the mixes...
19. I have already written about the switches which are rather channels in point 4.
"Expo" mixer type:
20. Points 4., 15., 16. apply here too...
21. What is the difference between the expo mixer type and a simple mixer type with expo curve, apart from the possibility to define a switch and directly editing the expo value (i.e. without opening the expo screen)?
22. There is a little bug on opening the expo screen by clicking into the expo box: open a mixer by clicking the button; step throw to complex type; change the curve to any PWL; step back one to expo type; click into the expo box: it will show the curve screen instead of the expo screen.
"Complex" mixer type:
23. Well, let's say: it is complex!
24. The new controls are: the "Mixers" which determines how many mixes this complex type consists of; the "Page" which says which of the mixers we are seeing/editing now; and the "Mux", which determines how this mixer affect the previous mixes (i.e the output value so far).
25. The "Mux" can replace the whole previous value with the one it calculates, but it has sense only if it depends on a switch. It can also multiply the previous value with it's calculated value, or add it as a correction value.
26. IMO the logical order is Mixers (= Mixer count), Page (Current mixer), Mux, all the other settings...
27. I have already mentioned my concern about what is shown on the main screen's switch column in case a multi-mixer complex type...
That is so far...
I hope you do not take it as nitpicking, I really would like to understand the functioning and the idea behind, and would like to help.
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
Noted. I've changed the right-hand screen. You will eventually be able to scroll down to see all channels rather than just the 1st 8FDR wrote: Main sreen:
1. On the screen in the first column there are the 8 channels (numbered correctly from 1 to 8, so users can understand, as opposed to the right pane of the emulator, where the same channels are indexed from zero)
Yes. the main screen is all hard-coded except for the mixer type at the moment. The 2nd column will be the source. you can't change it here, but it should reflect the value in the mixer.2. The second column contains the stick associated with this channel, or does this come from the source? If it is the source, what happens when the mixer type is "None", because it has no source definition? Is it an unassigned channel then? Either way, I couldn't change that, so it is so far probably just a hardcoded example, isn't it?
Again, it is hardcoded as you noted. It should show the switch in use if applicable. I'm not sure showing the curve makes any sense here since here. Maybe just the curve function.4. The last (fourth) column shows the switches and/or curves applied. I couldn't change it either, so the comment for the 2nd column applies here too. What I do not understand is: what if it is a complex mixer, which can have more pages (= more mixers) with different switches and curves? The other thing: in all the "switch" controls the items are rather channels, than actually harware or software switches.
would work.
I am not sure how to deal with the complex mixers. The way er9x does it looks like this:
ch1 <control1> <switch1> <curve1>
+ <control2> <switch2> <curve2>
R <control3> <switch3> <curve3>
Note that in er9x, there is a pool of curves and the mixer selects one, so you'll see something like "C1" which tells you that the 1st curve is used. In my current implementation, each mixer has a dedicated curve so this doesn't make sense. I didn't see much value in reusing the same curve for multiple channels, and think it can be confusing, so I didn't do that.
Yes, this is an unassigned channel. I've fixed the hang. Do you think 'Unassigned' would be a better name?"None" mixer type:
5. See 2. Is it an unassigned channel then? By the way it freezes when I click OK in the "None" window...
That is just a typo. the cyclics should be 1-3. I've fixed it now."Simple" mixer type:
6. "Src" is the source stick or channel value. I see the four sticks: THR, RUD, ELE, AIL; the three premixed cyclic channel: CYC0, CYC2, CYC2 (Wouldn't be better to index them 1 to 3 for the non-programmer users? ); and the channel outputs (?) from Ch1 to Ch12. Will the channels be used as a calculated dummy one to use in other mixes, like in the er9x, or these are only the actual channels, and there are other ways to implement the intermediate calculations?
I am planning to make the source spinbox name clickable. When you click it, it will reverse (minus sign in front). I'll do the same for the switch spinbox. Note that this is different than channel reverse where you reverse the output, this will just reverse the input (and/or whether the switch applies in the ON or off state)
Currently sources work like er9x where unused channels can be used as intermediate variables. I've been thinking that may be confusing, so I was considering having 3 categories: inputs (sticks, switches, buttons), channels (actual channels), and 'vars' which are intermediate. Do you think this would be more clear? It means the main page would need to show all channels and all vars
See my answer to 21 for the expo stuff.7. "Curve" I see some useful predefined functions here, plus the EXPO option, which duplicates the function of the "Expo" mixer type, plus the PWL curves with six different resolution from 3 points to 13. (They are cool! ) My only (GUI related) complaints here, that it is not visible that some of them are clickable, which then opens it for editing. I realized it only by accident. Is there a way to indicate the editing possibility? By the way it contradicts one of my GUI ideas to show a selection list in case of clicking in such an option spin button...
As for indicating where it can be clicked....For the cases where no option is clickable (the min/max buttons) we could use a different button or different text color to indicate it. For the 'curve' spinbox, I'm not sure what to do. I could have them all be clickable and just have no control options when the curve screen pops up? Also I don't understand your last sentence. Can you rephrase which GUI idea you don't like?
good observation. I'll think about OK-Cancel vs Cancel-OKExpo editing screen:
10. IMO it would be better to insist on one layout for the OK and Cancel buttons. For me it is more logical in the OK-Cancel order than vice versa, YMMV.
With the mouse this would make sense. The problem is that the touch-screen is not as accurate, and if there are more than 3 points, you could easily grab the wrong one. I agree the current interface isn't as nice, but it is more robust.Curve editing screen:
12. It is also cool to set points by touch! It would be even better if one doesn't have to select the point first, but just clicking throw the graph to set the curve, i.e. it could use the X coordinate of the click to change the point.
Yes, the curve display could be much nicer. In the editing screen it will be difficult to overlay the final transfer function because we don't have access to the necessary data at that point. I'll think about it some more. Adding minor grids is a good idea. I'll look into it.13. GUI related: IMO the graphs should maintain the same proportional XY size on all screens to help to understand the curves. Besides I would like some helping grid (with low contrast, for example dark grey, supposing a black background, and light grey for the XY axles) by every 20% or 25%. Other fancy idea is to show the X and Y value projections of the actual stick (or channel) value point with dashed or dotted lines, where applicable...
No that is a bug.14. Is it intentional that if I set a curve, and then go to an other channel, there will be the same curve by default?
I am planning to move the min/max to a 'channel page' because they aren't actually part of the mixer at all. they set the physical limits of the channel. It is also where I'll set the channel reverse. Do you think that'll make more sense?Scale, Offset, Max, Min:
15. I see no effect they have. Shouldn't they change the transfer function visibly?
16. Again the opposit order, i.e. Min-Max would be more logical to me. YMMV
Currently the curve at the bottom of the screen is not the final transfer function. It is just an image of the curve. Having it be the transfer function would be really cool (and here you could overlay the actual value of the stick input. But I'm afraid it would be confusing because it would only apply for the specific mixer/template. I.e. the curve would not necessarily represent what the final channel would look like since mixers can stack. Also if another mixer were the soucre, I'm not sure I could get the overlay to work. I'm open to opinions
DualRate means you have 2 scalers, one when the switch is on, one when it is off. They both share the same curve. Normally you'd have one scaler at 100% and one at 70% (for instance). Min/max are fixed and are the same regardless of switch position (as I mentioned for 16, min/max are physical limits for the servos and I'm planning to move them out of the mixer page)"DualRate" mixer type:
17. How the D/R value is different from the Scale or Min/Max? Since neither of them has effect on the graph, it isn't easy to understand...
yes, min/max and scaler/offsetshould allo to go to +/- 125% It is on my todo list18. Shouldn't some of the values offer more than 100% to scale thing up? That is where the separate D/R filter would come handy, or the current travel adjust after the mixes...
It is a it confusing at the moment because there are only 4 inputs coded (the sticks) there aren't any switches implemented yet. That is why you don't see an option to select which switch controls the mixer. I'll get to it soon.19. I have already written about the switches which are rather channels in point 4.
The 'expo curve' is not identical to the 'expo template'. The template does use the 'expo curve' but it is actually implementing 2 mixers (one with the curve and one without, whereas the curve is only setting the curve for a single mixer. For instance setting expo on the simple template means you can't disable it) Setting expo in the dualRate template means that the same curve is used regardless of the switch, and the switch just controls the scaling."Expo" mixer type:
21. What is the difference between the expo mixer type and a simple mixer type with expo curve, apart from the possibility to define a switch and directly editing the expo value (i.e. without opening the expo screen)?
good catch.22. There is a little bug on opening the expo screen by clicking into the expo box: open a mixer by clicking the button; step throw to complex type; change the curve to any PWL; step back one to expo type; click into the expo box: it will show the curve screen instead of the expo screen.
you got it right."Complex" mixer type:
24. The new controls are: the "Mixers" which determines how many mixes this complex type consists of; the "Page" which says which of the mixers we are seeing/editing now; and the "Mux", which determines how this mixer affect the previous mixes (i.e the output value so far).
25. The "Mux" can replace the whole previous value with the one it calculates, but it has sense only if it depends on a switch. It can also multiply the previous value with it's calculated value, or add it as a correction value.
I was trying to keep the different template pages as similar as possible. I'm certainly open to other ideas. I'll think about this further26. IMO the logical order is Mixers (= Mixer count), Page (Current mixer), Mux, all the other settings...
Again thank you for taking the time to give this very detailed feedback. It is very valuable. Please continue to provide feedback on what you find.
I'll make as many of the fixes noted above as I can and will check in a new release.
Please Log in or Create an account to join the conversation.
- FDR
- Offline
It would be too long to quote the whole post, so I will reflect in pieces.
No, I'm not sure jet. One thing is sure: it is too complicated. I think I'm not a simpleton, but it is difficult for me to understand, so for a simple (not even programmer ) user it could be too difficult.PhracturedBlue wrote: 4. Do you think we should go the er9x route for this?
So the er9x uses more row to describe a channel mixes if it has more. It makes sense. (Their user manual doesn't show an example of it.)
But we might eliminate the confusion, it the functions would be elementary, not that complex as they are now. For example there are those min/max values, which even doesn't depend on the mixes, curves or switches. They are the analogues for the current travel adjust values, which are the last applied scaling values for the output, to suit the otherwise perfectly mixed channel value to the phisical servo travel. They should be added separately.
And there are the problem of the dual rates (which doesn't necessarily mean two values, for example in the er9x it may be 3: low, mid, high) and expos. Their meaning is to preprocess the inputs to a choosen characteristics, or simple limit the inputs to achieve a more relaxing control over a too responsive one, without the need of redrawing all the curves. I would like a separate function for this too.
As you wrote, the difference between the expo mixer and a dual rate expo curve is that the later is switchable. I would probably settled with series of primitive functions, any of which would be switchable.
To explain that here is an example:
ch1 <input> // the stick
* <scale_1> // a basic limit
* <scale_2> <switch_1> // d/r
* <expo_1> <switch_1> // expo
* <curve_1> <switch_2> // a curve, which is a simple transfer function
R <curve_2> <switch_3>
+ <mix_1> <switch_2> // a mix, which depends on other channels value
* <mix_2>
* <travel> // the final "scaling"
This is a more complicated approach to display, but simpler to understand, I think. There is no need to display all of this on the main page, there it would be enough to indicate (with small icons for example), that there is scaling(s), curve(s), mix(es), and that they depend on switch(es).
After opening the channel screen, there could be this list, with the ability to select the switches, and to open the function (like scale, expo, curve, mix, etc) screens to edit the values.
Do not start to change anything, I just thinking loud here, I should rethink these things...
Other thing I have forgotten, that we should allow to change the functions order (within sense), in your approach it would be the order of pages in a complex mixer...
I hope I was clear. It is quite hard for me to put it to words, my engish is too bad.
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
As you said, this is nearly identical to the 'complex' mixer, (or to the original er9x implementation). the main difference is that you have broken down the transfer function and scale/offset into separate 'mixers'. From my perspective currently a single mixer implements:ch1 <input> // the stick * <scale_1> // a basic limit * <scale_2> <switch_1> // d/r * <expo_1> <switch_1> // expo * <curve_1> <switch_2> // a curve, which is a simple transfer function R <curve_2> <switch_3> + <mix_1> <switch_2> // a mix, which depends on other channels value * <mix_2> * <travel> // the final "scaling"
if (switch) then
mix = input * f(x) * scale + offset
if (mux == ADD) then
out = out + mix
else if (mux == MULT) then
out = out * mix
else if (mux == REPLACE) then
out = mix
You seem to be considering something like 2 types of mixers:
if (switch) then
if (type == SCALE)
mix = scale + offset
else if (type == TRANSFER_FUNCTION) then
mix = f(x)
if (input) then
mix = mix * input
if (mux == ADD) then
out = out + mix
if (mux == MULT) then
out = out * mix
else if (mux == REPLACE) then
out = mix
yes, ordering the mixer pages is a necessary additionOther thing I have forgotten, that we should allow to change the functions order (within sense), in your approach it would be the order of pages in a complex mixer...
Also, I have just checked in fixes for most of the bugs you reported:
* switching from complex->expo tempate you still see the pwl rather than expo curve
* curve values are reset when editing a new (unassigned) channel
* xy graph shows dashed line at 25, 50, 75% (in curve editor only)
* all devo8 switches are now mapped:
z = gear, x = rudder D/R, c = elevator D/R, v = Aileron D/R, b = Mix (3-way), n = FMode (3-way)
* CYC is 1-3 now
* 'Ok' works when a mixer is set to 'none'
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
Because it doesn't obey the servo limits, I would recommend not playing with the 'offset' value, because it can cause the function to go out of range.
I'm not sure it is a good solution though. The graph is evaluated by evaluating the current value of all Tx inputs except for the value shown in the current mixer 'Source'. The curve then plots a sweep of the mixer Source against the channel output. I also draw a box with the current value of the channel which will move as you change any inputs affecting the channel.
The weird thing is that if you, for instance, are on the 'Expo' template, and toggle the switch, the curve will change, since with the switch off, the curve is linear, and with the switch on it is expo.
Anyhow, please give it a try and provide feedback on it.
Please Log in or Create an account to join the conversation.
- FDR
- Offline
One other main difference is, that in my way (or in er9x way if you like), there is a switch for every basic function, so they are independent.PhracturedBlue wrote: As you said, this is nearly identical to the 'complex' mixer, (or to the original er9x implementation). the main difference is that you have broken down the transfer function and scale/offset into separate 'mixers'. From my perspective currently a single mixer implements:
To me it is harder to understand. That said, it may be that my idea for 'templates' that hide the complexity of the mixers is poorly thought out or at least poorly implemented. I was trying to make the most common cases easy to implement. To properly do 3-position fmode + 3-position dual-rate channel, it will take many lines in a complex mixer. I could try to abstract that away by building a better 'dual rate' template that can handle all of that for the user, and only expose the settings that are needed (the page could potentially look just like the Devo8 dual-rate page, though I'm not keen on that layout either) and leave the user ignorant of the mixers. Alternatively we could take the er9x route, and force the user to learn the (reasonably simple) mixer rules, and build complex expressions with them. In my use of er9x, I think this is too high of a learning curve for most users.
An example to enlighten it:
If you want to implement a d/r option and some curve, you will use the complex type. But since every page has one switch for all the settings, to be able to switch the d/r scaling, you have to repeat the same curve on each page.
By the way, as I have already written about, dual rate can mean more then two options, and the expo isn't necessarily an on/off thing either, but more likely two (or more) different value depending on switch(es).
That's why I like more the er9x way of preconditioning expo/dr options:
I would go further and add the expo/dr option to pots and trims too!
(In the DEVO 8 we do not have pots, but in the 7, 10 and 12 we will. The lack of pots what makes me want to use the trims for channel inputs... Of course they don't need calibration, but trim step settings instead.)
If I understood well, we agreed, that the min/max values go out to the end with the reverse switches. (They are the "Limits" on the chart.)
Now if we had a separate module for the expo/dr, then what we have in the mixer, is just that: mixers.
Note, that I have splitted even the "mixer" function into separate curve and mix(er). The difference is that the curve is only a transfer function, i.e. takes the same channel value as the input, and it's output will be the new value of the channel. The mix however can take an other channel/stick value as input, and it's output can add, multiply or replace the affected channel value. It is very much alike to the curve, if somebody selects the same channel as the source.
The question then is, if my simple transfer curve belongs to the preprocessing section too, i.e. expo/dr/curve...
The other advantage of separating could be, that in this way these blocks don't belong to the channels, but directly to the inputs (sticks, pots, trims) instead.
It later allows you to simple assign an "input" to the mixer including all the preprocessing.
Furthermore I would allow to select for input: a stick (or pot) input (which is the position calibrated/normalized); a stick (or pot or trim) value (which is the stick input processed by expo/dr/curve); or a channel value. The same things could be used as source for the software switches complemented with a value and direction.
Please Log in or Create an account to join the conversation.
- FDR
- Offline
Please Log in or Create an account to join the conversation.
- FDR
- Offline
I would like it better with solid lines for the grid and the graph too:
Still someone could draw the curve with the pen. Is it possible with the touch screen, or it only supports clicks?PhracturedBlue wrote:
With the mouse this would make sense. The problem is that the touch-screen is not as accurate, and if there are more than 3 points, you could easily grab the wrong one. I agree the current interface isn't as nice, but it is more robust.Curve editing screen:
12. It is also cool to set points by touch! It would be even better if one doesn't have to select the point first, but just clicking throw the graph to set the curve, i.e. it could use the X coordinate of the click to change the point.
It would be a stellar feature!
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
I really don't see any difference between expo and a curve. Expo is just one specific transfer function.
I think you may be getting confused by my poorly defined template pages and the capabilities of the mixer. If you like the er9x way of inputting expo and d/r better, we could have a template that looks nearly the same (2 switches, 3 scalers and 3 curves). The main problem I have with their approach is that once I define a D/R or expo on a stick, I can't get at the raw value of that stick anymore. My approach allows you to do so. Their mixers are fully capable to implement the same capability available on the D/R expo page (I've done so) so the underlying implementation doesn't seem important. It is just a question of presentation in my mind, and it is clear you don't like mine Also, by moving the expo d/r function into the mixer, it is now easy to apply it at to any input and/or intermediate channel.
Let me merge the d/r and expo templates into one with the same capabilities as the er9x controls, and see if that helps any.
Please Log in or Create an account to join the conversation.
- FDR
- Offline
It's not essential, I just wanted to clearify...PhracturedBlue wrote:
Yes, this is an unassigned channel. I've fixed the hang. Do you think 'Unassigned' would be a better name?"None" mixer type:
5. See 2. Is it an unassigned channel then? By the way it freezes when I click OK in the "None" window...
Either will do. Only advanced users will define mixers, they will get it both ways......."Simple" mixer type:
6. ..... Will the channels be used as a calculated dummy one to use in other mixes, like in the er9x, or these are only the actual channels, and there are other ways to implement the intermediate calculations?
Currently sources work like er9x where unused channels can be used as intermediate variables. I've been thinking that may be confusing, so I was considering having 3 categories: inputs (sticks, switches, buttons), channels (actual channels), and 'vars' which are intermediate. Do you think this would be more clear? It means the main page would need to show all channels and all vars
Then first I'll try to explain what I meant:See my answer to 21 for the expo stuff.7. "Curve" I see some useful predefined functions here, plus the EXPO option, which duplicates the function of the "Expo" mixer type, plus the PWL curves with six different resolution from 3 points to 13. (They are cool! ) My only (GUI related) complaints here, that it is not visible that some of them are clickable, which then opens it for editing. I realized it only by accident. Is there a way to indicate the editing possibility? By the way it contradicts one of my GUI ideas to show a selection list in case of clicking in such an option spin button...
As for indicating where it can be clicked....For the cases where no option is clickable (the min/max buttons) we could use a different button or different text color to indicate it. For the 'curve' spinbox, I'm not sure what to do. I could have them all be clickable and just have no control options when the curve screen pops up? Also I don't understand your last sentence. Can you rephrase which GUI idea you don't like?
Walkera uses dropdown lists instead your (let's call) option spin buttons. The dropdown's advantage, that you see all the options you can choose, don't have to scroll them up and down to find the one you are looking for.
However your option spin button can be handled with buttons more simpler.
Let's look at the other inputs too:
For numbers Walkera used a numeric spin button, but it had no quick change option, you had to step throw the whole range by one (or sometimes even in 0.5 increments).
Your approach with the long clicks is better. (I have one observation here: if I push the arrow, then first it adds one, only after then it starts to step throw by 5, so in the end you have to correct it back. Anyway I feel 10 would suit as large steps better: the usual range is -100..+100, which is 20 steps by 10.)
And don't forget there are some direct inputs: model name as text, fixed id as a large number (is not suitable for spinning throw), and perhaps the timer values. They should be input on a virtual keyboard, if it is possible. (It is that way in the original fw.)
So I thought it would be cool, if clicking in these spin buttons and boxes could open the appropriate editor, i.e. textual virtual keyboard for the text boxes (model name), numeric virtual keyboard for the numbered boxes (like the fixed id and timer) and numeric spin buttons (practically all the numeric values), and a dropdown list for the option spin buttons.
But this idea interferes with your clickable funtion for opening a whole editing screen for it. I don't say it is bad, but at least confusing, since not all the options need this kind of opening, so it should be indicated somehow, that it is clickable, and a click will do something...
The simplest way would be to indicate it in the caption's text, for example with an asterisk, like "EXPO*" or "5Point*", and document as is...
Absolutely. At the end there should be a min/max scaling (they call it servo "travel adjust" now), a value limit (might be asimmetric too), and a reverse switch.I am planning to move the min/max to a 'channel page' because they aren't actually part of the mixer at all. they set the physical limits of the channel. It is also where I'll set the channel reverse. Do you think that'll make more sense?Scale, Offset, Max, Min:
15. I see no effect they have. Shouldn't they change the transfer function visibly?
16. Again the opposit order, i.e. Min-Max would be more logical to me. YMMV
Currently the curve at the bottom of the screen is not the final transfer function. It is just an image of the curve. Having it be the transfer function would be really cool (and here you could overlay the actual value of the stick input. But I'm afraid it would be confusing because it would only apply for the specific mixer/template. I.e. the curve would not necessarily represent what the final channel would look like since mixers can stack. Also if another mixer were the soucre, I'm not sure I could get the overlay to work. I'm open to opinions
Please Log in or Create an account to join the conversation.
- FDR
- Offline
Wait! You are right, I was too sloppy with that example. I see now you can do it by setting the mux to add, and ensuring the curve value is zero across the range. However this is my complaint, that you have to handle additional settings to implement something they do not belong to.PhracturedBlue wrote: The system I've developed can be modeled exactly like the er9x system. You don't need to model d/r the way I have. You can model it as a curve and and multiplier (so that the curve doesn't need to be duplicated).
I really don't see any difference between expo and a curve. Expo is just one specific transfer function.
I think you may be getting confused by my poorly defined template pages and the capabilities of the mixer. If you like the er9x way of inputting expo and d/r better, we could have a template that looks nearly the same (2 switches, 3 scalers and 3 curves). The main problem I have with their approach is that once I define a D/R or expo on a stick, I can't get at the raw value of that stick anymore. My approach allows you to do so. Their mixers are fully capable to implement the same capability available on the D/R expo page (I've done so) so the underlying implementation doesn't seem important. It is just a question of presentation in my mind, and it is clear you don't like mine Also, by moving the expo d/r function into the mixer, it is now easy to apply it at to any input and/or intermediate channel.
Let me merge the d/r and expo templates into one with the same capabilities as the er9x controls, and see if that helps any.
I do not dislike your implementation ( ), I just found it confusing sometimes, but I understand your goal to simplify the need of composing complex mixers. But as I see, your complex type will be essential to achieve the desired mixes, and it doesn't seem to be simpler.
Their limitation, that you cannot use the row value if you defined expo/dr, is very simple to overcome: as I have written already, you can easily allow to select stick (row) input and stick (expo/dr corrected) value alike as channel/mixer source.
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
I would have prefered a drop-down list too. Implementing it was more difficult though because you need to figure out where to display it based on where it=n the screen it is (towards the bottom, it needs to open 'up' and at the top it needs to open 'down'), so I figured I'd just let MatCat do it instead. The spin-buttons were easy to implement, and got the basic features. For cases where text entry is allowed, the plan is to ave a virtual keyboard (again I'm going to let MatCat implement that). If we keep the spin-buttons, clicking an a text-editable button could allow the keyboard to come up. I don't see much value in using a keyboard for numeric or limited value fields thoughFDR wrote: Walkera uses dropdown lists instead your (let's call) option spin buttons. The dropdown's advantage, that you see all the options you can choose, don't have to scroll them up and down to find the one you are looking for.
changing the step size is trivial. having the 1st long-press move one less so you don't need to correct should be doable too.Your approach with the long clicks is better. (I have one observation here: if I push the arrow, then first it adds one, only after then it starts to step throw by 5, so in the end you have to correct it back. Anyway I feel 10 would suit as large steps better: the usual range is -100..+100, which is 20 steps by 10.)
One way to deal with your concern about the spinbox (while still using a spinbox) is to add another button. It would make the current spinbox look like (excuse the crude ascii art)
----- ------ ----- -----
|<--| |TEXT| |-->| |...|
----- ------ ----- -----
----------- -----
|TEXT v| |...|
----------- -----
Then spinbuttons wouldn't be clickable at all.
Once we have a drop-down widget we can try it.
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
I've just committed a merged dual_rate/expo template that closely resembles the er9x solution.PhracturedBlue wrote: Let me merge the d/r and expo templates into one with the same capabilities as the er9x controls, and see if that helps any.
It isn't polished yet and may not work perfectly (I wanted to get feedback on whether this is a useful direction), but it should give you an idea of how it should work.
I also took your suggestions on the curve editor.
As I mentioned before the curve on the 'template' page is based on the current inputs.
So if you try the new expo/d-r page, set sw1 = 'Mix1', set sw2 = 'Mix2' set different curves/scaling for each, and then press 'b' to toggle between the 3 settings.
If you Click on 'Med Rate' or 'Low Rate' it will allow you to have a different curve than the 'high rate' (the default is that they all use the same curve)
Please Log in or Create an account to join the conversation.
- FDR
- Offline
Wow! Not bad!PhracturedBlue wrote: I've just committed a merged dual_rate/expo template that closely resembles the er9x solution.
It isn't polished yet and may not work perfectly (I wanted to get feedback on whether this is a useful direction), but it should give you an idea of how it should work.
I also took your suggestions on the curve editor.
As I mentioned before the curve on the 'template' page is based on the current inputs.
So if you try the new expo/d-r page, set sw1 = 'Mix1', set sw2 = 'Mix2' set different curves/scaling for each, and then press 'b' to toggle between the 3 settings.
If you Click on 'Med Rate' or 'Low Rate' it will allow you to have a different curve than the 'high rate' (the default is that they all use the same curve)
1. As I've already mentioned, the graph should maintain 1:1 XY proportions, even if it will be much smaller, to help to evaluate the curve.
2. IMO on this screen the functions should default to EXPO.
3. The only thing it can't do in a simple way is different values for the lower and upper part, but it can be done with curves.
Nice!
4. There are editing glitches on the expo screen...
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
I made the graph square, though I'm not sure I agree it is the right decision.
Functions default to 'Expo' (this is done for all templates, since the defaultexpo curve is equivalent to linear
I fixed several bugs with how the expo screen works. if you run into more, please point them out so I can get them fixed.
Let me know if you think this is the right way to go about it. If it seems reasonable, I'll move on to working on the 'main' mixer screen and the endpoint screen.
Please Log in or Create an account to join the conversation.
- FDR
- Offline
1. On the Expo&D/R screen the Src spins throw sticks and switches instead of sticks and channels, and it crashes at CYC1...
2. The layout not too good, but I can't say better. The point is on the functioning, and that is not bad at all.
3. I don't like the "Med-Rate" title. I always think about as some medical thing.
Could it be "Mid-Rate"?
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
I have also fixed the graph when the source is computed (either cyc or var). It was a rather large change, so hopefully I didn't cause any other regressions.
By the way, drawing curves freehand could be implemented, but it would require the curve to obey y = f(x). I'm not going to work on development of it at this point. There are more pressing needs.
Please Log in or Create an account to join the conversation.
- FDR
- Offline
By the way what values will have a 3 way switch? -100, 0, +100? And a 4 way one?
Please Log in or Create an account to join the conversation.
- FDR
- Offline
On the expo/dr screen there is enough place for three graphs for all the three state!
The second and the third would be optional of course depending on the switches...
Please Log in or Create an account to join the conversation.
- Home
- Forum
- Development
- Development
- Control Mixer