Untitled

 avatar
unknown
c_cpp
2 years ago
4.0 kB
3
Indexable
#include "main.h"

// attention la datasheet nous dit : 

#define COMPILE_BLINK                       1 // ok 
#define COMPILE_TEST_USBMIDI                0 // ok 
#define COMPILE_TEST_USBMIDI_EVENTQUEUE     0 // ok 






#if COMPILE_BLINK
    int main()
    {



        while (true) { 

            led = ! led ; 
            ThisThread::sleep_for( BLINKING_RATE );
            
            slider_value = slider.read(); 
            bouton_value = bouton;

            printf("\n slider_value = %f ", slider_value);
            printf("\n bouton_value = %d \n", bouton_value);
            
        }
    }
#endif 








 
#if COMPILE_TEST_USBMIDI
    #include "mbed.h"
    #include "USBMIDI.h"

    USBMIDI midi;

    int main()
    {
        while (1) {
            for (int i = 48; i < 83; i++) { // send some messages!
                led = ! led ;
                midi.write(MIDIMessage::NoteOn(i));
                ThisThread::sleep_for(250ms);
                midi.write(MIDIMessage::NoteOff(i));
                ThisThread::sleep_for(500ms);
            }
        }
    }
#endif 

// a tester pour les callback usb 
// je n'arrive pas a retrouver le bon code pour les DV1... on dirait que la que n'est pas utilisée 
#if COMPILE_TEST_USBMIDI_EVENTQUEUE

    #include "platform/mbed_thread.h"
    #include "USBMIDI.h"

    EventQueue *queue = mbed_event_queue(); // event queue 
    // Blinking rate in milliseconds
    #define BLINKING_RATE_MS 500ms

    // Will use 'pc' for printf
    //Serial pc(SERIAL_TX, SERIAL_RX); 

    // Initialise the digital pin LED1 as an output
    //DigitalOut led1(LED1);
    //DigitalOut led2(LED2);
    //DigitalOut led3(LED3);

    MIDIMessage midimsg;
    USBMIDI *pMidi;

    void onMidiReceived(void);
    void MidiCallback(void);

    //SPI spi1(PD_7, PG_9, PG_11); //SPI(MOSI, MISO, SCLK); -> DAC16-31 ok
    //DigitalOut spi1_nss(PG_10);

    // Postpone the execution MidiCallback from an interrupt handler to a user context.  In a user context
    // functions like 'printf' and spi->write can be used safely.
    void onMidiReceived(void)
    {
        pMidi->attach(NULL); // detach interrupt
        queue->call(MidiCallback);
    }
    

    void MidiCallback(void)
    {
        pMidi->read(&midimsg);
        //led3 = !led3;
        printf("type: %02x\n\r", midimsg.type());
        switch (midimsg.type())
        {
        case MIDIMessage::NoteOnType:
            break;
        case MIDIMessage::NoteOffType:
            break;
        case MIDIMessage::ControlChangeType:
            break;
        case MIDIMessage::PitchWheelType:
            break;
        case MIDIMessage::SysExType:
            printf("data[2]: %02x\n\r", midimsg.data[2]);
            //spi1_nss = 0;
            //spi1.write(0);
            //spi1_nss = 1;
            //led1 = !led1;
            break;
        default:
            break;
        }
        pMidi->attach(onMidiReceived); // reattach interrupt
    }

    
    int main()
    {
        // Initialization for printf
        //pc.baud(115200);
        //fclose(stdout);
        //stdout = pc;
        //fclose(stderr);
        //stderr = pc;

        // Init Midi
        printf("init midi\n\r");
        USBMIDI midi;
        pMidi = &midi;
        printf("midi defined\n\r");

        printf("SystemCoreClock = %d Hz\n", SystemCoreClock);

        pMidi->attach(onMidiReceived); // call back for MIDI messages received
        while (true) {
            //led1 = !led1;
            //thread_sleep_for(BLINKING_RATE_MS);

            for (int i = 48; i < 83; i++) { // send some messages!
                led = ! led ;
                midi.write(MIDIMessage::NoteOn(i));
                ThisThread::sleep_for(250ms);
                midi.write(MIDIMessage::NoteOff(i));
                ThisThread::sleep_for(500ms);
            }
        }
    }
#endif 


Editor is loading...