I actually addressed this problem a while ago. If I knew how to upload a notebook or a sketch on this site I would love to share my code, since I am very much interested in this topic.
The program
"SerialCallResponseASCIIStelzer.ino" has to be started on the Arduino using the IDE. This program accepts various ASCII codes and responds by returning comma separated analog and pin values in a string. These are then read, converted to numbers and displayed.
"A" read single values of analog inputs A0 & A1 as well as digital pins D2, D3 & D4 (
simple kind of oscilloscope!!)"R" generate random values for A0 (0 ... 511), A1 (256 ... 1023), D2 (0, 1), D3 (0, 1), D4 (0, 1) (a
s above but for test purposes)"S" read string of 128 values of analog inputs A0 & A1 as well as digital pins D2, D3 & D4
"T" read string of 256 values of analog inputs A0 & A1 as well as digital pins D2, D3 & D4
"U" read string of 1024 values of analog inputs A0 & A1 as well as digital pins D2, D3 & D4
"Z" for test purposes
Mathematica generates random single values for A0 (0 ... 511), A1 (256 ... 1023), D2 (0, 1), D3 (0, 1), D4 (0, 1)
On the Mathematica side I use
NETNew["System.IO.Ports.SerialPort", "COM3", 115200] to initiate and perform the communication. The most recent Arduino boards allow you to connect directly via USB but that I have not explored yet.