added libraries and clean up
This commit is contained in:
parent
52975c9dba
commit
d94fed811b
BIN
fritzing_files/input_Platte.fzz
Normal file
BIN
fritzing_files/input_Platte.fzz
Normal file
Binary file not shown.
28
source/INPUT_MCP23017_test/INPUT_MCP23017_test.ino
Normal file
28
source/INPUT_MCP23017_test/INPUT_MCP23017_test.ino
Normal file
@ -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();
|
||||
}
|
99
source/MCP23017_test/MCP23017_test.ino
Normal file
99
source/MCP23017_test/MCP23017_test.ino
Normal file
@ -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();
|
||||
}
|
@ -40,3 +40,4 @@ void loop() {
|
||||
Serial.println();
|
||||
}
|
||||
}
|
||||
|
22
source/input_4051_library_test/input_4051_library_test.ino
Normal file
22
source/input_4051_library_test/input_4051_library_test.ino
Normal file
@ -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();
|
||||
}
|
67
source/libraries/INPUT_74HC4051/INPUT_74HC4051.cpp
Normal file
67
source/libraries/INPUT_74HC4051/INPUT_74HC4051.cpp
Normal file
@ -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;
|
||||
}
|
||||
|
29
source/libraries/INPUT_74HC4051/INPUT_74HC4051.h
Normal file
29
source/libraries/INPUT_74HC4051/INPUT_74HC4051.h
Normal file
@ -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
|
115
source/libraries/INPUT_MCP23017/INPUT_MCP23017.cpp
Normal file
115
source/libraries/INPUT_MCP23017/INPUT_MCP23017.cpp
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
51
source/libraries/INPUT_MCP23017/INPUT_MCP23017.h
Normal file
51
source/libraries/INPUT_MCP23017/INPUT_MCP23017.h
Normal file
@ -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);
|
||||
}
|
45
source/midi_led/midi_led.ino
Normal file
45
source/midi_led/midi_led.ino
Normal file
@ -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);
|
||||
}
|
||||
}
|
9
source/piezo_input/piezo_input.ino
Normal file
9
source/piezo_input/piezo_input.ino
Normal file
@ -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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user