add pedal

This commit is contained in:
Valentin Boettcher 2021-08-14 11:01:19 +02:00
parent a60525167c
commit cdbf303ac4
No known key found for this signature in database
GPG key ID: E034E12B7AF56ACE

View file

@ -28,6 +28,9 @@ constexpr int SA5 = 8;
constexpr int RS1 = SA4; constexpr int RS1 = SA4;
constexpr int RS2 = SA5; constexpr int RS2 = SA5;
// sustain
constexpr int SSTE = 9;
/*****************************************************************************/ /*****************************************************************************/
/* Convenience */ /* Convenience */
/*****************************************************************************/ /*****************************************************************************/
@ -118,8 +121,13 @@ char midi_velocity(double velocity) {
return (constrain(velocity, min_velocity, max_velocity) - min_velocity) / max_velocity * 127; return (constrain(velocity, min_velocity, max_velocity) - min_velocity) / max_velocity * 127;
} }
/*****************************************************************************/
/* State */
/*****************************************************************************/
unsigned long S1[num_keys]; // timer value for first hit or 0 unsigned long S1[num_keys]; // timer value for first hit or 0
bool S2[num_keys]; // whether key is pressed bool S2[num_keys]; // whether key is pressed
bool SSTE_PRESSED = false;
void setup() { void setup() {
/***************************************************************************/ /***************************************************************************/
@ -142,6 +150,9 @@ void setup() {
S2[i] = false; S2[i] = false;
} }
// Pedal
pinMode(SSTE, INPUT_PULLUP);
digitalWrite(RS1, LOW); digitalWrite(RS1, LOW);
digitalWrite(RS2, LOW); digitalWrite(RS2, LOW);
digitalWrite(SEL_A, LOW); digitalWrite(SEL_A, LOW);
@ -149,10 +160,25 @@ void setup() {
digitalWrite(SEL_C, LOW); digitalWrite(SEL_C, LOW);
} }
void send_note(int key, double velocity) {
Serial.print("Key: ");
Serial.print(key);
Serial.print(" ");
Serial.println(midi_velocity(velocity), DEC);
}
void send_pedal(bool down) {
if (down)
Serial.println("SSTE DOWN");
else
Serial.println("SSTE UP");
}
void loop() { void loop() {
int key = 0; int key = 0;
// keys
for (const auto range : ranges) { for (const auto range : ranges) {
select_range(range); select_range(range);
@ -169,9 +195,7 @@ void loop() {
S2[key] = true; S2[key] = true;
auto velocity = 1/static_cast<double>(micros() - S1[key]); auto velocity = 1/static_cast<double>(micros() - S1[key]);
Serial.print(key); send_note(key, velocity);
Serial.print(" ");
Serial.println(midi_velocity(velocity), DEC);
} }
} }
} }
@ -180,4 +204,10 @@ void loop() {
} }
} }
} }
// pedals
if (digitalRead(SSTE) != SSTE_PRESSED) {
SSTE_PRESSED = !SSTE_PRESSED;
send_pedal(SSTE_PRESSED);
}
} }