whole House matrix questions
adcantrell
Junior Member
The system i am doing right now is basically an 8x8 matrix to as many areas for viewing or listening and the way the client wanted the hand full of TPs programmed, is to pick an area and then on the next screen pick a source for the area from any TP. all the TPs would be the same and you would basically be able to do anything from any of them.
I figured an exp programmer would use some type of condtional statement to nest all the matrix/source codes and activate the different code blocks depending on the area and source selected,etc. I was thinking maybe switch/case? im not sure and keep in mind im a noob(this being my first project).
obviously the cheap way to do this would be to multiple source pages, etc but I know thats not the way to do it here. an example of code would really help me! thanks!
I figured an exp programmer would use some type of condtional statement to nest all the matrix/source codes and activate the different code blocks depending on the area and source selected,etc. I was thinking maybe switch/case? im not sure and keep in mind im a noob(this being my first project).
obviously the cheap way to do this would be to multiple source pages, etc but I know thats not the way to do it here. an example of code would really help me! thanks!
Comments
-
The approach I'd use is as follows.
Create an array that has the current zone controlled for each touch panel.
So, if there are 5 TPs, the the array Current_Audio_Zone would be 5 cells wide. (one for each TP.)DEFINE_VARIABLE volatile dev Audio_TPs[]= { dv_TP_01 ,dv_TP_02 ,dv_TP_03 ,dv_TP_04 ,dv_TP_05 }
The client selects the zone they wish to control which sets the array Current_Audio_Zone [this TP] to whichever output they selected.DEFINE_VARIALBE volatile integer Current_Audio_Zone[5] // number of TPs. volatile integer Audio_Zone_Buttons[]= {11,12,13,14,15,16,17,18} DEFINE_EVENT button_event[Audio_TPs,Audio_Zone_Buttons] { push: { Current_Audio_Zone[get_last(Audio_TPs)]=get_last(Audio_Zone_Buttons) // now we know which audio output zone this TP is controlling. // do something... } }
Then when they selected a source for that zone, I'd populate a Current_Source[number of output zones] with that source.DEFINE_VARIABLE volatile integer Current_Source[8] // current input selected for the 8 outupts. volatile integer Source_Buttons[]= {21,22,23,24,25,26,27,28} DEFINE_EVENT button_event[Audio_TPs,Source_Buttons] { push: { Current_Source[Current_Audio_Zone[get_last(Audio_TPs)]]=get_last(Source_Buttons) // now we know which source is selected for the zone being controlled by this TP // do something... } }
Of course, I'm oversimplifying this for the example but this is the basis for it. I'd then create a function to handle the actual switching of the HA switcher and another hink of code to deal with all the popup page navigation and so forth.
Hope that helps. -
I'll try and wrap my head around that. Cheers~!
-
I like to use structures for these situations, and I load the relevant data into the structures. Basically I'll have a structure that tracks each room's information (current source playing, current volume in that room, name of the source in that room), and I'll have another structure that tracks the panel's information. The button events will store the selections from the panel into the PanelInfo structure until it's time to execute the switch. In other words, client will choose a room or rooms, then the desired volume, then the source. Once they've made all selections, the switch is executed and the volume, and i/o are sent. The data is then parsed and that information gets stored in the room info structure and relevant data is updated on the panel for feedback. This works well because there's always the possibility that one person will be manipulating one zone while another will be manipulating a different or perhaps the same zone. All of the selections each person makes are stored independently with their own panel until the switch is executed.
Also, it lowers the amount of traffic sent back and forth to each panel since the data is only updated or refreshed on panels that are on the matrix or wholehouse pages, and they can call it out of the stored data.
The way I implement it in code is probably overly complex, but it works well for me, is simple for the end user to execute, and system response is very snappy. I use lots of GET_LASTs, and BUTTON.INPUT.DEVICEs, and just simple IF/THEN statements to figure out what to do.
Here's an example of the structure definitionsDEFINE_TYPE STRUCTURE _sPanelInfo { INTEGER nCurrentSource // DSS units 1-12, DVDs 13-20, Tuner 21, CD 22, iPod 23, 24 is unused CHAR cCurrentSource[25] // Descriptive name of source CHAR cOutput[135] // Up to 48 Outputs (digits + the space) CHAR cInput[2] // Up to 99 Inputs (2-digits total) CHAR cVolAbsolute[4] // Volume Absolute String (VA) (-700 to 100) INTEGER nWholehouseRoomSelected // Which Room is selected on this panel } STRUCTURE _sRoomInfo { INTEGER nCurrentSource SINTEGER nCurrentVolume CHAR cCurrentSourceName[30] } DEFINE_VARIABLE _sPanelInfo _PanelInfo[16] // All 16 panels have access to multi-zone _sRoomInfo _RoomInfo[48] // Track data for each of the 48 rooms
--John
Leave a Comment
Categories
- All Categories
- 2.5K AMX General Discussion
- 922 AMX Technical Discussion
- 514 AMX Hardware
- 502 AMX Control Products
- 3 AMX Video Distribution Products
- 9 AMX Networked AV (SVSI) Products
- AMX Workspace & Collaboration Products
- 3.4K AMX Software
- 151 AMX Resource Management Suite Software
- 386 AMX Design Tools
- 2.4K NetLinx Studio
- 135 Duet/Cafe Duet
- 248 NetLinx Modules & Duet Modules
- 57 AMX RPM Forum
- 228 MODPEDIA - The Public Repository of Modules for Everyone
- 943 AMX Specialty Forums
- 2.6K AMXForums Archive
- 2.6K AMXForums Archive Threads
- 1.5K AMX Hardware
- 432 AMX Applications and Solutions
- 249 Residential Forum
- 182 Tips and Tricks
- 146 AMX Website/Forums