Split and spell words

May 19, 2010 at 5:35am

Split and spell words

Warning, I suck at Max, but I am trying.

I have a device that accepts 3 characters using sysex for a LED display.
The message looks like “sxformat 240 66 64 110 8 34 4 0 / is $i1 / / is $i2 / / is $i3 / 247″
where the inputs are ascii values.

I want to send a message, convert the first three characters into ascii values and then input them into the sxformat and send the message off. I’m having a hard time figuring out how to split the string, convert the letters, and then collect them before sending off the message as three inputs at the same time. I’m sure this is easy for the Max regulars out there. It should handle strings of 0, 1, 2 or 3 characters correctly as well. 0×29 is a blank.

The ultimate would be if the string is over length of 3 is rotates the letters on a timer, but I can do this in a JS part of the patch pretty simply so just the above would suffice.

I’m going to keep diving into the various Max objects but any guidance in the mean time would be greatly appreciated.

#50444
May 19, 2010 at 6:04am

Converting to ascii using the atoi object produces a list of which the first three can be sliced using [zl slice 3]. In case the string is shorter then 3 values, if you prepend (using [prepend]) three times the value for a blank and slice off the last three values with [zl ecils 3] you have a list where blanks are correctly represented. The vexpr object allows to map the atoi output to the correct range.

#181006
May 19, 2010 at 6:31am

Thanks for the quick reply jvkr. It worked perfectly.

If anyone can figure out the case for “hello” to scroll that would be super awesome :)
Here’s the patch so far.

– Pasted Max Patch, click to expand. –
#181007
May 19, 2010 at 11:07am

Like this?

– Pasted Max Patch, click to expand. –
#181008
May 19, 2010 at 6:04pm

Wow, you just blew my mind jvkr. Wish this forum had rep points.
It’s super close to what I was thinking. I’ll try to explain it case by case and see if you or anyone else is up to the challenge. I’m gonna give it a shot too to try to learn but I doubt I’ll get it.

Input: (where ‘_’ is a space)
“Hi” -> Just displays “_Hi”
“Hey” -> Displays “Hey”
“Hello” -> Displays “Hel” -> “ell” -> “llo” -> “lo_” -> “o_H” -> “_He” -> “Hel” then a pause and repeat.

If the screen length is a variable maybe this could be used by anyone looking to make a scrolling display?

#181009
May 20, 2010 at 12:17am

You might try [zl rot] on your overall list of ASCII values, then send/display only the first three of the list. Change the value to [zl rot] using whatever timer/counter/incdec method you want. You can go negative to read backwards :)

The length of the list [zl len] could be used to determine when to pause your display (when the list has cycled all the way through). So this would be the same as the value to [zl rot] at the point of restarting.

#181010

You must be logged in to reply to this topic.