led_col, led_row skip a byte?

  • is there a way to skip a byte in a led_col message?

    say sending /prefix/led_col 4 . 255

    how would the device interpret the '.' would it update anything or just ignore it?

    reason being I'm trying to have the top half of 256/512 receive led_row updates and have the bottom half receive led_col messages and I don't want it to update the top half.

    and I don't have a bigger device to test on..

  • i hacked the mac version of monomeserial to do something like this a while back.. i'm not sure if the hack is still in there though..

    basically, replace . with a number larger than 255, and since the osc uses 32 bit ints, monome serial catches the larger-than-8-bit value and uses an internal led-state buffer to synthesize the current row or column's LED state for the full 2-byte row or col message

  • however, please note that soundcyst's method is implementation dependent and won't work with other serial routers (i.e. serial-pyio, serialosc).

  • hmm, nothing officially supported though?

    i suppose if i time the messages with the led_col ones going just before the the led_row ones the row messages should paint over any off the col messages in that row..

  • sure, but you'll probably get a flicker.

    while what visinin said regarding implementation dependency is true, serial-pyio and serialosc are open source, so patching them to behave the same way for those messages is doable, though may or may not be advisable...

  • yeah, there would be flicker...

    i guess i'll just work a way to merge the row led_data with the led_col data..

  • dare i suggest the frame message? (i hesitate, as it's still pretty hopelessly broken on my 256)

  • So you can't do…

    /40h/led_col 2 15

    where 15 = 0b1111

    Would that not change the first 4 LED's in the column on, but ignore the rest?

  • ahh I see you want the bottom half.

    Have you considered just coding everything upside down, so your bottom half is just in the code the top half?

  • like code everything rotated? that could work..

    would require changing alot of stuff..

    but would also make a lot of sense in this situation. it's given me something to think about anyway.

    thanks for the input everyone

  • > Have you considered just coding everything upside down, so your bottom half is just in the code the top half?

    while that may work for a few particular cases, it doesn't really help if you want to use say:

    /128/led_col 2 9

    /128/led_col 3 . 127

    sequentially.. ya know?

  • and actually, no. but this brings up a style of message i've thought about implementing in the past..

    example with rows.

    if you have a row (say it's row 5) that currently looks like:

    ooxxooxx

    where x is lit and o is off,

    and you send /40h/led_row 5 15

    the result will be

    xxxxoooo

    not

    xxxxooxx


    which is to say the message both sets and resets.

    the idea i had in the past was a unique message for set and reset.

    so, if you start with ooxxooxx and send say, /40h/led_row/set 5 15

    you get xxxxooxx, whereas if you send (again, hypothetically) /40h/led_row/reset 5 15, you get

    ooooooxx (or is it xxxxoooo ?)

    anyone else have any thoughts on this?

  • could be interesting to have that flexibility. as long as it's kept relatively simple.

    still think being able to target specific led/col bits on the larger monomes would be nice.

  • You could write a fairly tiny JavaScript file that you load into a JS object, that you put before the udpsend, that basically turns a list/array into individual LED updates based on whether each item in the array is a 1 and 0 or an X (skip).

    Might be easier than uzi'ing them out or something.

    What would be your ideal output format for your columns?

  • maybe just that you'd have an index for each byte

    /40h/led_row 1 0 0 1 255 2 0 3 255

    would display 00000000XXXXXXXX00000000XXXXXXXX

    then

    /40h/led_row 1 3 0

    would change the display to

    00000000XXXXXXXX0000000000000000

    without disrupting the first 3 rows, in that row.

  • so, am i the only one thinking about how this scales to non-multiple-of-8 form factors?

    like, if i partition my monome so i have 5x5, 3x5 and 3x8, each sending different prefixes, and i want to led_row just the second row of the 3x5 part...

  • Attached Patch and JS is a starting point if you want something easy without a major change in monomeserial.

    JavaScript looks like this...


    // varColUpdate
    //
    // simulates a partial column update,
    // based on a list/array of 1's, 0's or X's
    //
    // input is a. output is current x.
    //

    // inlets and outlets
    inlets = 1;
    outlets = 1;

    function list(a){

    for(x=1; x

  • That's the first time I got the JS object to actually work, I need to try and learn more of the magic in how JS and Max interact. Coding JS for a living, this opens a whole new world of options.

  • nice!

    that's definitely way more immediate than sitting down with monomeserial for the first time, but once you're familiar with it, it's not much more difficult to just do it there.

    js/max is way interesting, but i feel like it takes some of the fun out of patching. i also feel like it's harder to look at and see what it does (i guess that's the nature of text vs graphical programming?)

  • I can see it opening the doors to simple "externals" without needing to code in C or Java. I can write self contained simple scripts that do things that would be a pain in the patch world (like array management). Just looking over the docs for JS, there is way too much magic in there, this stuff is confusing as hell. First part of the max documentation I'm not liking, and I'd rate the max documentation as possibly the best I've ever seen for a programming environment.

  • Now just for craziness value.

    It wouldn't take a great deal to tweak that so it was more like the osc side of things.

    so you'd pass thru:

    3 4 29
    X Y Z

    X is the Column, 3
    Y is the Start Row, 4
    Z is the decimal 29 equates to 11101

    So on column 3, starting at row 4 there would be 3 LED's on, 1 Off, and 1 on. All other LED's in that column would be left alone.