| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

Arduino_Osc

This version was saved 15 years, 4 months ago View current version     Page history
Saved by PBworks
on December 2, 2008 at 1:34:55 pm
 

 

 

 

ARDUINO_OSC is a firmware for Arduino to send and receive OpenSoundControl messages.

It is written entirely in the Arduino environment and can easily edited/compiled/uploaded by Arduino users. 

 

Inspired by Firmata, ARDUINO_OSC offers the following functionality:

  • Digital and analog input pin value changes are sent from Arduino to a PC
  • Digital and PWM output pins can be controlled at runtime with messages from a PC
  • Digital pins can be toggled between input and output at runtime with messages from a PC
  • Reporting of digital and analog input messages can be controlled at runtime with messages from a PC

 

Download latest:

arduino_osc_0004.pde (2008-11-22)

This version has been tested with: Arduino Diecimila hardware; Arduino 0011 on OS X, Arduino 0012 on Win XP.

 

You can test ARDUINO_OSC using a Pd patch on pd_OSCserial.

Details (copied from the pde file):

/**************************************************************
* ARDUINO_OSC 0004
*
* Firmware to send OSC messages from an Arduino board to a PC
* and to receive OSC messages sent from the PC.
*
* Right now, only messages with a single integer argument
* are supported in either direction.
*
* Uses the following serial OSC format:
* 0xBE MSG_LENGTH OSC_MESSAGE CHECKSUM
* ---- ---------- ---/.../-- --------
* 1b 1byte 4*n bytes 1byte
*
* PROTOCOL DETAILS
* Digital pins 2..12 and analog inputs 0..5 are supported.
* PWM output on PWM-capable digital pins is supported as well.
* Below, the notation [2..12] means: any number from 2 to 12.
* The notation [0|1] means: either 0 or 1.
* Pin numbers are always part of the OSC address.
* The single integer argument for each OSC message
* represents either HIGH/LOW, or an 8bit analog value.
*
* PC->ARDUINO MESSAGE FORMAT
* /pinmode/[2..12] [0|1] - set a pin to input or output mode
*
* /report/adc [0|1] - turn all analog pin reporting on/off (Default: off)
* /report/adc/[0..5] [0|1] - set analog pin reporting for one pin on/off
* /report/in [0|1] - turn digital pin reporting on/off (default: on)
*
* /out/5 [0|1] - set a digital pin to [low|high]
* /pwm/10 [0..255] - set duty on a pwm-enabled pin
*
* ARDUINO->PC PROTOCOL
* /in/[2..12] [0|1] - a digital input pin changed to [high|low]
* /adc/[0..5] [0..255] - analog input value changed to [0..255]
* NOTE: input pins use pull-up resistors and are HIGH by default.
* Therefore, 0 means HIGH, 1 means LOW (pulled to ground).
*
* EXAMPLES: PC->ARDUINO
* /pinmode/5 0 - set pin 5 to INPUT
* /pinmode/9 1 - set pin 9 to OUTPUT
* /out/9 0 - set pin 9 to LOW
* /out/12 1 - set pin 12 to HIGH
* /pwm/10 255 - set PWM duty on pin 10 to 255 (100%)
* /report/in 1 - turn digital input pin reporting on
* /report/adc/4 0 - turn reporting of analog input 4 off
*
* EXAMPLES: ARDUINO->PC
* /in/4 1 - digital input pin 4 pulled to ground
* /adc/2 128 - analog input pin2 read 128 (=2.5V)
*
* DEFAULT STARTUP CONFIGURATION
* - Pins 2-12 are all set to input, digital reporting enabled
* (change variable reportDigital to False to disable by default)
* - Analog reporting is disabled
* (change variable reportAnalog to 0xFF to enable by default)
*
* NOTES:
* - Pins 0,1,13 cannot be used
* - Resolution on analog in and out is 8 bit.
* - Not all pins can be used for /pwm output. see arduino documentation
* - So far, not much error checking for bounds done
* - 115200 serial rate results in some read errors on Arduino.
* 38400 is recommended.
*
* MIT License:
* Copyright (c) 2008 Bjoern Hartmann, Stanford HCI Group
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* bjoern@cs.stanford.edu 11/22/2008
**************************************************************/

TO DO:

For version 0005:

  • ADC right shifts twice. so we only get 6 bits. Fix.
  • add "/reset" message
  • writing to PWM pin should turn internal pinDirection buffer to output so we don't generate extraneous messages.

 

Backstory:

Back in the avr-gcc days, I wrote a firmware to send and receive OSC messages on the Arduino. Unfortunately, since this firmware used non-Arduino libraries, it had to be flashed manually using uisp/avrdude, putting it out of reach of most Arduino users. Also, pin assignment was static and all pins always reported, creating some bottlenecks.

I picked this thread back up in October 2008, writing a number of preliminary versions that first only offered output, then expanded to hardwired input addresses as well: arduino_osc_prelims.zip

Comments (0)

You don't have permission to comment on this page.