extremely simple arduino patch not working..

n871's icon

I'm trying to receive data from a potentiometer connected to an arduino due in max 7.

I used the very simple sketch you find on top of this page:
http://www.music.mcgill.ca/~gary/306/week5/serial.html

In the arduino software I can see the values 0-1023 in the serial monitor
(although the due is capable of 0-4095 due to 12bit adc's)
But nothing is happening in the attached max patch (pasted below).

My arduino is connected to a port called usbmodemfa131, which is port d.

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

when I choose this port the max window says "bsd_path: /dev/cu.usbmodemfa131"
So I guess everything is connected well. Real mystery to me why I can't get this to work...

balam's icon

1 check the baud rate
2 try to use non-cue serial (cu.usbmodemXXXXXX)
3 post details of patch and arduino code

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

try this patch

n871's icon

It seems like the audio in max was off for some reason, when I put it back on, the cpu hit 0-1% and the values came finally in. But now I can't reconstruct this, I closed the patch, reopened and I can't get it back to work. Audio is on, but cpu is always on 0%. furthermore the on/off sign in max is always off, I can't make it turn blue again...

n871's icon

Sorry, the audio button is working, it's just greyed out because no msp objects are included in my patch, still so confused why everything worked only once.

The patch I used was the one found here:
http://arduino.cc/en/tutorial/graph

n871's icon

so arduino code:

/*
Graph

A simple example of communication from the Arduino board to the computer:
the value of analog input 0 is sent out the serial port. We call this "serial"
communication because the connection appears to both the Arduino and the
computer as a serial port, even though it may actually use
a USB cable. Bytes are sent one after another (serially) from the Arduino
to the computer.

You can use the Arduino serial monitor to view the sent data, or it can
be read by Processing, PD, Max/MSP, or any other program capable of reading
data from a serial port. The Processing code below graphs the data received
so you can see the value of the analog input changing over time.

The circuit:
Any analog input sensor is attached to analog in pin 0.

created 2006
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe and Scott Fitzgerald

This example code is in the public domain.

void setup() {
// initialize the serial communication:
Serial.begin(9600);
}

void loop() {
// send the value of analog input 0:
Serial.println(analogRead(A0));
// wait a bit for the analog-to-digital converter
// to stabilize after the last reading:
delay(2);
}

/* Processing code for this example

// Graphing sketch

// This program takes ASCII-encoded strings
// from the serial port at 9600 baud and graphs them. It expects values in the
// range 0 to 1023, followed by a newline, or newline and carriage return

// Created 20 Apr 2005
// Updated 18 Jan 2008
// by Tom Igoe
// This example code is in the public domain.

import processing.serial.*;

Serial myPort; // The serial port
int xPos = 1; // horizontal position of the graph

void setup () {
// set the window size:
size(400, 300);

// List all the available serial ports
println(Serial.list());
// I know that the first port in the serial list on my mac
// is always my Arduino, so I open Serial.list()[0].
// Open whatever port is the one you're using.
myPort = new Serial(this, Serial.list()[0], 9600);
// don't generate a serialEvent() unless you get a newline character:
myPort.bufferUntil('\n');
// set inital background:
background(0);
}
void draw () {
// everything happens in the serialEvent()
}

void serialEvent (Serial myPort) {
// get the ASCII string:
String inString = myPort.readStringUntil('\n');

if (inString != null) {
// trim off any whitespace:
inString = trim(inString);
// convert to an int and map to the screen height:
float inByte = float(inString);
inByte = map(inByte, 0, 1023, 0, height);

// draw the line:
stroke(127,34,255);
line(xPos, height, xPos, height - inByte);

// at the edge of the screen, go back to the beginning:
if (xPos >= width) {
xPos = 0;
background(0);
}
else {
// increment the horizontal position:
xPos++;
}
}
}

*/

and max patch:

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

/* Max/MSP v5 patch for this example

*/

Scott Fitzgerald's icon

Did the Graph example work for you?

n871's icon

Eventually it did.
I didn't realize I had to disconnect/connect the arduino due before trying the patch.
Now everything is working well, although I'm still having (different)problems: