This project provides an OSC library for Arduino, Teensy and related embedded processor platforms. It is the most feature-rich implementation of the [http://opensoundcontrol.org/spec-1_0|OSC] encoding for these platforms.

Features:

- Supports the four basic OSC data types (integers, floats, strings, and blobs) and some common type extensions
- Send and receive messages over any transport layer that implements the Arduino's [http://arduino.cc/en/Reference/Stream|Stream Class] such as Serial, EthernetUdp, and more.
- Address pattern matching
- Dynamic memory consumption
- Compatible with Arduino 1.0 API and coding style
- Includes many examples for various host applications including Max/MSP and PD

#Getting Started
Start by downloading the OSC for Arduino library from github. To #include the library in your sketch, unzip the folder and place it in a folder titled "libraries" in your default sketch directory. If the name of this folder ends in "-master" please change the folder name to just "OSC". Then import the library by selecting it under Sketch->Import Library. Find the full instructions on creating and importing libraries [http://www.arduino.cc/en/Hacking/Libraries|on the Arduino website].

#Basics
OSC for Arduino provides two classes: OSCMessage and OSCBundle. OSCMessage contains the address, type, and data and OSCBundle is a bundle of OSCMessages with a timetag. To start sending data over the Arduino's Serial port simply construct an OSCBundle with Serial as the constructor argument, add some OSCMessages with some data, and send it off:


#include &#60OSCMessage.h&#62

//Teensy and Leonardo variants have special USB serial
#if defined(CORE_TEENSY)|| defined(__AVR_ATmega32U4__)
#include &#60SLIPEncodedUSBSerial.h&#62
SLIPEncodedUSBSerial SLIPSerial(Serial);
#else
// any hardware serial port
#include &#60SLIPEncodedSerial.h&#62
SLIPEncodedSerial SLIPSerial(Serial);
#endif


void setup() {
  //begin SLIPSerial just like Serial
  Serial.begin(38400);
  while(!Serial)
    ; //Leonardo "feature"
}


void loop(){
  //the message wants an OSC address as first argument
  OSCMessage msg("/analog/0");
  msg.add(analogRead(0));
  msg.send(SLIPSerial); // send the bytes to the SLIP stream
  SLIPSerial.endPacket(); // mark the end of the OSC Packet
  msg.empty(); // free space occupied by message

  delay(20);
}
Attachments