Lukas
12 years ago
16 changed files with 345 additions and 35 deletions
-
BINdesign_files/design.odg
-
BINdesign_files/design_7inchvinyl.odg
-
BINfritzing_files/64 analog input.fzz
-
BINfritzing_files/INPUT_PLATINE.fzz
-
BINfritzing_files/bombatuino.fzz
-
BINfritzing_files/input_Platte.fzz
-
51source/INPUT_MCP23017_test/INPUT_MCP23017_test.ino
-
12source/MIDI_library_test/MIDI_library_test.ino
-
2source/libraries/bombatuino_INPUT_74HC4051/bombatuino_INPUT_74HC4051.cpp
-
7source/libraries/bombatuino_INPUT_74HC4051/bombatuino_INPUT_74HC4051.h
-
26source/libraries/bombatuino_INPUT_MCP23017/bombatuino_INPUT_MCP23017.cpp
-
9source/libraries/bombatuino_INPUT_MCP23017/bombatuino_INPUT_MCP23017.h
-
59source/libraries/bombatuino_MIDI/bombatuino_MIDI.cpp
-
123source/libraries/bombatuino_MIDI/bombatuino_MIDI.h
-
33source/libraries/bombatuino_ROTARY_ENCODER/bombatuino_ROTARY_ENCODER.cpp
-
58source/libraries/bombatuino_ROTARY_ENCODER/bombatuino_ROTARY_ENCODER.h
@ -0,0 +1,12 @@ |
|||||
|
|
||||
|
#include <bombatuino_MIDI.h>
|
||||
|
|
||||
|
MIDI Midi; |
||||
|
|
||||
|
void setup() { |
||||
|
Midi.begin(); |
||||
|
} |
||||
|
|
||||
|
void loop() { |
||||
|
Midi.noteOn(0x3C,0x64); |
||||
|
} |
@ -1,5 +1,5 @@ |
|||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||
#include "INPUT_74HC4051.h"
|
|
||||
|
#include "bombatuino_INPUT_74HC4051.h"
|
||||
|
|
||||
//should be called in setup()
|
//should be called in setup()
|
||||
void INPUT_74HC4051::begin(uint8_t analog, uint8_t s0, uint8_t s1, uint8_t s2,CallbackFunction cbF) { |
void INPUT_74HC4051::begin(uint8_t analog, uint8_t s0, uint8_t s1, uint8_t s2,CallbackFunction cbF) { |
@ -0,0 +1,59 @@ |
|||||
|
#include "Arduino.h"
|
||||
|
#include "bombatuino_MIDI.h"
|
||||
|
|
||||
|
void MIDI::begin(int channel) { |
||||
|
Serial.begin(31250); |
||||
|
//if given channel is not valid, set default channel to 1
|
||||
|
if (channel > MIDI_MAX_CHANNEL) |
||||
|
channel = MIDI_DEFAULT_CHANNEL; |
||||
|
_channel = channel; |
||||
|
} |
||||
|
|
||||
|
bool MIDI::message(int status, int data, int data2, int channel) { |
||||
|
//check if status byte is valid
|
||||
|
if (status > MIDI_MAX_STATUS) return false; |
||||
|
//check if first data byte is valid
|
||||
|
if (data > MIDI_MAX_DATA) return false; |
||||
|
//check if second data byte is valid
|
||||
|
if (data2 > MIDI_MAX_DATA) return false; |
||||
|
//if no specific channel given, use default channel
|
||||
|
if (channel == MIDI_NULL_CHANNEL) channel = _channel; |
||||
|
//check if channel is valid
|
||||
|
if (channel > MIDI_MAX_CHANNEL) return false; |
||||
|
//write bytes to serial
|
||||
|
Serial.write(status+channel); |
||||
|
Serial.write(data); |
||||
|
//check if second data byte should be send
|
||||
|
if (status != MIDI_PROGRAMM_CHANGE && status != MIDI_CHANNEL_PRESSURE) |
||||
|
Serial.write(data2); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
bool MIDI::noteOff(int note, int velocity, int channel) { |
||||
|
return message(MIDI_NOTE_OFF,note,velocity,channel); |
||||
|
} |
||||
|
|
||||
|
bool MIDI::noteOn(int note, int velocity, int channel) { |
||||
|
return message(MIDI_NOTE_ON,note,velocity,channel); |
||||
|
} |
||||
|
|
||||
|
bool MIDI::polyphonicKeyPressure(int note, int velocity, int channel) { |
||||
|
return message(MIDI_POLYPHONIC_KEY_PRESSURE,note,velocity,channel); |
||||
|
} |
||||
|
|
||||
|
bool MIDI::controlChange(int controller, int value, int channel) { |
||||
|
return message(MIDI_CONTROL_CHANGE,controller,value,channel); |
||||
|
} |
||||
|
|
||||
|
bool MIDI::programChange(int programm, int channel) { |
||||
|
return message(MIDI_PROGRAMM_CHANGE,programm,0,channel); |
||||
|
} |
||||
|
|
||||
|
bool MIDI::channelPressure(int pressure, int channel) { |
||||
|
return message(MIDI_CHANNEL_PRESSURE,pressure,0,channel); |
||||
|
} |
||||
|
|
||||
|
bool MIDI::pitchWheelChange(int last, int most, int channel) { |
||||
|
return message(MIDI_PITCH_WHEEL_CHANGE,last,most,channel); |
||||
|
} |
||||
|
|
@ -0,0 +1,123 @@ |
|||||
|
/** |
||||
|
* @file bombatuino_MIDI.h |
||||
|
* |
||||
|
* @author Lukas Haubaum (lukas@haubaum.de) |
||||
|
* |
||||
|
* @date February, 2013 |
||||
|
* |
||||
|
* @brief arduino library for sending MIDI messages over serial |
||||
|
* |
||||
|
* library is just for sending MIDI messages over normal Serial (TX), not for receiving. |
||||
|
* |
||||
|
* */ |
||||
|
|
||||
|
#ifndef bombatuino_MIDI_h |
||||
|
#define bombatuino_MIDI_h |
||||
|
|
||||
|
#define MIDI_NOTE_OFF 0x80 |
||||
|
#define MIDI_NOTE_ON 0x90 |
||||
|
#define MIDI_POLYPHONIC_KEY_PRESSURE 0xA0 |
||||
|
#define MIDI_CONTROL_CHANGE 0xB0 |
||||
|
#define MIDI_PROGRAMM_CHANGE 0xC0 |
||||
|
#define MIDI_CHANNEL_PRESSURE 0xD0 |
||||
|
#define MIDI_PITCH_WHEEL_CHANGE 0xE0 |
||||
|
|
||||
|
#define MIDI_DEFAULT_CHANNEL 0x00 |
||||
|
#define MIDI_MAX_STATUS 0xE0 |
||||
|
#define MIDI_MAX_CHANNEL 0x0F |
||||
|
#define MIDI_MAX_DATA 0x7F |
||||
|
#define MIDI_NULL_CHANNEL -1 |
||||
|
|
||||
|
class MIDI { |
||||
|
public: |
||||
|
/** |
||||
|
* initalize the class, should be called in setup() function |
||||
|
* |
||||
|
* !IMPORTANT sets Serial baud rate to the default MIDI baud rate, so do not change baud rate manually |
||||
|
* |
||||
|
* @param optional: default MIDI channel |
||||
|
*/ |
||||
|
void begin(int channel = MIDI_DEFAULT_CHANNEL); |
||||
|
/** |
||||
|
* send MIDI message over Serial |
||||
|
* |
||||
|
* @param status byte |
||||
|
* @param first data byte |
||||
|
* @param second data byte |
||||
|
* @param optional: MIDI channel |
||||
|
* |
||||
|
* @return false, if an error occurs |
||||
|
*/ |
||||
|
bool message(int status, int data, int data2, int channel = MIDI_NULL_CHANNEL); |
||||
|
/** |
||||
|
* send Note off MIDI message |
||||
|
* |
||||
|
* @param note number |
||||
|
* @param optional: velocity |
||||
|
* @param optional: MIDI channel |
||||
|
* |
||||
|
* @return false, if an error occurs |
||||
|
*/ |
||||
|
bool noteOff(int note, int velocity = MIDI_MAX_DATA, int channel = MIDI_NULL_CHANNEL); |
||||
|
/** |
||||
|
* send Note on MIDI message |
||||
|
* |
||||
|
* @param note number |
||||
|
* @param velocity |
||||
|
* @param optional: MIDI channel |
||||
|
* |
||||
|
* @return false, if an error occurs |
||||
|
*/ |
||||
|
bool noteOn(int note, int velocity, int channel = MIDI_NULL_CHANNEL); |
||||
|
/** |
||||
|
* send polyphinic key pressure MIDI message |
||||
|
* |
||||
|
* @param note number |
||||
|
* @param velocity |
||||
|
* @param optional: MIDI channel |
||||
|
* |
||||
|
* @return false, if an error occurs |
||||
|
*/ |
||||
|
bool polyphonicKeyPressure(int note, int velocity, int channel = MIDI_NULL_CHANNEL); |
||||
|
/** |
||||
|
* send control change MIDI message |
||||
|
* |
||||
|
* @param controller number |
||||
|
* @param value |
||||
|
* @param optional: MIDI channel |
||||
|
*/ |
||||
|
bool controlChange(int controller, int value, int channel = MIDI_NULL_CHANNEL); |
||||
|
/** |
||||
|
* send program change MIDI message |
||||
|
* |
||||
|
* @param programm number |
||||
|
* @param optional: MIDI channel |
||||
|
* |
||||
|
* @return false, if an error occurs |
||||
|
*/ |
||||
|
bool programChange(int programm, int channel = MIDI_NULL_CHANNEL); |
||||
|
/** |
||||
|
* send channel pressure MIDI message |
||||
|
* |
||||
|
* @param pressure value |
||||
|
* @param optional: MIDI channel |
||||
|
* |
||||
|
* @return false, if an error occurs |
||||
|
*/ |
||||
|
bool channelPressure(int pressure, int channel = MIDI_NULL_CHANNEL); |
||||
|
/** |
||||
|
* send pitch wheel change MIDI message |
||||
|
* |
||||
|
* @param last significant bits |
||||
|
* @param most significant bits |
||||
|
* @param optional: MIDI channel |
||||
|
* |
||||
|
* @return false, if an error occurs |
||||
|
*/ |
||||
|
bool pitchWheelChange(int last, int most, int channel = MIDI_NULL_CHANNEL); |
||||
|
private: |
||||
|
int _channel; /**> the default MIDI channel */ |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
#endif |
@ -0,0 +1,33 @@ |
|||||
|
|
||||
|
#include "Arduino.h"
|
||||
|
#include "bombatuino_ROTARY_ENCODER.h"
|
||||
|
|
||||
|
ROTARY_ENCODER::ROTARY_ENCODER(XcrementFunction incrementFunction, XcrementFunction decrementFunction) { |
||||
|
_increment = incrementFunction; |
||||
|
_decrement = decrementFunction; |
||||
|
_pinA = LOW; |
||||
|
_pinB = LOW; |
||||
|
_oldA = LOW; |
||||
|
} |
||||
|
|
||||
|
void ROTARY_ENCODER::setPinB(int value) { |
||||
|
_pinB = value; |
||||
|
onPinChange(); |
||||
|
} |
||||
|
|
||||
|
void ROTARY_ENCODER::setPinA(int value) { |
||||
|
_pinA = value; |
||||
|
onPinChange(); |
||||
|
} |
||||
|
|
||||
|
void ROTARY_ENCODER::onPinChange() { |
||||
|
if ((_oldA == LOW) && (_pinA == HIGH)) { |
||||
|
if (_pinB == LOW) { |
||||
|
(*_increment)(); |
||||
|
} |
||||
|
else { |
||||
|
(*_decrement)(); |
||||
|
} |
||||
|
} |
||||
|
_oldA = _pinA; |
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
/** |
||||
|
* @file bombatuino_ROTARY_ENCODER.h |
||||
|
* |
||||
|
* @author Lukas Haubaum (lukas@haubaum.de) |
||||
|
* |
||||
|
* @date February, 2013 |
||||
|
* |
||||
|
* @brief arduino library for handling a rotary encoder |
||||
|
* |
||||
|
* library is for specialiced use: increment- and decrement-functions are called on change of pin A. |
||||
|
* |
||||
|
* */ |
||||
|
#ifndef bombatuino_ROTARY_ENCODER_h |
||||
|
#define bombatuino_ROTARY_ENCODER_h |
||||
|
|
||||
|
#if !defined(XcrementFunction) |
||||
|
/** |
||||
|
* callback function |
||||
|
* |
||||
|
* @param address |
||||
|
* @param pin |
||||
|
* @param value |
||||
|
*/ |
||||
|
typedef void (*XcrementFunction)(void); |
||||
|
#endif |
||||
|
|
||||
|
class ROTARY_ENCODER |
||||
|
{ |
||||
|
public: |
||||
|
/** |
||||
|
* constructor |
||||
|
* |
||||
|
* @param increment function |
||||
|
* @param decrement function |
||||
|
*/ |
||||
|
ROTARY_ENCODER(XcrementFunction incrementFunction, XcrementFunction decrementFunction); |
||||
|
/** |
||||
|
* set the value of pin B |
||||
|
* |
||||
|
* @param value of B-pin |
||||
|
*/ |
||||
|
void setPinB(int value); |
||||
|
/** |
||||
|
* set the value of pin A |
||||
|
* |
||||
|
* @param value of A-pin |
||||
|
*/ |
||||
|
void setPinA(int value); |
||||
|
private: |
||||
|
int _pinA; |
||||
|
int _pinB; |
||||
|
int _oldA; |
||||
|
XcrementFunction _increment; /**< increment function */ |
||||
|
XcrementFunction _decrement; /**< decrement function */ |
||||
|
void onPinChange(); |
||||
|
}; |
||||
|
|
||||
|
#endif |
Write
Preview
Loading…
Cancel
Save
Reference in new issue