cfredisded
Active member
PROBLEM SOLVED:
Turns out it was this line of code:
Hey guys... again...
I'm currently working on a project that will be a numbered keypad that sends out midi program changes. It will work like this:Hold a button down, then type in the program change number, then let go of held button, then each time button is short pressed send out the program change. I cant get the midi out put working. I have the jack wired as described here: https://www.pjrc.com/teensy/td_libs_MIDI.html. Here's the code I'm working with:
Basically after longpressing then typing in the number when i go to short press and send the midi program change nothing happens to the keyboard (late 80s casio) I'm sending midi to. I'm not seeing anything on the osciliscope besides a constant peak every 560hz or so on pin 1.
Turns out it was this line of code:
Code:
pinMode(1, OUTPUT); //midi output pin
Hey guys... again...
I'm currently working on a project that will be a numbered keypad that sends out midi program changes. It will work like this:Hold a button down, then type in the program change number, then let go of held button, then each time button is short pressed send out the program change. I cant get the midi out put working. I have the jack wired as described here: https://www.pjrc.com/teensy/td_libs_MIDI.html. Here's the code I'm working with:
Code:
// include the library code:
#include <LiquidCrystal.h>
#include <Keypad.h>
#include <OneButton.h>
#include <MIDI.h>
//#include <midi_Defs.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, DB4 = 10, DB5 = 9, DB6 = 8, DB7 = 7;
LiquidCrystal lcd(rs, en, DB4, DB5, DB6, DB7);
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
};
byte rowPins[ROWS] = {16, 17, 18, 19}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {13, 14, 15}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Setup a new OneButton on pin A6.
OneButton button1(A6, true);
// Setup a new OneButton on pin A7.
OneButton button2(A7, true);
char prognum1;
char prognum2;
char prognum3;
int midiprogrom1;
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
// Print a message to the LCD.
lcd.print("hell yeah, world!");
MIDI.begin(1);
pinMode(1, OUTPUT); //midi output pin
//pinMode(1, OUTPUT);
//MIDI.begin(1);
// link the button 1 functions.
button1.attachClick(click1);
button1.attachDuringLongPress(longPress1);
button1.attachLongPressStop(longPressStop1);
// link the button 2 functions.
button2.attachClick(click2);
button2.attachDuringLongPress(longPress2);
button2.attachLongPressStop(longPressStop2);
Serial.begin(31250);
}
void loop() {
// keep watching the push buttons:
button1.tick();
button2.tick();
// You can implement other code in here or just wait a while
delay(10);
}
// This function will be called when the button1 was pressed 1 time (and no 2. button press followed).
void click1() {
Serial.println("midi program 1 button 1 sent");
MIDI.sendProgramChange(midiprogrom1,1);
} // click1
// This function will be called often, while the button1 is pressed for a long time.
void longPress1() {
Serial.println("Waiting for key1");
prognum1 = keypad.waitForKey();
lcd.setCursor(1, 3);
lcd.print(prognum1);
Serial.println(prognum1);
Serial.println("Waiting for key2");
prognum2 = keypad.waitForKey();
lcd.setCursor(2, 3);
lcd.print(prognum2);
Serial.println(prognum2);
Serial.println("Waiting for key3");
prognum3 = keypad.waitForKey();
lcd.setCursor(3, 3);
lcd.print(prognum3);
Serial.println(prognum3);
midiprogrom1= 100*(prognum1- '0') + 10*(prognum2- '0') + prognum3 - '0';
Serial.println(midiprogrom1);
} // longPress1
// longPressStart1
// This function will be called once, when the button1 is released after beeing pressed for a long time.
void longPressStop1() {
Serial.println("Button 1 longPress stop");
Serial.println("midi program number =");
Serial.println(midiprogrom1);
} // longPressStop1
// ... and the same for button 2:
void click2() {
Serial.println("Button 2 click.");
} // click2
// This function will be called often, while the button1 is pressed for a long time.
void longPress2() {
Serial.println("Button 1 longPress...");
} // longPress1
void longPressStop2() {
Serial.println("Button 2 longPress stop");
} // longPressStop2
Basically after longpressing then typing in the number when i go to short press and send the midi program change nothing happens to the keyboard (late 80s casio) I'm sending midi to. I'm not seeing anything on the osciliscope besides a constant peak every 560hz or so on pin 1.
Last edited: