Lesson Description
Advanced Control Components
15m 56s
Dive deep into some advanced applications of Control Components, such as Custom Fader Behavior, Non-Binary Buttons, Status Combiner/E-mailer, and Password Protected Pages.
Video Transcript
Advanced Control Components
15m 56s
00:08
Once you become familiar with control components,
00:10
you can start to combine them together to create more interesting results.
00:14
Like a Game of Mouse Trap or a Rube Goldberg machine,
00:17
you can wire these components together to trigger an event only under very specific conditions.
00:23
You can get quite creative with your use of control
00:26
components and accomplish a wide variety of tasks.
00:30
Eventually you will hit a wall.
00:32
You can accomplish a lot with these simple tools,
00:34
but there will come a point when you need to move on to a more complicated coding language,
00:39
like our script or block controller.
00:41
However,
00:42
in this video we'll walk through a few examples of things
00:45
that you can accomplish with the control components,
00:48
as well as take a look at a few of the remaining components that we haven't seen yet.
00:53
If you wanna look at just one of these in particular.
00:55
Feel free to jump to the timestamp where each section begins.
01:01
Here's a common scenario.
01:03
You need to put the gain fader for a microphone onto a UCI,
01:06
but that UCI is going to be operated by a human,
01:10
and I don't know if you've ever met a human before,
01:12
but they're mostly terrible.
01:13
If you give them a fader.
01:14
They are guaranteed to slam that fader all the way to the top.
01:19
Instead,
01:20
you can add a custom control with a level fader and customize the range of that fader.
01:26
I'll restrict this one between negative 20 decibels and five decibels.
01:30
Since that's all the flexibility,
01:31
I think they'll really need.
01:33
I'll wire this control to my original gain knob and add it onto the UCI.
01:39
The user will never know the difference.
01:40
They think they're maxing out the system,
01:42
even though there's still plenty of headroom.
01:45
Let's also grab the channel's mute button so the user can turn the microphone.
01:49
Off since I've capped the fader lower limit to negative 20 decibels,
01:53
this bottom range is still audible.
01:56
So it would be nice if this mutes would automatically
01:58
engage when the user turns the fader all the way down.
02:02
For that, we can add a simple control function.
02:04
Regardless of what range I've customized for this fader,
02:07
I know that when it's all the way down.
02:10
Position parameter is zero,
02:12
so I'm going to add a comparative statement with another
02:16
control that will already have a position of zero.
02:19
I'll add a toggle button,
02:20
which by default is off and select a control function of position equal.
02:26
When the fader is at the bottom,
02:27
its position is zero, which equals the toggle button.
02:31
That also has a position of zero.
02:32
So that satisfies the conditions of the position,
02:35
equal control function, which outputs a one that engages my mute button.
02:41
Now when I pull the fader down,
02:43
it automatically engages the mutes.
02:45
If I move the fader again,
02:47
its position no longer matches the toggle button,
02:50
sending a zero that will disengage the mutes.
02:53
I could still manually engage the mutes,
02:55
but when I choose to move the fader,
02:57
it will automatically open the mic again.
02:59
We've made a simple solution to a simple problem.
03:05
Buttons are great for binary behavior.
03:08
When you need a one or a zero, they're perfect.
03:10
But what if you want a button to output to other value?
03:14
For instance,
03:14
let's say we want a simple button that will toggle the gain of an audio player
03:18
between a loud setting and a quiet setting.
03:21
We don't wanna mute it and unmute it,
03:22
but instead toggle the gains value between five decibels and negative 10 decibels.
03:27
How can we do that?
03:29
There are actually a lot of different ways to accomplish this.
03:31
It all sort of depends on how your brain works.
03:34
Let's look at a few methods.
03:35
The easiest way I can think of is to use snapshots.
03:38
You could use a one and a zero to activate a snapshot load button,
03:42
which can recall a saved value for your gain control.
03:46
Let's create a new snapshot bank and associate our gain knob with that bank.
03:51
Then we'll set the gain to five decibels and save snapshot one.
03:55
Set it to negative 10 decibels and save snapshot two.
03:59
Then I'm gonna grab a flip flop.
04:01
You may remember that it's out and not out.
04:04
LEDs alternate.
04:05
Based on the flip flop states,
04:07
I'll expose the control pins to load snapshots one and two and wire them to the flip flop.
04:14
Now I could put this state button on a UCI,
04:18
giving the user a single button, which has the effect
04:21
of loading two different values to the gain knob.
04:24
Let's look at another method.
04:26
We could use a control router that directly sends a new value to the gain control.
04:31
Here we have two custom knobs for our inputs, one set to five, and the other sets a negative 10.
04:37
The control router determines which one passes forward.
04:41
We can expose the control pins for selecting input one or input two,
04:45
and then use our flip flop to toggle between these options.
04:49
Alternatively,
04:50
if you didn't wanna use the flip flop,
04:52
you could use another button to activate the first router or snapshot option,
04:56
and then use a control function to invert the position
04:59
of that button so that when the button is off,
05:02
it will send an on signal to the second router or snapshot option.
05:06
These all have the same effect.
05:08
It's just an example of the flexibility of these control components.
05:15
Let's take a look at this control component, the status combiner.
05:18
This is a rare component that only accepts status controls.
05:22
You can find status controls in almost every inventory item or network dependent components.
05:28
You can combine them all into a single location by wiring
05:32
their status control to the status combiner at the top.
05:35
The status combiner lists the worst status of all its inputs.
05:39
If everything in your design is running properly,
05:42
then it will say, okay,
05:43
but if I were to disconnect one of my peripherals,
05:46
for instance,
05:47
that device would disappear from the network and register
05:50
as a fault since that's the worst status of all my devices.
05:54
The status combiner will reports the faults.
05:57
You can customize a label for each input,
05:59
so it will tell you exactly which device is experiencing an issue.
06:03
And if you want to ignore a particular device,
06:05
then you could suppress its status,
06:08
which will temporarily remove the problematic item from
06:11
the status combiners list of things to worry about.
06:16
Finally,
06:17
one of the questions I get asked a lot is whether
06:19
we can add a password on a particular page on a UCI,
06:23
while you can restrict an entire UCI to a user requiring them to.
06:26
Log in with a pin number.
06:28
There isn't a native way to require a code to access a specific page.
06:32
Well, I'm gonna start off by going to the control
06:34
components branch of the schematic elements library,
06:37
and grabbing a pin pad,
06:38
because we can solve most simple control problems
06:41
with some clever combination of control components.
06:44
The pin pad provides you with a numerical keypad on the left,
06:47
which is exactly what we wanna supply to the user on a UCI.
06:51
Heads up,
06:52
I'm gonna jump in and out of emulation mode a lot while going through this.
06:55
Firstly, to take a look at the controls on the right side of the pin pads control panel here,
07:00
you can enter any secret pin you want into this field.
07:04
Here I'll use the combination I use on my luggage.
07:07
When a user inputs the correct pin and presses enter,
07:11
its corresponding,
07:12
LED will become true.
07:14
So we can expose the control pin for pin match one.
07:18
And wire this to any number of components to initiate some
07:22
sort of activity when the user enters the correct code.
07:25
In fact, in the properties of this component,
07:28
you can increase the number of possible pins to 16,
07:32
so you could automate up to 16 different end results based on which code was entered.
07:38
In our situation,
07:39
we want to navigate the UCI to some sort of secret admin panel,
07:44
so let's explore that.
07:45
First, I want to add this pin pad on my UCI somehow,
07:49
and my favorite method is to use a press and hold components.
07:53
This is just a simple button that gives you two different trigger outputs.
07:58
One, if the button was held for a short amount of time,
08:00
and another if the button was held for a long amount of time,
08:04
and obviously you get to set that time threshold.
08:07
I'll hide this button under the logo on my UCI and change its graphic properties,
08:13
so that its fill color is transparent and it has no stroke,
08:17
so it truly disappears.
08:19
The employees will know that they can press and hold the
08:22
logo for five seconds to make the secret pin pad appear.
08:25
So let's make a new layer.
08:27
Whose visibility we will control in just a bit based on the activity of that press and hold button.
08:33
First, let's add the pin pad controls to that layer and adjust its appearance however we like.
08:39
Next, we'll grab a UCI layer controller,
08:43
but it's going to need a bullion on off state to control the layer of visibility.
08:48
And the outputs of the press and hold are just trigger pulses.
08:51
So let's grab another control component to bridge that gap.
08:55
I'll use the LFO we saw earlier.
08:58
I'll expose the one shot trigger control pin of the LFO and
09:04
wire the long output of the press and hold to activate it.
09:08
Then we'll need to expose the visibility control pin of the layer we built that has the pin pad,
09:14
and then we'll wire the LFO's output,
09:17
which is a Boolean true false to that layer?
09:21
Then I'll turn off free run to make sure this only runs when I want it to,
09:26
and I'll set the period to 10 seconds In square waveform,
09:31
that means it's 50% duty cycle will output a true
09:34
for five seconds and then a false for five seconds.
09:37
And that way when the user presses and holds the secret logo button for five seconds,
09:42
they'll then have another five seconds to enter their
09:45
pin into the keypad before that layer disappears again.
09:49
Alright, so far so good.
09:51
Next, let's build that admin page.
09:54
One method might be to build this admin panel as an additional page of our UCI.
10:00
I'll name it admin.
10:02
And if you're using this method,
10:04
be sure to select your UCI in the left side pane,
10:06
and then remove the UCI navigation tabs by changing their location to none
10:12
so the user can't access that page on their own.
10:14
And also set swipe disabled.
10:17
To, yes, to prevent them from swiping from page to page with their finger.
10:21
I won't bother adding any controls to the admin page for the sake of this demo,
10:25
but rest assured there are some super important admin controls here with your admin page,
10:31
safely impossible to navigate to accidentally.
10:33
Let's look at the control panel of the actual touchscreen controller where the UCI is displayed.
10:39
Let's go to its UCI slash screen tab where you'll find the page control.
10:45
This can be changed while the system is running to navigate the touchscreen to a particular page.
10:51
If I can control this control,
10:54
I can change the page.
10:56
I could use snapshots here,
10:58
but I prefer to grab the selector component,
11:00
which I think will be a little more elegant.
11:03
Let's expose the selector one control pin.
11:06
And we'll control that from the pin match LED output of our pin pad.
11:12
Then let's expose the UCI current page control pin of the touch panel,
11:16
and we'll wire the selector's output pin to control it.
11:20
With everything wired up,
11:22
we can define these selection options in emulation mode,
11:26
I'll define the output for selection one as admin or
11:30
whatever exactly matches the name of our secret page.
11:33
When the pin becomes true,
11:35
the selector picks admin and the touch panel would update itself accordingly.
11:40
Uh, keep in mind if you're following along at home in emulation mode,
11:43
that this page change is specific to the physical touch screen itself,
11:47
so you won't see it change here in designer.
11:50
Now, whenever you play with logic,
11:52
be sure to think your way out of the situation you've made.
11:56
We need to give them a way to close the admin page as well as a way to reset the selector.
12:01
So I'll accomplish both of these at once by placing the button
12:05
for selection two onto the UCI and renaming it to say close.
12:11
Then we'll send the name of the main page to the touchscreen.
12:15
Whenever the user presses this button,
12:17
guaranteeing that the selector is reset.
12:20
And let's use the activity of this second button to reset our system.
12:24
I'll give it a signal tag of clear and we can expose the clear control pin of the keypad,
12:32
and control it with that signal tag.
12:35
This will make sure the previous pin entry is erased once the user is done.
12:40
And we also wanna make sure that whenever the system boots up,
12:43
the selector is reset.
12:45
Because if for any reason the selector is already accidentally on selection one,
12:49
when the pin goes high,
12:51
then the selector output doesn't technically change.
12:54
So there's no event,
12:55
so it won't send that text string to the UCI.
12:58
So.
12:59
It wouldn't change.
13:00
So we need to make sure the system starts in a known good state where the admin selector is off.
13:07
Here is a clever little trick you can use anytime you need a particular control.
13:11
To start in a specific state,
13:13
I'm gonna grab a control function set.
13:16
Its to logic knots, and wire it to the control in question.
13:22
I'll leave the input of the logic, not blank,
13:25
which means when the system boots, it will resolve this logic function.
13:30
And since the input is false,
13:32
it will automatically flip that and output a true to my second selector control.
13:37
Making sure the system always boots to the main page and
13:41
the selector is always ready for the incoming pin match LED.
13:45
So we did all of that to control the page of the touch panel.
13:50
But if you're using layers instead,
13:53
well then this logic may get tricky if you're trying to make
13:56
a whole bunch of layers visible and invisible on your UCI.
13:59
So this may be a great place to create a custom snapshot bank that controls the UCI layer selector,
14:05
save the state of the layers in the admin configuration,
14:09
and then also in the main configuration and control the snapshots load buttons from your pin pad.
14:17
Now, if you have many other things in your design that.
14:21
May also want to change these layers,
14:23
and you end up using lots of logic,
14:26
ands and logic oars to keep it all working.
14:29
You may be scraping the ceiling of what you should reasonably be doing with control components,
14:33
and maybe it's time to upgrade and use the block or text controllers.
14:38
But for simple automations,
14:40
you can almost always find some combination of control components to get the job done,
14:45
without ever resorting to writing code.
14:47
In this system,
14:49
I'll bet I can also devise a little counter that goes
14:52
up by one each time they enter an unsuccessful entry.
14:56
If they try and fail three times, I could also trigger an alarm.
15:00
One.
15:03
Send a signal to the lighting controller in the room.
15:08
Aim the Q-SYS cameras to focus on their position,
15:12
and command the network video peripherals to route the
15:15
camera's media cast stream to every display in the venue.
15:19
No, all while sending a warning log message to the core manager,
15:22
which will trigger activity via accused Flex to call the police, et cetera.
15:27
The point is you can have a lot of fun with control functions.
15:30
I really do recommend that you spend some time playing with them,
15:33
and hopefully these videos have inspired some ideas of your own.
15:36
Feel free to challenge yourself by thinking of a problem you want to fix,
15:40
and devising a solution if you find something that you can't do.
15:44
This may be a time to start looking at the scripting or the block controller.
15:48
Have fun playing and we'll see you next time.
Downloads and Links
Advanced Control Components
15m 56s