This week I continued to work simultaneously on the tech and the content.
After my conversation with Eric Rosenthal last week, I knew I could disconnect from the TV and use the bottom rotary dial in order to reconnect it to an arduino and computer. I also knew that opening the television could be dangerous due to its large capacitor, and having had just been turned on for an extended period of time.
I found this tutorial that offers a step-by-step guide to opening up the TV safely. I carefully removed the plastic backing of the television in the hopes of being able to simply remove the bottom rotary switch and add my own set up.
However, both the top and bottom rotary dials are housed in one metal box-like structure within the television. Without wanting to disrupt the currently functioning television, I put the object aside and worked on the code for the rotary switch. That way, once the actual TV is ready for installation, the software and new hardware could be ready to just pop right in.
For the switch, I am working with a 12 position rotary switch, same as the one I used earlier this semester. It is set up with a resistor ladder, so all values can be pulled in through the analog read pin, instead of needing 12 digital read pins. Efficiency!
The code was a bit tricky, and the traditional switch state solution needed to be adjusted – instead of getting a serial.println once with each change of position, I was getting a constant stream of different, but close, values. Because of the resistor ladder set-up, the analog read was reading the resistance of each position. Once clicked in position, the analog value wavered between +-3 with each loop. Although I had coded in for the loops to search in a range, the specificity needed by the switch state was not working. I spent quite a bit of time testing out different ways to override this issue. One option was creating a second state within each position. This did not work either.
Gustavo de Campos Abbott, a fellow ITP student, sat down and took a look at my code and tested out a few alternative options. One included creating a state within each position and testing the switch state against those. This was the way to go and after some testing it worked. Each change of position on the rotary switch was now only serial.println-ing one value, and it was only printing it when the position changed.
The next step is to fit this into the television, get the TV clips in order and connect the switch to the clips in either Max or Isadora. I may change out the feather M0 to the arduino pro mini, just to try something new.
At the Quick and Dirty Show, I had the phone connected to Max using serial communication. The results were a bit wonky and unreliable. This was due to either a patch issue on my part or the nature of Serial going into Isadora. So I made the decision to officially move to Max MSP. For the last year I had been scared of Max, but the time has come to rip off the bandaid and learn the software.
This tutorial was wonderfully helpful in helping me create a patch that helped me pull in Serial values from the phone’s micro-controller to the Max software. Adding in the if/else object in Max, I was able to start the logic of “If this button is pressed this value will come in, so Play this audio track. This was the patch I created:
<pre><code> ———-begin_max5_patcher———- 1419.3ocyYs0aaaCF8Y6eEDB8QGGQpaVAHaHXXXH.cX.coO0NDPIQ6vNYROQ 533Tz9ae7hjsShsrhsrRdHJVTTjmygmuOdQeueOmD9CDgC3BvW.8588985YJ RWPux664LE+PZNVXplCa9zDRgy.6ilgKvSIRRwsDFNImnqha4y3yk4Dob4Lh s8cbF.bRvrINf+orJB4R663T0fplmxTuloyfqKz1XlRQq5aY5cT1jaKHoRaW ffvgAC.QwdCcG.Bb0WQngtq5PZlo23Ie6rHOGcY+nee8kAMk9jEpWtBsRxCl d1Ikmm6TGuW82wwc+8x8QdnRtGratGNppOE36IY2pJS0N2hkxBZxbo0QzakD zygnFzMutqo.in8ZktoDg.Og7BsiOiv.e.N..2sB1TUCsUUCteUKJTqZgQ04 X78aQGSNGmoUjFw56nYYD1lT4fbO0nCdtlfkXOiBDgpSGPGjNPdLCm9SmiYb zcuiiwwizH2On551vOrMGGEimkiW9S.ZmCiB5DFNWG7u9W6KM3XNSJnOZJDp GLZrF4seMpbLFV2Xrm6lPgoRxadzUETb9qL2QBVPSkyYTMkUov7KYitoyy4K ljySv4RxzY7MFj0OsXJlIS4EZJP4rm7zo7LKjLMuSUw7B5DpRjyIrIx6r7F5 hFMDFEGDpXuijl9uhUZ+52XE.fH2gq5lYTkLtCH7eyw4T4xsfBIUEZKKHp20 BAkFe3INS4SmRXxWX89rfjAj2QEfwE7olKhkSS34.kzAlnLgJIGjgkXaEvEY yoLdU6jSYjT9blbSayAkWol3xXsiKLzDOBsSH6GsiIjCZwvR5XvGnPvkWBfJ IxLACP+aAgko9GIWP.tGz7MMIzDdfSCENxFT5Va92.uZhMaQ+0Me9l+5SWe0 Gu3hK.2IkyDWb94KVrX3REmlmPFpduyWn4xud+kgI238G9+IYVzu2o9KOjQ3 7af+B41lhyFQapEAKHBsMCTVhfnWXrI7iJATljCxniGahEGBTLqphIJERkp. fABUkyI55Rlrd80OQC8OQZHBZWwnQIKEwP2sKhiZSMrjr1rSVEw4DwQeeC6B 7B2fjncPRDzoEWeaf6av5Z8BsaCvx252IDLtES7tNt33Y8qNMJL1Pz.jY2OQ d0x5n1zJWFOyGCt5u+squFjpVdh3Dal8ChafYFFzll4uprye04syPWx48Xna ys1Skb7N4KUmYtgT16.cy9d9lQ6ZoreaZlsV3ORERvYm8K.FQuNStxSytmTH 25bSnSkUWszcC42bFdOucj2tUSa6A7G8FZzcahQOrEM5OlClTvmOSseIW25O Lqii70b.dvQlL2ZMvbVV0RdTatMdRN.5on9NItYK6CV++iLt2a+hfafwADWq H.aQQXVgJeFn.u3TMwEL1DMirmNYPsm1FzsMilguEKBCZWYcEcqMTtMWC1Th rfqxRVuW9zQaeygoFYsuip8P3ODVK4STaU5f9DDul4qgGHuQVase00sd.7so 21D19Vb14d1OyhIWsmesGYQqlpVePGfDPbXMySYjjiduF0MUUfYdZn0lGUaV 5mrdTSELqd5Ye3MSmnK+oZhfOuHshVke4pAf08iZiFRJCWc7jeY8m3YiJs9K HTEajQE5vk0eUmWL5zX7z.330Yn4YDe6vw2u6vSCfSTmglfl3ch5tQqf2Udm mYK1Abb6N7z.3.ideAG8nErSfyyFH1Ad5tHcCdfMAOcj9z.4I9cEZT6loyFr ZBb5tHcj+w3kgsNdfMYR8ftKybivCr6byPTSVkQ2IOMANvvtSdfMAOntSez3 AcpvicE83YytmTHJaSCTT6m4a7B8sQCL2RY1aM6qvofbOsp9lyCxAWn1lgTs Gi4E18p7vnPG6qxyHEr4TS3decO+i9++2DUQS ———–end_max5_patcher———– </code></pre>
I booked office hours with Matt Romein, Max MSP wizard, who sat down with me and showed me a more efficient way to pull in the values. We said goodbye to the if/else object and used the coll object among many others. He even showed me that for storing strings and comparing input phone numbers against programmed numbers, I did not need the arduino code at all. I could do it all in Max. This was the result, a patch that I will continue to work on and learn from while I build on and develop this interaction.
<pre><code> ———-begin_max5_patcher———- 2461.3oc4bssaiiaF95jmBBi8tlwi3IQo.zVLnnnX.1hVzc1q1cQfrMsslQV zUhNGlE69rWJRoXmYFQQ6PQmMEAINRVV5+6+7AR+qWdwjYh640S.WC9IvEW7 qWdwE5S0bhKZO9hIaxtedQVs9xlTxuSL6iStx7VhcxBtT9vVt4dLYB3WZeqZ 4CE5yNo6hK2sIuTc45aDb+IM2jmb1sYx4qyKWcSEetzbqoD5T5U.HLMp4UJb ZzU.DZZziOw7E5Gmh7dCBOo4b+1kW17mqNIrI42qezSJDYK1vUWyYDzTTyqw HqfF4QPOWTTzOfu5feedfmzO3Iw3F3BQDMroZ4defG18Lqytku3F0oT2maxj xp7Y6jFc7KdjEbwD9lYb8mNReBMS6XYcyEa1vKkeEuSTsfWADKAhs7pLYtnr FTkuZsDHEfB9xG+DE4k74hck5OF54vFirnCgRZXbITlVUhF2vLw3dXiQQdTI Rw7WsRwJJ.QV0kxa3.OK0HT+3GSz1NozzFfGa0uQZxofdoX0JEI+HITksgK4 U2vKylYfRTen+4ibKdOHDsrlknsiPjt+9MQNcDj6vImEbiM9IYLp1uA0pD2m QJVkI4O+nDnSTNm.Ys9Isg2SKHwNk6xpSRCuw9dVV4pwy.uKNADp0vSRrhen Gk2KqDapeXyLQwYH2.LQqXCiX5bDXXavNI0ivdW41r4eBDc3OVszux4WddbK 1fQATw2RLJKoVYWXulJ0lYp.8NxuNpbpXGevvVkl1WQw1XCrSRqouzh9wZ9B fbcdMnwtAr23ArTTAVo3BJZErHSlYtfrpE6xKEeyjkviTxRwo57CHoFWJFeo DVOrmwHl4mKlWvyprngzdEgJwoDi60Tq9WHou9BqjDOEYbYfFNtJIwi5B+IO k4zwmIQKlSiMIMkZqjKxIo9qpFSJJ6EddPl5.9Z0osmRLl30f.JOW6006KLY 2uGiTldzEV2IkQICWRDF4yX.6p4fJEUxaJEtV4yaKPcDX4N4tJN31rhc7ZP1 hEMQJDmkH.TkitlVsXRibfH.HeZ0a3KPnJp7vcdwUkC72D+XK3WkEsF+5hIX Vc5ghGg1roD76lu9ChRd8MKyK3+6L45ox6s2zj.l2MLVqYvfFEDh1SBl1CG5 j7Q1vFxVw+ZMDd1Bv2AOCkX1A5XSIlV8X.8oQw1p78tQ7ssN1XjGapI.SrVR .60WFNs8GBkNb9MI9zT+yEfUJucaAL+TFD5T6IXa.P6kNS9iWZNQjCDr1yxI A9GN300eOmfmO6mcMuPQDMUDnrVrC9q1+53EqtkQzFqFFYUOl85yAV5SBJY0 +EC+5Z3XFnmDEO7nwhSNCyFquTXXopbkNCIvvL4rjZZigcck3WeVJLlQeocj H1gO80G7MADSLYwN.7w++M784.R9nHuDfNGl6I5bCRQZqdr0l8S84rQ1l8I6 s2e7frAqsP1tPll3yxRWjuAn7qyROCnNNNxj6CUmDPp04YPY9D10hxUS2rEe NPcj1Odpoyz1qegB8sr96fmmlPDiMxXS5t1QMI1mnVrkWpv7UfyAraS0yXQa x0sWTSFiFx4BnWmuXAu7Pj389tkDqqYGBME+YswjmDef+4EYy+8IOGwXzPhw TCgaF+JomtFB8oXrd41hrG9cKggqyWUlUzjFx9+anDRVJJk04eVeRXCjblEg GjE0JgsOVhnCojRU1V525cU4YEGY4NyxpymK2Ul2fXUQWjVvzbqKJD2spPLK qPx2rUbfHt4cq1jUJmKpZPPtn7Iu6FwBCIou8S5NsnJeUthGWvKWIWafMJBq XgIvXRTrh0Kym+o5G486+HORAPTzzGeNayUrwdng+6trhb4CeCxPlqrrkUb0 m0PCJlr+WHje3G+v+5+79288We80f0R415qe6au6t6l9fRcX2L9T0m6s20nF 7Wu8OGO6C3+A4ex2x96AcdOXU9RJ2JDWl1SjOGE1Aq+AU4B07ZfbMGzdlZdS ID5EDQtDjWJEfE4KWpWcDS0iLq8Bmo3PaZlYFnVcwE7lqkuZekHOgGRFIdXW JmPyJL0DnJpmFx4SdXKXMqWjmtRr7MFIDM5n33C.IpGPh7ZNWzyQ4Ds8VrEu 1Km.l9ZYQ00r6BZPMJZ30TGj4SU4V6YwRv69g+16eOXtJ9Q8HqLSnoNnLC85 LL+Yk57OO47oP2h4ATn8Y2hykhLurbdvmn1LAqGoOw9BXxmJyFU3uOuVBdya 9KfRtY8bLWTdKuJra+AhY6OzNRrVU8919CHu51FCHImQE8HWTzGkw5BihhNS S1Eln8b2vCZVmW1cfi76rAAPrB5u.lKXGSHRuxvoV69ID56UqAnJ6twJvELU aMiLS7hZsYHvHeZMCOGIgY7e2gV6arCOJF2vkUBkSR+Le+iewFYVWJvHsrlZ c+bvdMsgsZAd617z55Zvqs27IKxp.pdiL0d2Jnsu9qnd0WcSah.y.owQCtyU Fuwx0omGqWwoLqtoeRBo5KPm9zWr2s0Ojly+TdRsXW07NX0tKntBr+4npzPl Wl00+ne5wsT6AWy9F71YarHutwbY+JE3qDNNSNpzj.vAHmT5.zyl7EaEJgVK OAmRLS72riNvISYzu5PVW6XM6gJ1gbeOiugX2I3vwuoNPOonvQOXWnmiU9yz NWRhzIIzVFvSOJPRejKRexwgtVZNIUCRLUCD8QmKDfOQDXROkjR0Fj5CGAHj j5hJF7HUwnDyWOCv19Fi1e3XfgXWMagGsXnyTvLjswxT3Kzx6AAIAywShKNd XogkdftPOvvQOHWnGT3nGrKzCNbzCwE5gDN5g5B8PCG8D6B8DGF5wk7dIoGY fLnI+8Xy2rJlPw5iFCOnQt3AMboRxbItZR37fxXN3w5KBjN5zyPdzSfgkdFT dEEN5wkHvwgKi.WXOgy5J1kBGIjvQOtT3HMIX4mDickdBD+wkzICF0PcQ6Il ELokSzCIb9lovWXzyKJeOjTez1BOSOCEIEiFnVjuL2MyW.NIols.KL1zDhzw oIDDW7OPCmAIwEMNR3beRbo8.3vkbhKjCj8xhbvAS6A6jzJbcQF6RWJIzvQO tTpFjDV5A5B8DH8GWpj8EE0.CWcZHWbMCCmqYD44nLC8N8.S7QcieQ1.PFyL I118S+9iFgjAfNUId3ht3D8vdoQO3WVzCLbNrfNEtKbrGWHGXb3XONsDGBW1 IZ5AMVziYEgjsc6s7p516olTlrI6ihpG+tBU4wqzbndcoLohead20qWPgSxp luNWxm27Exld0mbeS2RurcGMUUtKW6P+xlm7uc4+Czk8xOC ———–end_max5_patcher———– </code></pre>
The main updates for the story and content side of the project is that I began to edit the audio clips based on the individual stories from the Content Schematic I created. This is the final step before adding the clips to the Max patch. I am focusing on the anecdotal stories for the phone at first, and will next tackle the long form stories connected to the script/typewriter interaction – the global interaction.
I am still going to user test again whether or not to have the laugh track in the anecdotal stories, as they are, in many cases, serious situations told through the filter of humour.