Arduino Controlled Otari MTR90

A Journey back intro Arduino: The Arduino Controlled Otari MTR90


I wanted the ability to use an Arduino to control my Otari MTR90 via MIDI from Logic Pro X.

Here is some information on the Arduino controlled Otari MTR90 along with video and photos

A big thanks to for the schematic and code base.

One of the major issues that I ran into when getting this project up and running was that Logic X does not send MIDI off messages.  I had to modify the code to read for specific MIDI velocities and trigger the tape machine that way.



Here is the prototyped Opto Isolator that I built to interface the Arduio to MIDI coming out of Logic Pro X
MIDI Opto Isolator



This is the information that I had to go on from the manual of the Otari
Otari MTR90 External Clock input

Here is a video while I was in development of the project

Here is the machine up and running with MIDI control


Here is the presentation that I gave for  the MeetUp group LA Music Tech Hackers about the project.  They were having a night dedicated to Arduino and LittleBits.

Gobbler hacknight meetup
An amazing new MeetUp group


#include MIDI.h  // Add Midi Library

#define LED 12    // record out
int play=52;      // play out
int stopC=53;     //stop
int state=7; // enables or disables midi control 
// Below is my function that will be called by the Midi Library
// when a MIDI NOTE ON message is received.
// It will be passed bytes for Channel, Pitch, and Velocity
void MyHandleNoteOn(byte channel, byte pitch, byte velocity) {
  digitalWrite(LED,HIGH);  //Turn LED on
  if (velocity == 39  ) {//go into record
    digitalWrite(LED,LOW);//pull pin low 
  if (velocity == 7){//go into play
    digitalWrite(play,LOW);//pull pin low
 if(velocity== 8){// stop machine
  digitalWrite(stopC,LOW);//pull pin low

void setup() {
  pinMode (LED, OUTPUT);    // Set Arduino board pin 12 to output
  pinMode(play,OUTPUT);    // Set Arduino board pin 52 to output
  pinMode(stopC,OUTPUT);  // Set Arduino board pin 53 to output
  MIDI.begin(MIDI_CHANNEL_OMNI); // Initialize the Midi Library.
// OMNI sets it to listen to all channels.. MIDI.begin(2) would set it
// to respond to channel 2 notes only.
  MIDI.setHandleNoteOn(MyHandleNoteOn); // This is important!! This command
  // tells the Midi Library which function I want called when a Note ON command
  // is received. in this case it's "MyHandleNoteOn".

void loop() { // Main loop
  if(state=HIGH){; // Continually check what Midi Commands have been received.