serial object + Arduino

brendan mccloskey's icon

Happy 2011 to all

I am sending X-Y coordinates from a touchscreen simultaneously to Max, via Arduino*, writing my own code adapted from what I found on Practical Arduino site. Way back in the mists of time, I knew how to punctuate and unpack two simultaneous bytes in Max, but I've kinda lost my way. Can someone assist? I've attached a screenshot (apologies for this) showing the raw vals coming into Arduino, my Arduino to Max code and the Max patch. What I am looking for is two streams of values in Max, one for each axis.

Thanks
Brendan

*I'm not using the standard pnp chip/drivers that came with the panel cos it's REAL flaky. Using Arduino to get raw voltages.

1620.maxPunctuate.jpg
jpg
brendan mccloskey's icon

Thanks for looking,
sorted

used Serial.print(255, BYTE) for punctuation,
then in Max: [select 255] -> [zl group 2] -> [unpack 0 0] from
the serial object

Brendan

mudang's icon

xVal>>2 and yVal>>2 might also get 255, when transmitted as 8bit.
this will confuse [zl group].

The way I solved this, is to split the 10bit analog read into a high and a low byte and use two bytes (0xff) for punctuation.

void send_packet(int pin, int value)
{
Serial.write(byte(0xFF)); // Packet start magic
Serial.write(byte(pin));
Serial.write(byte(value & 0xff)); // Lo Byte
Serial.write(byte(value >> 8)); // Hi Byte
}

Max Patch
Copy patch and select New From Clipboard in Max.

in max i use [match 255 nn nn nn] to seperate the packets.

brendan mccloskey's icon

Hi mudang and thanks;
The analog voltages were coming in VERY jittery (cheap Far East tech) and never attained 255, but I've done a little smoothing in my hardware circuit and Arduino code (via grounding resistors and forcing unused analog inputs to 0v), but if I need further stability I'll definitely use your idea too....unfortunately there are missing objects in your patch (bang2byte?), but the concept is clear,
thanks again
Brendan