a stepper motor view as a serial midi device, use an interface such ttymidi to generate a serial to 115200 baudrate midi instrument
Dependencies: MIDI mbed X-NUCLEO-IHM05A1
Revision 34:215d5ee0f434, committed 2019-10-01
- Comitter:
- gidiana
- Date:
- Tue Oct 01 10:42:23 2019 +0000
- Parent:
- 33:c1cefad6d338
- Commit message:
- first
Changed in this revision
diff -r c1cefad6d338 -r 215d5ee0f434 MIDI.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MIDI.lib Tue Oct 01 10:42:23 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/gidiana/code/MIDI/#7791cb1cb0b9
diff -r c1cefad6d338 -r 215d5ee0f434 main.cpp --- a/main.cpp Sun Sep 15 08:47:18 2019 +0000 +++ b/main.cpp Tue Oct 01 10:42:23 2019 +0000 @@ -1,15 +1,17 @@ #include "mbed.h" #include "L6208.h" +#include "pitches.h" +#include "MIDI.h" #define VREFA_PWM_PIN D3 #define VREFB_PWM_PIN D9 -#define BAUDRATE 9600 -#define JOINT 2 + + l6208_init_t init = { - 8000, //Acceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes + 65000, //Acceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes 80, //Acceleration current torque in % (from 0 to 100) - 8000, //Deceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes + 65000, //Deceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes 80, //Deceleration current torque in % (from 0 to 100) 8000, //Running speed in step/s or (1/16)th step/s for microstep modes 80, //Running current torque in % (from 0 to 100) @@ -21,7 +23,8 @@ 100000 //VREFA and VREFB PWM frequency (Hz) }; - +unsigned long motorSpeeds[] = {0, 0, 0, 0, 0}; +int flag=0; // Utility //InterruptIn button(USER_BUTTON); DigitalOut led(LED1); @@ -31,96 +34,31 @@ InterruptIn end1(USER_BUTTON, PullUp); DigitalIn end0(PA_5, PullUp); -Serial serial(PA_2, PA_3); - - -float pose, current_pose; -float speed, current_speed; -void zero() + +MIDI MIDI(PA_2, PA_3); + +void handleNoteOn(byte channel, byte pitch, byte velocity) //MIDI Note ON Command { - printf("zero"); - motor->run(StepperMotor::BWD); - while(!end0){ - } - motor->hard_stop(); - motor->set_home(); - motor->go_to(0); - printf("END0: Pressed\n\rPOSITION: %d\n\r", motor->get_position()); -} - -void motor_error_handler(uint16_t error) -{ - printf("ERROR: Motor Runtime\n\r"); -} - -void end1_int_handler() -{ - // motor->hard_stop(); - - motor->run(StepperMotor::FWD); - - printf("END1: Pressed\n\rPOSITION: %d\n\r", motor->get_position()); + motorSpeeds[channel] = pitchVals[pitch]/4; //set the motor speed to specified pitch + } - -void serialrx() +void handleNoteOff(byte channel, byte pitch, byte velocity) //MIDI Note OFF Command { - - int id, speed; - - - if(serial.readable() ) - { - serial.scanf("%d %d", &id, &speed ); - printf("%d %d\n", id, speed); - if (id==JOINT) - { - led=!led; - current_speed=speed; - } - - - } + motorSpeeds[channel] = 0; //set motor speed to zero + flag=!flag; } - - void fmotor() - { - - - if (current_speed>0) - { - printf("run FWD\n"); - motor->set_max_speed(abs(current_speed*80)); - motor->run(StepperMotor::BWD); - } - else if (current_speed<0) - { - printf("run BWD\n"); - motor->set_max_speed(abs(current_speed*80)); - motor->run(StepperMotor::FWD); - } - - else - { - motor->hard_stop(); - current_pose= motor->get_position(); - motor->go_to(current_pose); - } - - - - - } - - /* Main ----------------------------------------------------------------------*/ int main() { led=1; - serial.baud(BAUDRATE); + + MIDI.begin(MIDI_CHANNEL_OMNI); //listen to all MIDI channels + MIDI.setHandleNoteOn(handleNoteOn); //execute function when note on message is recieved + MIDI.setHandleNoteOff(handleNoteOff); //execute function when note off message is recieved // Motor Initialization motor = new L6208(D2, D8, D7, D4, D5, D6, VREFA_PWM_PIN, VREFB_PWM_PIN); @@ -130,24 +68,27 @@ printf("ERROR: vvMotor Init\n\r"); exit(EXIT_FAILURE); } - - motor->attach_error_handler(&motor_error_handler); - - - // end1.rise(&end1_int_handler); + - printf("DONE: Motor Init\n\r"); - - + printf("DONE: Motor Init\n\r"); printf("Running!\n\r"); - - //zero(); - + while(true) { - serialrx(); - //wait (0.001); - fmotor(); + MIDI.read(); + if(motorSpeeds[0]==0) + motor->hard_stop(); + else + { + + motor->set_max_speed(motorSpeeds[0]); + if (flag==1) + motor->run(StepperMotor::BWD); + else + motor->run(StepperMotor::FWD); + + - } - } \ No newline at end of file + } + } +} \ No newline at end of file
diff -r c1cefad6d338 -r 215d5ee0f434 pitches.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pitches.h Tue Oct 01 10:42:23 2019 +0000 @@ -0,0 +1,132 @@ +const long pitchVals[] = { + 0, //0, C-1 + 0, //1, C#-1 + 0, //2, D-1 + 0, //3, D#-1 + 0, //4, E-1 + 0, //5, F-1 + 0, //6, F#-1 + 0, //7, G-1 + 0, //8, G#-1 + 0, //9, A-1 + 0, //10, A#-1 + 0, //11, B-1 + 0, //12, C0 + 0, //13, C#0 + 0, //14, D0 + 0, //15, D#0 + 0, //16, E0 + 0, //17, F0 + 0, //18, F#0 + 0, //19, G0 + 0, //20, G#0 + 0, //21, A0 + 0, //22, A#0 + 32000, // 23 B0 31 + 30303, // 24 C1 33 + 28571, // 25 CS1 35 + 27027, // 26 D1 37 + 25641, // 27 DS1 39 + 24390, // 28 E1 41 + 22727, // 29 F1 44 + 21739, // 30 FS1 46 + 20408, // 31 G1 49 + 19230, // 32 GS1 52 + 18182, // 33 A1 55 + 17241, // 34 AS1 58 + 16129, // 35 B1 62 + 15385, // 36 C2 65 + 14493, // 37 CS2 69 + 13699, // 38 D2 73 + 12821, // 39 DS2 78 + 12195, // 40 E2 82 + 11494, // 41 F2 87 + 10753, // 42 FS2 93 + 10204, // 43 G2 98 + 9615, // 44 GS2 104 + 9091, // 45 A2 110 + 8547, // 46 AS2 117 + 8130, // 47 B2 123 + 7634, // 48 C3 131 + 7194, // 49 CS3 139 + 6803, // 50 D3 147 + 6410, // 51 DS3 156 + 6061, // 52 E3 165 + 5714, // 53 F3 175 + 5405, // 54 FS3 185 + 5102, // 55 G3 196 + 4808, // 56 GS3 208 + 4545, // 57 A3 220 + 4292, // 58 AS3 233 + 4049, // 59 B3 247 + 3817, // 60 C4 262 + 3610, // 61 CS4 277 + 3401, // 62 D4 294 + 3215, // 63 DS4 311 + 3030, // 64 E4 330 + 2865, // 65 F4 349 + 2703, // 66 FS4 370 + 2551, // 67 G4 392 + 2410, // 68 GS4 415 + 2273, // 69 A4 440 + 2146, // 70 AS4 466 + 2024, // 71 B4 494 + 1912, // 72 C5 523 + 1805, // 73 CS5 554 + 1704, // 74 D5 587 + 1608, // 75 DS5 622 + 1517, // 76 E5 659 + 1433, // 77 F5 698 + 1351, // 78 FS5 740 + 1276, // 79 G5 784 + 1203, // 80 GS5 831 + 1136, // 81 A5 880 + 1073, // 82 AS5 932 + 1012, // 83 B5 988 + 955, // 84 C6 1047 + 902, // 85 CS6 1109 + 851, // 86 D6 1175 + 803, // 87 DS6 1245 + 758, // 88 E6 1319 + 716, // 89 F6 1397 + 676, // 90 FS6 1480 + 638, // 91 G6 1568 + 602, // 92 GS6 1661 + 568, // 93 A6 1760 + 536, // 94 AS6 1865 + 506, // 95 B6 1976 + 478, // 96 C7 2093 + 451, // 97 CS7 2217 + 426, // 98 D7 2349 + 402, // 99 DS7 2489 + 379, // 100 E7 2637 + 358, // 101 F7 2794 + 338, // 102 FS7 2960 + 315, // 103 G7 3136 + 301, // 104 GS7 3322 + 284, // 105 A7 3520 + 268, // 106 AS7 3729 + 253, // 107 B7 3951 + 239, // 108 C8 4186 + 225, // 109 CS8 4435 + 213, // 110 D8 4699 + 201, // 111 DS8 4978 + 0, //112, E8 + 0, //113, F8 + 0, //114, F#8 + 0, //115, G8 + 0, //116, G#8 + 0, //117, A8 + 0, //118, A#8 + 0, //119, B8 + 0, //120, C9 + 0, //121, C#9 + 0, //122, D9 + 0, //123, D#9 + 0, //124, E9 + 0, //125, F9 + 0, //126, F#9 + 0, //127, G9 +}; + +