Lukas
12 years ago
16 changed files with 528 additions and 162 deletions
-
BINfritzing_files/input_Platte.fzz
-
28source/INPUT_MCP23017_test/INPUT_MCP23017_test.ino
-
99source/MCP23017_test/MCP23017_test.ino
-
1source/_4051_test/_4051_test.ino
-
22source/input_4051_library_test/input_4051_library_test.ino
-
67source/libraries/INPUT_74HC4051/INPUT_74HC4051.cpp
-
29source/libraries/INPUT_74HC4051/INPUT_74HC4051.h
-
115source/libraries/INPUT_MCP23017/INPUT_MCP23017.cpp
-
51source/libraries/INPUT_MCP23017/INPUT_MCP23017.h
-
42source/library/input_4051/input_4051.cpp
-
28source/library/input_4051/input_4061.h
-
0source/midi_in_out/midi_in_out.ino
-
62source/midi_in_out_softwareserial/midi_in_out_softwareserial.ino
-
45source/midi_led/midi_led.ino
-
9source/piezo_input/piezo_input.ino
-
92source/sketches/testing/midi_in_out_softwareserial.ino
@ -0,0 +1,28 @@ |
|||||
|
#include <Wire.h>
|
||||
|
|
||||
|
#include <INPUT_MCP23017.h>
|
||||
|
#include <INPUT_74HC4051.h>
|
||||
|
|
||||
|
INPUT_MCP23017 input_MCP23017; |
||||
|
INPUT_74HC4051 input_4051; |
||||
|
|
||||
|
void setup() { |
||||
|
Serial.begin(9600); |
||||
|
input_MCP23017.begin(0,printValue); |
||||
|
input_4051.begin(A0,11,12,13,printValue); |
||||
|
} |
||||
|
|
||||
|
void loop() { |
||||
|
input_MCP23017.loop(); |
||||
|
input_4051.loop(); |
||||
|
} |
||||
|
|
||||
|
void printValue(int id, int pin, int value) { |
||||
|
Serial.print("id: "); |
||||
|
Serial.print(id); |
||||
|
Serial.print(" pin: "); |
||||
|
Serial.print(pin); |
||||
|
Serial.print(" value: "); |
||||
|
Serial.print(value); |
||||
|
Serial.println(); |
||||
|
} |
@ -0,0 +1,99 @@ |
|||||
|
#include <Wire.h>
|
||||
|
|
||||
|
#define MCP23017_ADDRESS 0x20
|
||||
|
|
||||
|
// registers (from https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/Adafruit_MCP23017.h)
|
||||
|
#define MCP23017_IODIRA 0x00
|
||||
|
#define MCP23017_IPOLA 0x02
|
||||
|
#define MCP23017_GPINTENA 0x04
|
||||
|
#define MCP23017_DEFVALA 0x06
|
||||
|
#define MCP23017_INTCONA 0x08
|
||||
|
#define MCP23017_IOCONA 0x0A
|
||||
|
#define MCP23017_GPPUA 0x0C
|
||||
|
#define MCP23017_INTFA 0x0E
|
||||
|
#define MCP23017_INTCAPA 0x10
|
||||
|
#define MCP23017_GPIOA 0x12
|
||||
|
#define MCP23017_OLATA 0x14
|
||||
|
|
||||
|
#define MCP23017_IODIRB 0x01
|
||||
|
#define MCP23017_IPOLB 0x03
|
||||
|
#define MCP23017_GPINTENB 0x05
|
||||
|
#define MCP23017_DEFVALB 0x07
|
||||
|
#define MCP23017_INTCONB 0x09
|
||||
|
#define MCP23017_IOCONB 0x0B
|
||||
|
#define MCP23017_GPPUB 0x0D
|
||||
|
#define MCP23017_INTFB 0x0F
|
||||
|
#define MCP23017_INTCAPB 0x11
|
||||
|
#define MCP23017_GPIOB 0x13
|
||||
|
#define MCP23017_OLATB 0x15
|
||||
|
|
||||
|
int _addr = 0; |
||||
|
int _value[16]; |
||||
|
|
||||
|
void setup() { |
||||
|
Serial.begin(9600); |
||||
|
Wire.begin(); |
||||
|
|
||||
|
// set defaults!
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write((byte)MCP23017_IODIRA); |
||||
|
Wire.write(0xFF); // all inputs on port A
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_IODIRB); |
||||
|
Wire.write(0xFF); // all inputs on port B
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPPUA); |
||||
|
Wire.write(0xFF); // all pullup resistors on port A
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPPUB); |
||||
|
Wire.write(0xFF); // all pullup resistors on port B
|
||||
|
Wire.endTransmission(); |
||||
|
} |
||||
|
|
||||
|
void loop() { |
||||
|
uint8_t pin,bank; |
||||
|
int value; |
||||
|
//read bank A
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPIOA); |
||||
|
Wire.endTransmission(); |
||||
|
Wire.requestFrom(MCP23017_ADDRESS | _addr, 1); |
||||
|
bank = Wire.read(); |
||||
|
for (pin=0; pin<8; pin++) { |
||||
|
value = (bank >> pin) & 0x1; |
||||
|
if (_value[pin] != value) { |
||||
|
_value[pin] = value; |
||||
|
printValue(_addr,pin,value); |
||||
|
} |
||||
|
} |
||||
|
//read bank B
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPIOB); |
||||
|
Wire.endTransmission(); |
||||
|
Wire.requestFrom(MCP23017_ADDRESS | _addr, 1); |
||||
|
bank = Wire.read(); |
||||
|
for (pin=8; pin<16; pin++) { |
||||
|
value = (bank >> (pin-8)) & 0x1; |
||||
|
if (_value[pin] != value) { |
||||
|
_value[pin] = value; |
||||
|
printValue(_addr,pin,value); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void printValue(int id, int pin, int value) { |
||||
|
Serial.print("id: "); |
||||
|
Serial.print(id); |
||||
|
Serial.print(" pin: "); |
||||
|
Serial.print(pin); |
||||
|
Serial.print(" value: "); |
||||
|
Serial.print(value); |
||||
|
Serial.println(); |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
#include <INPUT_4051.h>
|
||||
|
|
||||
|
|
||||
|
|
||||
|
INPUT_4051 input_4051(A1,10,9,8,printValue); |
||||
|
|
||||
|
void setup() { |
||||
|
Serial.begin(9600); |
||||
|
input_4051.setPinCount(2); |
||||
|
} |
||||
|
|
||||
|
void loop() { |
||||
|
input_4051.loop(); |
||||
|
} |
||||
|
|
||||
|
void printValue(int pin, int value) { |
||||
|
Serial.print("pin"); |
||||
|
Serial.print(pin); |
||||
|
Serial.print(" : "); |
||||
|
Serial.print(value/8); |
||||
|
Serial.println(); |
||||
|
} |
@ -0,0 +1,67 @@ |
|||||
|
#include "Arduino.h"
|
||||
|
#include "INPUT_74HC4051.h"
|
||||
|
|
||||
|
void INPUT_74HC4051::begin(uint8_t analog, uint8_t s0, uint8_t s1, uint8_t s2,CallbackFunction cbF) { |
||||
|
_analog = analog; |
||||
|
|
||||
|
_s0 = s0; |
||||
|
_s1 = s1; |
||||
|
_s2 = s2; |
||||
|
|
||||
|
pinMode(_analog,INPUT); |
||||
|
|
||||
|
pinMode(_s0,OUTPUT); |
||||
|
pinMode(_s1,OUTPUT); |
||||
|
pinMode(_s2,OUTPUT); |
||||
|
|
||||
|
_callbackFunction = cbF; |
||||
|
|
||||
|
//init start values
|
||||
|
uint8_t pin,r0,r1,r2; |
||||
|
for (pin=0; pin<8; pin++) { |
||||
|
r0 = bitRead(pin,0); |
||||
|
r1 = bitRead(pin,1); |
||||
|
r2 = bitRead(pin,2); |
||||
|
digitalWrite(_s0, r0); |
||||
|
digitalWrite(_s1, r1); |
||||
|
digitalWrite(_s2, r2); |
||||
|
//delayMicroseconds(10);
|
||||
|
_value[pin] = analogRead(_analog); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void INPUT_74HC4051::loop() { |
||||
|
uint8_t pin,r0,r1,r2; |
||||
|
int value; |
||||
|
for (pin=0; pin<8; pin++) { |
||||
|
r0 = bitRead(pin,0); |
||||
|
r1 = bitRead(pin,1); |
||||
|
r2 = bitRead(pin,2); |
||||
|
digitalWrite(_s0, r0); |
||||
|
digitalWrite(_s1, r1); |
||||
|
digitalWrite(_s2, r2); |
||||
|
//delayMicroseconds(10);
|
||||
|
value = analogRead(_analog); |
||||
|
if (_value[pin] < value - INPUT_74HC4051_TOLERANCE || _value[pin] > value + INPUT_74HC4051_TOLERANCE) { |
||||
|
_value[pin] = value; |
||||
|
(*_callbackFunction)(_analog,pin,value); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int INPUT_74HC4051::getSpecificValue(uint8_t pin) { |
||||
|
if (pin >= 8) |
||||
|
return -1; |
||||
|
uint8_t r0,r1,r2; |
||||
|
r0 = bitRead(pin,0); |
||||
|
r1 = bitRead(pin,1); |
||||
|
r2 = bitRead(pin,2); |
||||
|
digitalWrite(_s0, r0); |
||||
|
digitalWrite(_s1, r1); |
||||
|
digitalWrite(_s2, r2); |
||||
|
//delayMicroseconds(10);
|
||||
|
int value = analogRead(_analog); |
||||
|
_value[pin] = value; |
||||
|
return value; |
||||
|
} |
||||
|
|
@ -0,0 +1,29 @@ |
|||||
|
/* |
||||
|
INPUT_4051.h - Library for reading inputs from 4051 multiplexer |
||||
|
*/ |
||||
|
#ifndef INPUT_74HC4051_h |
||||
|
#define INPUT_74HC4051_h |
||||
|
|
||||
|
#define INPUT_74HC4051_TOLERANCE 1 |
||||
|
|
||||
|
#if !defined(CallbackFunction) |
||||
|
typedef void (*CallbackFunction)(int,int,int); |
||||
|
#endif |
||||
|
|
||||
|
class INPUT_74HC4051 |
||||
|
{ |
||||
|
public: |
||||
|
void begin(uint8_t analog, uint8_t s0, uint8_t s1, uint8_t s2,CallbackFunction cbF); |
||||
|
void loop(void); |
||||
|
int getSpecificValue(uint8_t pin); |
||||
|
private: |
||||
|
uint8_t _analog; |
||||
|
uint8_t _s0; |
||||
|
uint8_t _s1; |
||||
|
uint8_t _s2; |
||||
|
int _value[8]; |
||||
|
CallbackFunction _callbackFunction; |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
#endif |
@ -0,0 +1,115 @@ |
|||||
|
#include <Wire.h>
|
||||
|
|
||||
|
#include "Arduino.h"
|
||||
|
#include "INPUT_MCP23017.h"
|
||||
|
|
||||
|
void INPUT_MCP23017::begin(uint8_t addr,CallbackFunction cbF) { |
||||
|
Wire.begin(); |
||||
|
|
||||
|
if (addr > 7) |
||||
|
_addr = 7; |
||||
|
else _addr = addr; |
||||
|
|
||||
|
_callbackFunction = cbF; |
||||
|
|
||||
|
// set defaults!
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write((byte)MCP23017_IODIRA); |
||||
|
Wire.write(0xFF); // all inputs on port A
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_IODIRB); |
||||
|
Wire.write(0xFF); // all inputs on port B
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPPUA); |
||||
|
Wire.write(0xFF); // all pullup resistors on port A
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPPUB); |
||||
|
Wire.write(0xFF); // all pullup resistors on port B
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write((byte)MCP23017_IPOLA); |
||||
|
Wire.write(0xFF); // inverse all inputs
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_IPOLB); |
||||
|
Wire.write(0xFF); // inverse all inputs
|
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
//init start values
|
||||
|
uint8_t pin,bank; |
||||
|
//read bank A
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPIOA); |
||||
|
Wire.endTransmission(); |
||||
|
Wire.requestFrom(MCP23017_ADDRESS | _addr, 1); |
||||
|
bank = Wire.read(); |
||||
|
for (pin=0; pin<8; pin++) |
||||
|
_value[pin] = (bank >> pin) & 0x1; |
||||
|
//read bank B
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPIOB); |
||||
|
Wire.endTransmission(); |
||||
|
Wire.requestFrom(MCP23017_ADDRESS | _addr, 1); |
||||
|
bank = Wire.read(); |
||||
|
for (pin=8; pin<16; pin++) |
||||
|
_value[pin] = (bank >> (pin-8)) & 0x1; |
||||
|
} |
||||
|
|
||||
|
void INPUT_MCP23017::loop() { |
||||
|
uint8_t pin,bank; |
||||
|
int value; |
||||
|
//read bank A
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPIOA); |
||||
|
Wire.endTransmission(); |
||||
|
Wire.requestFrom(MCP23017_ADDRESS | _addr, 1); |
||||
|
bank = Wire.read(); |
||||
|
for (pin=0; pin<8; pin++) { |
||||
|
value = (bank >> pin) & 0x1; |
||||
|
if (_value[pin] != value) { |
||||
|
_value[pin] = value; |
||||
|
(*_callbackFunction)(_addr,pin,value); |
||||
|
} |
||||
|
} |
||||
|
//read bank B
|
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
Wire.write(MCP23017_GPIOB); |
||||
|
Wire.endTransmission(); |
||||
|
Wire.requestFrom(MCP23017_ADDRESS | _addr, 1); |
||||
|
bank = Wire.read(); |
||||
|
for (pin=8; pin<16; pin++) { |
||||
|
value = (bank >> (pin-8)) & 0x1; |
||||
|
if (_value[pin] != value) { |
||||
|
_value[pin] = value; |
||||
|
(*_callbackFunction)(_addr,pin,value); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int INPUT_MCP23017::getSpecificValue(uint8_t pin) { |
||||
|
if (pin > 16) |
||||
|
return LOW; |
||||
|
Wire.beginTransmission(MCP23017_ADDRESS | _addr); |
||||
|
uint8_t p = pin; |
||||
|
if (pin > 8) { |
||||
|
Wire.write(MCP23017_GPIOB); |
||||
|
p -= 8; |
||||
|
} else |
||||
|
Wire.write(MCP23017_GPIOA); |
||||
|
Wire.endTransmission(); |
||||
|
uint8_t bank = Wire.read(); |
||||
|
int value = (bank >> p) & 0x1; |
||||
|
_value[pin] = value; |
||||
|
return value; |
||||
|
} |
||||
|
|
||||
|
|
@ -0,0 +1,51 @@ |
|||||
|
/* |
||||
|
INPUT_MCP23017.h - Library for reading inputs from MCP23017 port Expander |
||||
|
*/ |
||||
|
#ifndef INPUT_MCP23017_h |
||||
|
#define INPUT_MCP23017_h |
||||
|
|
||||
|
#if !defined(CallbackFunction) |
||||
|
typedef void (*CallbackFunction)(int,int,int); |
||||
|
#endif |
||||
|
|
||||
|
class INPUT_MCP23017 |
||||
|
{ |
||||
|
public: |
||||
|
void begin(uint8_t addr,CallbackFunction cbF); |
||||
|
void loop(void); |
||||
|
int getSpecificValue(uint8_t pin); |
||||
|
private: |
||||
|
uint8_t _addr; |
||||
|
int _value[16]; |
||||
|
CallbackFunction _callbackFunction; |
||||
|
}; |
||||
|
|
||||
|
#define MCP23017_ADDRESS 0x20 |
||||
|
|
||||
|
// registers (from https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/Adafruit_MCP23017.h) |
||||
|
#define MCP23017_IODIRA 0x00 |
||||
|
#define MCP23017_IPOLA 0x02 |
||||
|
#define MCP23017_GPINTENA 0x04 |
||||
|
#define MCP23017_DEFVALA 0x06 |
||||
|
#define MCP23017_INTCONA 0x08 |
||||
|
#define MCP23017_IOCONA 0x0A |
||||
|
#define MCP23017_GPPUA 0x0C |
||||
|
#define MCP23017_INTFA 0x0E |
||||
|
#define MCP23017_INTCAPA 0x10 |
||||
|
#define MCP23017_GPIOA 0x12 |
||||
|
#define MCP23017_OLATA 0x14 |
||||
|
|
||||
|
#define MCP23017_IODIRB 0x01 |
||||
|
#define MCP23017_IPOLB 0x03 |
||||
|
#define MCP23017_GPINTENB 0x05 |
||||
|
#define MCP23017_DEFVALB 0x07 |
||||
|
#define MCP23017_INTCONB 0x09 |
||||
|
#define MCP23017_IOCONB 0x0B |
||||
|
#define MCP23017_GPPUB 0x0D |
||||
|
#define MCP23017_INTFB 0x0F |
||||
|
#define MCP23017_INTCAPB 0x11 |
||||
|
#define MCP23017_GPIOB 0x13 |
||||
|
#define MCP23017_OLATB 0x15 |
||||
|
|
||||
|
|
||||
|
#endif |
@ -1,42 +0,0 @@ |
|||||
/*
|
|
||||
Morse.cpp - Library for flashing Morse code. |
|
||||
Created by David A. Mellis, November 2, 2007. |
|
||||
Released into the public domain. |
|
||||
*/ |
|
||||
|
|
||||
#include "Arduino.h"
|
|
||||
#include "input_4051.h"
|
|
||||
|
|
||||
const int tolerance = 4; |
|
||||
|
|
||||
input_4051::input_4051(int analogPin, int s0Pin, int s1Pin, int s2Pin, void (*valueChangeCallback(int,int))) |
|
||||
{ |
|
||||
_analog = analogPin; |
|
||||
_s0 = s0Pin; |
|
||||
_s1 = s1Pin; |
|
||||
_s2 = s2Pin; |
|
||||
pinMode(_analog,INPUT); |
|
||||
pinMode(_s0,OUTPUT); |
|
||||
pinMode(_s1,OUTPUT); |
|
||||
pinMode(_s2,OUTPUT); |
|
||||
_valueChangeCallback = valueChangeCallback; |
|
||||
_value = {-1,-1,-1,-1,-1,-1,-1,-1}; |
|
||||
} |
|
||||
|
|
||||
void input_4051::loop() |
|
||||
{ |
|
||||
for (count=0; count<=7; count++) { |
|
||||
r0 = bitRead(count,0); |
|
||||
r1 = bitRead(count,1); |
|
||||
r2 = bitRead(count,2); |
|
||||
digitalWrite(_s0, r0); |
|
||||
digitalWrite(_s1, r1); |
|
||||
digitalWrite(_s2, r2); |
|
||||
int read = analogRead(_analog); |
|
||||
if (value[count] < read - tolerance || value[count] > read + tolerance) { |
|
||||
value[count] = read; |
|
||||
_valueChangeCallback(count, read); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
@ -1,28 +0,0 @@ |
|||||
/* |
|
||||
input_4051.h - Library for reading inputs from 4051 multiplexer |
|
||||
Created by David A. Mellis, November 2, 2007. |
|
||||
Released into the public domain. |
|
||||
*/ |
|
||||
#ifndef input_4051_h |
|
||||
#define input_4051_h |
|
||||
|
|
||||
#include "Arduino.h" |
|
||||
|
|
||||
|
|
||||
class input_4051 |
|
||||
{ |
|
||||
public: |
|
||||
Morse(int analogPin, int s0Pin, int s1Pin, int s2Pin, void (*valueChangeCallback(int,int))); |
|
||||
void loop(void); |
|
||||
int getSpecificValue(int pin); |
|
||||
private: |
|
||||
int _analog; |
|
||||
int _s0; |
|
||||
int _s1; |
|
||||
int _s2; |
|
||||
void (*_valueChangeCallback(int,int); |
|
||||
int _value[8]; |
|
||||
}; |
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -0,0 +1,62 @@ |
|||||
|
#include <Wire.h>
|
||||
|
#include <SoftwareSerial.h>
|
||||
|
|
||||
|
#define IOPOLA 0x02
|
||||
|
#define GPPUA 0x12
|
||||
|
#define BIT_IS_SET(i, bits) (1 << i & bits)
|
||||
|
|
||||
|
SoftwareSerial MIDI(10,11); |
||||
|
|
||||
|
boolean button[8]; |
||||
|
|
||||
|
void setup() |
||||
|
{ |
||||
|
//printing baudrate
|
||||
|
Serial.begin(9600); |
||||
|
MIDI.begin(31250); |
||||
|
Wire.begin(); |
||||
|
Wire.beginTransmission(0x20); |
||||
|
Wire.write(0x12); // set MCP23017 memory pointer to GPIOB address
|
||||
|
Wire.write(0xFF); //PULLUP
|
||||
|
Wire.endTransmission(); |
||||
|
} |
||||
|
|
||||
|
void loop() |
||||
|
{ |
||||
|
Wire.beginTransmission(0x20); |
||||
|
Wire.write(0x12); // set MCP23017 memory pointer to GPIOB address
|
||||
|
Wire.endTransmission(); |
||||
|
Wire.requestFrom(0x20, 1); // request one byte of data from MCP20317
|
||||
|
int inputs = Wire.read(); |
||||
|
delayMicroseconds(10); |
||||
|
//check if button is pressed
|
||||
|
|
||||
|
int i; |
||||
|
for(i=0;i<8;i++) { |
||||
|
if (BIT_IS_SET(i,inputs)) { |
||||
|
if(!button[i]) { |
||||
|
button[i] = true; |
||||
|
midiSignal(144,60+i,115); |
||||
|
} |
||||
|
} else { |
||||
|
if(button[i]) { |
||||
|
button[i] = false; |
||||
|
midiSignal(128,60+i,0); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//send MIDI signal through softwareserial
|
||||
|
void midiSignal(byte b1, byte b2, byte b3) { |
||||
|
Serial.print(b1); |
||||
|
Serial.print(" "); |
||||
|
Serial.print(b2); |
||||
|
Serial.print(" "); |
||||
|
Serial.print(b3); |
||||
|
Serial.print(" "); |
||||
|
Serial.println(); |
||||
|
MIDI.write(b1); |
||||
|
MIDI.write(b2); |
||||
|
MIDI.write(b2); |
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
/*
|
||||
|
MIDI note player |
||||
|
|
||||
|
This sketch shows how to use the serial transmit pin (pin 1) to send MIDI note data. |
||||
|
If this circuit is connected to a MIDI synth, it will play |
||||
|
the notes F#-0 (0x1E) to F#-5 (0x5A) in sequence. |
||||
|
|
||||
|
|
||||
|
The circuit: |
||||
|
* digital in 1 connected to MIDI jack pin 5 |
||||
|
* MIDI jack pin 2 connected to ground |
||||
|
* MIDI jack pin 4 connected to +5V through 220-ohm resistor |
||||
|
Attach a MIDI cable to the jack, then to a MIDI synth, and play music. |
||||
|
|
||||
|
created 13 Jun 2006 |
||||
|
modified 13 Aug 2012 |
||||
|
by Tom Igoe |
||||
|
|
||||
|
This example code is in the public domain. |
||||
|
|
||||
|
http://www.arduino.cc/en/Tutorial/Midi
|
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
void setup() { |
||||
|
// Set MIDI baud rate:
|
||||
|
Serial.begin(9600); |
||||
|
pinMode(2, INPUT); |
||||
|
digitalWrite(2, HIGH); |
||||
|
pinMode(3, OUTPUT); |
||||
|
} |
||||
|
|
||||
|
void loop() { |
||||
|
button(); |
||||
|
} |
||||
|
|
||||
|
void button() { |
||||
|
int sensorVal = digitalRead(2); |
||||
|
if (sensorVal == HIGH) { |
||||
|
digitalWrite(3, LOW); |
||||
|
} |
||||
|
else { |
||||
|
digitalWrite(3, HIGH); |
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
void setup() { |
||||
|
Serial.begin(9600); |
||||
|
} |
||||
|
|
||||
|
void loop() { |
||||
|
int val = analogRead(5); |
||||
|
Serial.println(val); |
||||
|
delay(100); // we have to make a delay to avoid overloading the serial port
|
||||
|
} |
@ -1,92 +0,0 @@ |
|||||
#include <SoftwareSerial.h>
|
|
||||
|
|
||||
// RX, TX for MIDI out
|
|
||||
SoftwareSerial MIDI(10, 11); |
|
||||
|
|
||||
//button pin
|
|
||||
const int switchPin = 6; |
|
||||
//rotary encoder pins
|
|
||||
const int encAPin = 4; |
|
||||
const int encBPin = 5; |
|
||||
|
|
||||
//for sending note-off once after button is released
|
|
||||
boolean btnOff = false; |
|
||||
|
|
||||
//old rotary encoder value
|
|
||||
int encA = LOW; |
|
||||
//read rotary encoder value
|
|
||||
int enc = HIGH; |
|
||||
|
|
||||
void setup() |
|
||||
{ |
|
||||
//printing baudrate
|
|
||||
Serial.begin(9600); |
|
||||
//MIDI baudrate for software serial (pin 10 & 11)
|
|
||||
MIDI.begin(31250); |
|
||||
//button and encoder pins as input
|
|
||||
pinMode(switchPin, INPUT); |
|
||||
pinMode(encAPin, INPUT); |
|
||||
pinMode(encBPin, INPUT); |
|
||||
//activate pullup-resistors (read value is inverted, so LOW is active)
|
|
||||
digitalWrite(switchPin, HIGH); |
|
||||
digitalWrite(encAPin, HIGH); |
|
||||
digitalWrite(encBPin, HIGH); |
|
||||
} |
|
||||
|
|
||||
void loop() |
|
||||
{ |
|
||||
//print incoming bytes on softwareserial, just for checking MIDI-in, worked
|
|
||||
if (MIDI.available()) |
|
||||
Serial.println(MIDI.read()); |
|
||||
|
|
||||
//check if button is pressed
|
|
||||
if (digitalRead(switchPin) == LOW) |
|
||||
{ |
|
||||
if (!btnOff) { |
|
||||
//send note on
|
|
||||
midiSignal(144,60,100); |
|
||||
btnOff = true; |
|
||||
} |
|
||||
} |
|
||||
if (digitalRead(switchPin) == HIGH) |
|
||||
{ |
|
||||
//send note off
|
|
||||
if (btnOff) { |
|
||||
midiSignal(128,60,0); |
|
||||
btnOff = false; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
//read encoder pin A
|
|
||||
enc = digitalRead(encAPin); |
|
||||
//check if rotary encoder is turned
|
|
||||
if ((encA == HIGH) && (enc == LOW)) { |
|
||||
//check direction of turning
|
|
||||
if (digitalRead(encBPin) == HIGH) { |
|
||||
//send note on and note off directly, so signal is send on every turn
|
|
||||
midiSignal(144,62,100); |
|
||||
midiSignal(128,62,100); |
|
||||
} else { |
|
||||
//other direction, other note value
|
|
||||
midiSignal(144,61,100); |
|
||||
midiSignal(128,61,100); |
|
||||
} |
|
||||
} |
|
||||
//save "old" encoder value
|
|
||||
encA = enc; |
|
||||
} |
|
||||
|
|
||||
//send MIDI signal through softwareserial
|
|
||||
void midiSignal(byte b1, byte b2, byte b3) { |
|
||||
//debug printing
|
|
||||
Serial.print("send: "); |
|
||||
Serial.print(b1); |
|
||||
Serial.print(" | "); |
|
||||
Serial.print(b2); |
|
||||
Serial.print(" | "); |
|
||||
Serial.print(b3); |
|
||||
Serial.println(""); |
|
||||
MIDI.write(b1); |
|
||||
MIDI.write(b2); |
|
||||
MIDI.write(b2); |
|
||||
} |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue