best tuts to get into monome dev for max with serialosc 1.2?

  • hey all, I'm actually finally digging into making my own patches for my 128gs, I've downloaded the serialosc 1.2 devtools patch, but does anyone have any suggestions as to which max objects to focus on learning, specifically for the sake of monome development in max? I'm comfortable with the basics, but i've decided I hate matrixctrl primarily because of the way it sends values to the monome.

    i.e. if i want to make my 128 into two 64x64 midi controllers that generate note values, i've gotta find the right way to essentially "flip" the input from the monome to matrixctrl so that I'm outputting lower octaves on the low end of my monome, and higher octaves on the "top" of the monome.

    I generally use my 128gs horizontally with the cable to the left.

    so - my question isn't just about max objects to focus on learning, but perhaps what kind of ways people design patches (either with matrixctrl or without) to interact with the monome. I've taken apart some of other peoples patches, mostly midi generators for now (i'm actually MORE comfortable with DSP) but any help or pointing me in the right direction would be greatly appreciated.

    also, is the monomebutton abstraction that luke made still applicable to the new serialosc? i dug around in it and it didn't seem like there were any serialosc-dependent patches...

    yeah, and if there's an easy way to invert the y input to matrixctrl, I'd love to know :)

    thanks for anyone's help with these questions! I've had my 128 for a few years, and not until i started designing my own super basic patches for it did I truly realize what an amazing device it is!

  • I would suggest downloading and installing into Max, stretta's 'BEAP' objects.

    There are specific monome patches (polygome is a good one) in particular that have been re-written with loads of comments that really opened my eyes to routing button presses and other ways to do simple monome related operations.

    https://github.com/stretta/BEAP

    But -- to answer one of your questions

    "yeah, and if there's an easy way to invert the y input to matrixctrl, I'd love to know :)"

    The route, zl rot 1, and zl rot-1 are going become your best friends, especially if your working with matrixcntl objects

    It's all about rotating the list of data around.

  • @eos: wow, just rotating the list with the zl object. you just blew my mind, thanks! I'm downloading the stretta BEAP objects now too, I'll be studying them, thanks for that as well.

    @karaokaze: I'll download your tutorial now too - and pour over it for a while - thanks!

  • the mlr tutorial is also a winner.

  • Do you have a direct link to the polygome patch with comments? I can't seem to locate it, but would like to take a look.

  • @jessemiller

    You have to download and install these objects https://github.com/stretta/BEAP

    Then in your max window right click > paste from > BEAP > monome > polygome

  • oh yeah, it was james, derp ;)

    thank you so much guys! I've been lurking for a while now, reading every thread I could, both here and on the cycling74 forums - and I finally just decided, hell, I'll ask - im grateful for all the help and suggestions!

    if I didn't have a show tonight i'd be screwing around in max all day :P

  • Are there are Arc tutorials or good places to start with the Arc?

  • Here's some tips for understanding and dealing with arc's delta messages, to get you started.


    ----------begin_max5_patcher----------
    3208.3oc6cs0iaaiE94Y9UPXTfzhchiHotVr.EKPeXeaA1M.6CAKBns4XqFY
    ICIpYR2h9eu7l7HYaIQ63nQZLQQ8DKZIc3GOGd4b9Nj+w82MaQ1WoEy.+L3S
    f6t6Ot+t6jWRbg6ze+tYaIecYBoP9ylsLa6VZJa1CpxXzuxjW+4O.dhjGSXw
    YoUEtivVtINc8myoKYpWRfu+bmG.XO24dO.fQP42vyc.+O8MEuR97xV7auG5
    AqdTOlkxRIaoxx9G72SRUIokaiSSnLo3Ae4hYkrpq5T8PxWuP984N0drEw+e
    4iE4N2Qb0+796Ee7fg.RJ8YtrdDdrCjDuMlQW8wL1KBa6HhmGR7mPIffbZCP
    btJ.B7DUeHZOpn9kreeGUIhylsWXjU.ZtFOz.B+AEmPehlWHZ7e44e2Lxtc0
    t7c0tEAJ9aYxGj+C6uTbp5Rv8WJm9Tb086r+pjbNLx3XXYtBA9Zn+LUg7Vt6
    qt0JLVzfq9v2U9G2vZHLuEdcR1xuPWU+kLKaGMMNcWNsfquqzqqW7J5ijxD1
    mOMF1r7GIKosdymrU7tYqyiWkkJDhF2o3xUutOAfdhZi3yWpLxeQJY2It4Bd
    8nrXAIWfoKRTp8UExxxRZVz9lQtE.IMdKgQYwJgE4r+gFucWdbJqwKhlR3Oi
    MEKyyRRZ7nTk7zIJYEukdI843UrMMLREkv+4w6pZBlsGiVEulVvZdMFYcQyq
    znOt5pf0Msab8CLw2RKJHqoUOvF14ETF3Gf0K5D13dRkNXnzR2Eq9Rs1rCMy
    ca7.aWI4HycTyBN1juCy9VM8qJU1wn1D6BQxFcV1DHWlDuC7dOGGNZ4zCdFg
    Tp8Rs+fnC6x7X7Dcg3Id5hmLvBPrY3niT8DiDCI2MNhuPbD1JNhtPbbAIc8r
    G.yj87LPPJY4xxslAonPoote+pltiFUyqNTJEVivK0nxHupOaGtBaEPbLBPZ
    etMxhqldqb.jqHTndsFgEH+n4QHGnuuYHRzEX04bFU4WlYQRbZaCjJqMhxOM
    VTjUlurBw2ODGnYshOLOKNc+Ls9TMKjC9kahWsp4TaTyFnPL2B0r3Lps67kZ
    dGf.nwRMbDI0SOr10XoFMhjZjwRMbDI0gFK03IIVGckjZ83iUKxbVA4I5pOy
    eG7Nw+LgwxiWTxTcRVe8weqKFr+EadFqP5jBQGu71do7EMufjn8Hv968DKD6
    9W.wqiyUheD7CwPvem2jx1PSAuG4AnIETwUMvUKNpUf4F1ouVb8ds70xE.Ts
    4Vte7YALvQo3B.WtVPyAOuINgB98rRvpbxZA.BXY6.Yozep51EFgKyJUSJ.0
    Kf5iUquUsL2V8lGFOfdyS.wWQbLuLMkW24HEij.d9CUd2CvErckLPNe4HzyE
    9B8bq45Onua2vm2DF9n6RHKE.3JZBiTvwQvVxWzpgzk4TB25caIWU8QRAiqk
    x1PRkkFmpJ8jfKtcvMB5V2XWuNif1.W+oK3pMiiKd.HfJFUCxczSXHJP4Jp5
    Fts1SHNX7CNpN25uyecUtuZbX+03cjb9045peV4Sy5UQCPCzYNtfX04On86w
    EMDQqApf+j+X1uJTYL.97k.Wfa2vWzqxPmJGXXiTgMRE2pQpnCmW9dyhQgen
    Y9BNZzDghqtaK6JbO8EYh.43p7QLeYPlthzS3sWbdXfX9+svLsQUjI52M5tW
    83Rf+FzFe3TiVOf9TWAdl5ScL7Z6R85iC+56Uc8T8zq1ue3.ME8mtqg9kNbz
    3UZgDiLThcFMRrIdaLZzHwgmgDONzJvlFVnwSfJhLThwHqOnmj9f1POK3CMw
    yBtNu87rPaNl5ekRAjDlnggE+DsCHzE6dFzBc+PziXZg1Fl7OydFv1jUPA4z
    D9xT6RuR4NcenxAl8fIvoKl7cNHEJyRTjQwnvYB3py1bjmNHE8x3X0xCBjJT
    g9c1cEx5IOqm7rdxaT4IOSX1YC+mX.yNg9VlcZFjZLyNgA21L6777BEDEbS3
    FJmPSwivIIuNEcjXFCIE1GiEFRJkZGik5QB+2PAFK09iGoFZrTiBsdLYJ5wj
    1VmmbAdJJpT.H.3OCUKBlW+K1DuCrfxdlRkz9IGvmFbICPRqnX0C.daDHlAV
    kQKReGCrg2HxWT37StdP21W9CzWw8EcdXo5W1u0E.4+Vf6KZOSEXfCpP32fT
    ewL.xEhM.fftVtAcRzSYP0C0ffdVGJXcnf0gBVpA8ViZPXrkbPVxAYIGjkbP
    VxAYIGjkbPVxAYIGzMqqt99RoAWWzYj2kvIbdWVtakHg19wmiYa3xBfq+tdM
    kuTs0+jDAkAtCnTuEIUHektOweNB+D9Xd1Vvhx3jUh7NLKU2NTH7mHH6wNRY
    yNxpPWEab7bipMugVypPHb5h7xDbUhwmJEWO0TozYVGLzjbJzIZ5BMjUqD5Z
    MxI39AFWeECjP3tAlfapLQUmettN9Fo0LgyAZtoTAuCqbgAkH7F7e2KIDc+H
    DzSyCvtIrkyDty9BFImA5hlnprOUE.GbO.wDtu2+stmkO1aOKRcBWCHHZTzz
    kenEwaKEbkEP.kEh8FfxbUGu7Am9RZ1hNQnvZc5Bi5ru2nvIK4OSxHqDNmDz
    09ehdZiJCm.TmPg+DZyOo2v6oq35AY5dLlHOa38NM5o0a5L9dQXa38rg2yFd
    Oa38rY9uM3d1f6YCtmM3deeCt2fGggax33L8BV1zKfjSyf9NjAV2FbuwUl+W
    EGNSx7+HzaO+Jzb9xsbnnbRfSM8NcXzN9DQoAvctNxE8Z5JpS6oE0gaBeRsh
    I11uBkNFZGexlzXEDmqGcwiObodpr1kqm7wmdsoMviqSrgNWiniSW0qCzTOk
    T6BZTt82syfgD5+pnpbwPRqAdsPl8O5PLJxGHAcJjIBz1rbJXIWvxyR.YOI2
    Ag0zCX94Fje8F5BLTGIa2tBxen6agDDBphFfWT+CjEhuYbPtziEF.aHm96dJ
    H5Uo6oZdk3ZhL+s9QEs4SOnh+qxf6W8dljD8RSNoOnHkzNRrfmR0R3wSRXDi
    47UjxO55+zMmuB7dCzojNgxPJhOzcmRA2RcJ02blv0TT5w7CdiMmIkFkhM.c
    Omo.mo0blZeWghjtJa6u1GMipTaTXiR4oMrwOxdLzZCwqMDuimigVbOgBQOH
    JTwAU0fBcEdRu2pm.scAhuuWTDBk.mwnH5FDEQ8.hPe74AhN2hph8hh3yyf1
    M7FDE66b4NDOO3bTE2ejvcSoJ16oa9YpIhu8n9RN+USAN.H.Av.WfmYjfQai
    63zKKXtzgqCZESCtTL8gV9+ACqkq2A3eN7LRkUWcgv3v2tzd65yrH+q9l4n1
    MJiEpEA4qV1GI7rhafgPxjb+bTdHEiMfhChYoMVXkAzPhj3FNtjYSnRhXJHi
    IY1HZbMdNynwlRjqQzoysTTbMwFDMtjYOSj4wCN6a5FSJdD0uA1PY1eDIydS
    PYNb5IymXH4wuLilfxLbnkYKOPGa7.s9dIb2Qp1yt8wdxsO1PC18Xw1rK0F5
    QanGsYWpM6RsYWpM6RsYWpM6Rsacr1sNVa1vZ25XsdUXp4UAV150Iz98pfZ2
    tC0oSE1e348s55.3PwKYtLlmA786u9qnhrWXm0euWkzH45ejYOe9bwQdEaCg
    8tB.IIQ9OA7U6+thpMh03h4.v+I6AvlrmAKIofmoh8EOYVw8KmattoOMrPZp
    l340Uttgbmt6oh+WENVskj9K8edFYvtpHZBeRjWSGin.Egl0rdUUZlARsZQ5
    Lg2GRKWvxIKU69whcT53rxBvSjjRpZWkVb8kk44hcZ5rTw93MfORDu613hMR
    qxskK2.hEv6xMhsM4UWvoTm6KdEUaV15gTW3afsL3Y8hEdHS1hfm.Y9FeZTL
    9jY5nBGUqumtG4+kM28ukQ2u9aADuuqs+Ab852wdyp4dn9TZ2evvyYPu9CSz
    DJeFkheSmNn.qCWwiFxN9HgsIi.Z63fsY7rOdQNGu.miZ9LVhN3c0hD4NfRD
    NxHIxa.knPSjnCj6uqRDzH8Hz.JQHiZ0P3ADibMQhfCmdDxjFM+gqMq4opcK
    xCZ3vmHeSjmfgSdLo8JZ3znO3U0h2dGt1qPSL4iPCG9.MAe7GY3Cb3jGSruB
    Gt9ejppPSZufCm7LhzeBLo8JX3ZuBhLn8Jnu1qswq1kwmhsdJzAXU.EckKQJ
    vy+3uACkqJV+Kke6Eg35V65s0e35s2yjouDLfZilrPgfgCeBLo29.mgUdflH
    OvQj9yvM5iuI1WGHzeOkGSlLEd3TmwXiVsxfo9Xl7bo3ixSJGPYTgnb.UQOf
    lnGSQz1nGJ+87m2+WkMnU5C
    -----------end_max5_patcher-----------


    Nothing too profound there, but these are common tasks you'll copy and paste from a billion patches, and it's good to know what they actually do (so you can build your own variations).

  • well done, that helps greatly! awesome food having just received my arc2 :)

    Any ideas on how to divide the arc to a number of steps and have it represent with LEDs?

    For example: I want to controll a live.dial that contains 12 Presets. (Expecting 0-12 integer)

    So the arc would act as a knob that defaulted to preset one and you would rotate clockwise to step through X amount of steps (in this case 13).

    Not exactly sure how the LEDs could respond. On first thought: "All LEDs" could represent the highest number state. And then somehow divided down from there.... ???

  • Hrm.

    My apartment usually walks the line between "cluttered" and "scary", but it may have crossed the line into "goddamn terrifying", as I can't see any part of that line underneath all the clutter. I can't find the arc now to save my life.

    It's strangely ironic that the first thing I grabbed off the floor in an effort to straighten up was a box of these:
    http://www.sticknfind.com/
    (it took no time for the thing I bought to help keep track of these things to become part of the problem)


    So, I'll try to answer this without hardware for now...

    There are two parts to your question. The first is "how do I make my selection from the user's input?"


    ----------begin_max5_patcher----------
    3259.3oc6csziiiaD9b2+JHLRvjEwSGQp2ASNDfj.ja4vdIX2ECnkns41xRB
    hT8irX+uG9PRsjaIaJY2dj20XvXOConXwOVrJVEqh9Wt+tEqxdgvV.9qfe.b
    2c+x82cmpHYA2U8+uawN7KQIXl5wVDksaGIkuXotNN4EtpbFg.JHrxjlpVmk
    xYz+GQVMD8fUUw4XdzVZ5luVPh35d1GBEUCBPNxu7TehrdvB7S0uphMqjOpU
    yagFq50rU+7m88a2io3cpdbweufhSpqIsbGMMgvUiA3aElUxqK0RV3ud+8xO
    VdhfQbAdCXKofLErPNHA9VAO3J9JXjXg6rCKdBH+ScwIzTRTVYppN6QiNdt1
    R.w02W9ELT9oiuwni8rCc3aoL.4E7t7DBHNivR+DGfiTPDXcVAHkrAyoOQ.B
    ZXEofsDv2lUtY6C..KaGA7bVwi.FmljHdTRLI9gdgZ2QC0ANdpUiAJPFBU.u
    uiwXs02LrViTKlJykTLjXomq06V5ooK9q4DcCVPkynfEqvoaVz7T43BwnkSJ
    9JIEuJQ8r8.PdAmE.BME.h7rfBdGu3eAfbmLp4G5JQMaj7yiiZM01FQFqfbT
    uHB77gH4fhxzTw386y3uQCiGa77jnRfmYbT8gMPT3YgcA1lXEKRzPRElHd2z
    DxSBoLzrzVO8cKv44sJ9tVMQBj+bl5E4sroHZptHXSQEjmn0sG0TJtP.YbAd
    UVnGOuD3sPWoXx695lVim50jgUaSP8ebBZgmho4MIYQORhasnSfx4DwjXtX6
    IBQvBooZpno5XxZrXeKes+40t0uFGQFrw8Nqb2hMEz3rTIQzokxhq6te..cU
    hYcaOXTOQJNumFyDiiR1JbgDUqDxTCqK3YYIcqpYhTrL.mR2g4DNUSrHqlWJ
    cWdAUqunoLsLrsrnhrjjNuJcMO0SMwh45HxyzX91N5Gj0HdbZd8TvhFLJltg
    v3cKii2v5VRmcq1lIr856Nken04cWqmjgi2QXLfU6pGfmXf06H05bE6oOZ+E
    68ufeQmpauheexnetqgV2Ojfw6pENVsF67CjbvJ.c5XndMNzR806UmzOJpz.
    urq3y2AnPuyNjhtLPpXCgk6NYHEoLlvwyLFyCCk9SDJsuHbmp9agIfhVIBxs
    9yS.SP9CNpsFdT2plZaDTh7Ningt6LBNPVAG.O5LZClvxEqQLZeSMnzPlAj5
    qFHx56GFXYkEQ0SdMx..vNiJgNINMsYaA+PKV78dxsz33t5g0ptXREgwMlqb
    zosoQ0VFS0VyCpF4aLU6MenZnwTsbIvbgpu37Gfe5916ReAC+DI9qh9PHQ4q
    XNuftpjqW111.iScuzGeu5iXCl8RDGnyGpSE1brBmTYRUSa6Yer2+FHdY8oQ
    k6D+v8oAbt4SibfX778Y+CRBGOczyV6LVmoa+tG5l46JCA0eby38aFueNMP5
    ymrwQdAiwdyCYHP3DMMBcQLMR5hC7FRunHLb5vX0IxXq9pBSClryOBl0X3Ac
    9AU7mUmI2eLFa0W1up68QVmytOPruxMb2F9a.61cLztcaz0nY6NFZzdvrwjc
    IEiLjhslMTrIlPFNan3fQPwyCtBaSsS2Y1.xgFRwRAK2brv0miEFJvTxVChD
    7BLxR.cM30rxOUP.oYb.u3UgFH.OCrSRW.9VBHe6qLZDNATjoMQaorExWPRL
    f8HMGfAIh1Jdop.dQzxs.bZL3mKYbPL8IZLQ1hh5yaW754hW2pWUudAKCGmF
    Q.3bbAW8peFmxADrn+yTyIR5YEo+XewYp186gT6+x1RGILFGEVtAyt3L5Ke4
    KfA963cKhsdeFN1JbA5GNtfTy0a1AO+ItLZ8.XweyKDq4Vk7JXWof6ZWlnHx
    50zHpncB1tWYRVMYDZsKOgx1pXn+td46P8ArdGBXcsUgdjsk1LTcjP5fLFXc
    91EyU869slCU2ydBrYVt5f8Cp79V3w89Vutdy8L45syH6FivUB1zd0UJVTvJ
    IjmkPjONqSnidbVpCChtZPLTaetqVhlswrTvqtv3qlsIrkqH93b4syTiKKQQ
    zck6FNN1pKU.J0OHD4eF4BKHwkBkpRFwtpckB3D5qyxkEUwithvelPREawSp
    2V1F8y1natQqrn0psAneyOllsBPSAYEwh2hntnWiRjUUHihU.NIQq3WqFm0u
    FbuwGF0JQmt5.xApEjFXbfB6L+Bo7+EU.6JjhIDSDo1yS0TyyTgNHwNf1h4.
    VtbammIQGZmJ3E.0hNrFmnCG24l1Hky4Fu.EjCTGm4ViIBWWN7gA4XO2NlrB
    vm+7mkGwxTxdC0hK6JwsdSTKMbrbKVmMszccI9afBp6FUGGyhduwZlk1NB2P
    3v14aVrPODb.sPNS.OBraiG96ev.lhGn4Wrgyy9WzWHw+mLFU4VfQiMPWEb3
    DFn84uswaUYHIK1VmEXBccGk3g15rCBd6nlucTyS5nW5tKrtK7oq2a6xjWhH
    jXV0lhyklyobkkvbBxRvyE3b.VraW41ly5Fc48kMbSIry8c0JabasQs1oEW+
    aVaegGMY+y46rAsNiGG1glS926OmPYBSXxURlaxctkfRFAP4.LST+C+X5OlR
    6sc6kycuaNTNQuktYqfSrdO3RKbpmyeXvoX+IOEq0P3TMA6zbFwibFFc0NCS
    SE01xdznsRnVunKmTDQDyWwZqMExuyRJaoRdPiglvDgsa3aG+bcTiXO5IBqY
    8DwQCvgSH+NrQvZiwmZ.Nbvvv2aVGfCG.YY6aC1zAWTf1EXA8ht8Y00UnH+O
    sCrIq5nnTvlRVfJUYT9nR4rDYl3K29QiarvQOpTCCddKIE7LoRPxa9p5MoGK
    AqHQXoNiNYo8Fw.EDkkttjI68L4QG7Lkc.w9NSe9TOQhP5rIyFs+AQYl3Fn8
    rdZ9Pwjl0ouXvc.SwGaB4YcsFTZ+QAF3dBY0nFGqO0O2SO+wP1W0w22zgR4F
    FjdOzAM1nM8Xp8btVysw+L.dx3IzCcthdW+qUNyMxSbAc5PoViiiigou7xCH
    wz6rikWLdxSRfILTKiT8j.sCgOMtRmqUtxubJoSeMKIJ7bs592s5czQAvHyp
    dCz6fl0pcLIbxqflyW7ji7lowStInQ0dlOinwUcVwWIAx1CZV30+gmU7eni1
    5M5a7nM7p7N.v3jo2Z9je2ldsE3Lqx.BiP44SrtOFPddPwRCoMBkQymz1.ZZ
    17zyf6a55Ojoz77XAn4W+FynaeCKSoY24yZPCYmsmUTrIfr27IwoLjhmO29M
    9i.imOZ+txTXiLklQyKseFQxA2RntqwDpanvmTd.k+A3DBRPc1m43oipG6IF
    .kHquYAP4f280kEofX4MyCSdK8HS5.crsm0aVentc3OVpSg7BUeoCu.yCVcn
    MZ9kTZOWkfkTVSn9uklnS0B0ULeSDmkR9tyTP+izAipeEi1XC5eHb9cGqKPG
    v5xj2xNUveS5ee.mF8HCHycTYLDUx1JjCxE+WbQjN5vppJk7LXWlfQkI8fJx
    tpghYklbETkCMzMaqiGLUy+mTYnAHyYvk.J+SsdbUVE9tjlUlAGo0oZKdMWz
    V4M.uXUgJaZpWarDvx.jWxIEzcpbRTzM.1NbRhnAU2R7O..+257wQz9sYEbQ
    mVETCkbUh7JdK5JTINhjmpfxdDjICg2sYhGNciNFJ33hMD9COnFTxWajfLwI
    h1uIS26pTkTEQbEucO0qSa3lbBJRvNTjknt05k4qxFfnidULpRqBRO0aZs7e
    IFzL5KcmyjhH.DMhFSKzY.iXXptYtEPZoLdrkcX+YPDzZzqDbsbZE45NtUgf
    Gz3kBVgytkB3XU.L1IlGmPL8aa2JkOfH6wk+uPqY5uXGRIsKAQED4xMshooC
    NUQHXO4e3Q.G2qtLtrJOFpFxezYbYn6ustjAqQOeq5egMl5kLXn8sKYvaWxf
    2x7iaWxfy3KYPqa2wf2tiAucGCd6NFblEV.W7K5reWdcxc8cm8c8cuHdcd2S
    dIueOucjHWE+3EfbrZ4K5Ob+Jfla9UfEgSHhknRmUaMoqPspaiDOe0l7Bm5U
    nVvX8jo2G8suQ6ejwlfuVzdtzjqxm99kEqCzL67FU6ervlvkQRUVdcB+VUFL
    162Q6ixsn5lt61SiP6qooBmdevMzIdLFJVL5nQ785Vdudk2MiYJ8.6FPdCQP
    9WLBxCY.8rOU+gRPPS.HzEidbMAfbtb3SfILPgWN7Qd0C81lyFZCbWN7ww1T
    5AcYnGSluTziykCeNF8r2j5GJ+iQqurub7yNyK5oaDuND+i27hdBcubxC8Lk
    e9BJO7XzC5xQOHq4E+SnQ7OWt0WglHOL3BxO6Zh9KuKl74fOT4O5M3u2QHKI
    k8N538N132ejwCcbwh94Wu++CT2UV8.
    -----------end_max5_patcher-----------

  • The second part is the LED feedback. Lots of options there; depends what you want things to look like, and how modular you want your code to be.

    (I'll describe this in text, 'cause I can't test any code I might write for you)

    I mean, if you know there are always going to be 13 LED states, you could go as brute-force as storing those in message boxes and doing a [sel 13] based on your selection number to trigger each state.

    The step up from there would be storing and retrieving them in a [coll]. Which is often the best way to go if you have a fixed number of states to select from. Among other things, you can clear the coll and rewrite it dynamically when that number of states changes.

    tehn's got a great example using Javascript to generate interlaced LED states, representing any number between 0 and 1000 smoothly around the ring. but it performs all that math with every delta received. It's probably more efficient to uzi a thousand deltas through that on launch, store its output in a coll, and reference the coll as an LED state lookup table from that point on.


    I used a variation on the coll idea here:
    https://vimeo.com/channels/gtz/43330650
    There aren't that many LED states; just a small handful representing how fast it's moving / how long the trail should be. Each of those is a 64 item list of brightness levels that I manually created by typing numbers and seeing what they looked like. But between the coll's output and the LEDs, I ran that list through [zl rot] to offset it around the circle. Hence, the rotation. (without that, the LED feedback is simply a line that grows shorter or longer, and is flipped w/ [zl rev] if it's rotating counterclockwise)

    I'd probably do something like that w/ your idea. It'd be one state, which might look like:

    15 7 3 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 3 7 15

    and I'd rotate that list by increments of... 5? (64 divided by 13)

    Something like that.


    Or, if I was feeling extra fancy... I'd use tehn's interlace code to generate a thousand states, cache those in a coll, drop his JS (there's no reason to generate it for different values than 1000), scale my 13 values up to 1000, and use a [line] object to make the pointer move smoothly from any of the 13 set positions to any of the others once I'd rotated beyond e necessary threshold.

    Or, extra fancy bonus edition, I'd modify tehn's JS to generate numbers higher or lower than 1000, and generate LED states so I know they'll be evenly divisible around the ring. It'd still generate a list when initialized and then never perform that math again, but it could be initialized with different numbers every time for reusability...

  • Unfortunately, it's feeling extra fancy that leads to my apartment being like this.

  • Brilliant. Studying these. And I think I need a box of http://www.sticknfind.com/ in my life.

  • Making progress.

    I've been playing with multiple techniques and now I'm wondering how to synchronize the encoder data w/ the leds.

    For example I have fine tuned my encoder data to respond slowly as I turn the encoder. But my LEDs are hauling ass. Can you think of any good example that show how to slow down the LED data? Same techniques?