Version 23 (modified by Ken Suzuki, 13 years ago) ( diff )


Audio Jack modem for Iphone and Android


With this board, datas are transferred from Arduino to iPhone and from iPhone to Arduino. The communication speed is 1225bps (※ The actual data transfer rate slightly lower.) It is suitable for a small amount of data communication like switch inputs and sensor information.

This is semi-finished products. To use this, solder a pin header or a pin socket to this board.

Dimensions: 33 x 18mm ( without audio jack )


Android with this board

Softmodem Terminal application for Android

Android to control the camera shutter in a SLR

Make voice audio with JavaScript and play it as a way of data communication

iPhone RFID Tag Reader


  • Because data communications with this device uses audio, data corruption may occur sometimes. Please consider incorporating the checksum processing, and retrying.
  • Please make the iPhone's volume maximum.


Use a 4 pin male to male cable to connect to iPhone. With some cable, cross-talk may occurs that cause communication errors. Please use the gold plated shielded cables. The shorter the cable, the better.

Connect to Arduino as follows (right side is the Arduino's pin.)

AIN1 → D7

Volume Adjustment

Measure the voltage on AIN1 with tester to make it (VCC / 2) + 300mV.

5V VCC: 2.7V AIN1
3.3V VCC: 1.95V AIN1

Arduino Library: SoftModem

Sample Sketch

# Include <SoftModem.h>
# Include <ctype.h>

SoftModem modem;

void setup ()
 Serial.begin (57600);
 delay (1000);
 modem.begin ();

void loop ()
 while (modem.available ()) {
   int c = ();
   if (isprint (c)) {
     Serial.println ((char) c);
   else {
     Serial.print ("(");
     Serial.print (c, HEX);
     Serial.println (")");      
 if (Serial.available ()) {
   modem.write (0xff);
   while (Serial.available ()) {
     char c = ();
     modem.write (c);


  • Two hardware timers and analog comparator are in the library. Therefore, it’s not possible to use these features in the application.
  • Tone function is not available.

iPhone Apps:

SoftModemTerminal is a simple terminal application for iPhone. With the sample sketch, Arduino sends and receives alphanumeric. Please note that big sound will come from speakers if nothing is put into the iPhone's audio jack.

Currently, SoftModemTerminal is not distributed in AppStore. Download the source code, please use your own build.

SoftModemTerminal is able to be build with Xcode and iPhone SDK. Xcode is included in the MacOSX installation DVD. Also available for download at Apple's developer pages.

You can download the Apple SDK iPhone developers to register with the developer page. To make it work on iPhone, You must participate iPhone Developer Program which costs 10,800 JPY a year.

iPhone Apps: Onkyo Denbun is now available for download from the AppStore. If you don't have iPhone application development environment, please download the application from this URL.

How to use the iPhone source code

Currently, the source code of the SoftModem is not made as a framework. If you want to use SoftModem in your project, the source code related to the SoftModem must be copied from the source code of the SoftModemTerminal. The following is the list of source code related to SoftModem. Please copy these to the project source code.

  • AudioQueueObject.h
  • AudioQueueObject.m
  • AudioSignalAnalyzer.h
  • AudioSignalAnalyzer.m
  • AudioSignalGenerator.h
  • AudioSignalGenerator.m
  • CharReceiver.h
  • FSKModemConfig.h
  • FSKByteQueue.h
  • FSKRecognizer.h
  • FSKSerialGenerator.h
  • FSKSerialGenerator.m
  • lockfree.h
  • MultiDelegate.h
  • MultiDelegate.m
  • PatternRecognizer.h

SoftModem uses the following two framework for audio input and output. Please add them to your project.

  • AudioToolbox.framework
  • AVFoundation.framework


First, set the category of application with AVAudioSession class. To do voice recording and playback, AVAudioSessionCategoryPlayAndRecord need to be set.

AVAudioSession * session = [AVAudioSession sharedInstance];
session.delegate = self;
[Session setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
[Session setActive: YES error: nil];

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.