collapse

* Posts Recentes

[Material] Compra de material por papamoscas
[15 de Fevereiro de 2019, 17:05]


Motor com travão por Alfredo Garcia
[13 de Fevereiro de 2019, 22:56]


Porta Arduino Baixando tensao por mauriciosouza100
[08 de Fevereiro de 2019, 13:39]


Fábricas de componentes electrónicos em Portugal? por SerraCabo
[07 de Fevereiro de 2019, 13:54]


Sistema embarcado movido a energia solar por Njay
[06 de Fevereiro de 2019, 15:01]


Tentanto reaver alguns conhecimentos de eletronica por filjoa
[06 de Fevereiro de 2019, 02:58]


bma180 avr por vasco
[03 de Fevereiro de 2019, 21:40]


3D Prusa hephestos da BQ por josecarlos
[30 de Janeiro de 2019, 18:43]


Gerador de lixo radioeléctrico III por SerraCabo
[29 de Janeiro de 2019, 19:40]


Teste 2 por SerraCabo
[29 de Janeiro de 2019, 16:28]

Autor Tópico: Problema com programação em PIC 18f4550.  (Lida 1139 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Tiago_D

  • Mini Robot
  • *
  • Mensagens: 20
Problema com programação em PIC 18f4550.
« em: 23 de Setembro de 2012, 19:46 »
Boas.
Estou a desenvolver um controlador midi, utilizando um PIC 18f4550 e estou a usar um código exemplo da Microchip Solutions, modificando-o para a minha aplicação, só que me deparei com um problema. Não consigo utilizar 2 botões em simultâneo, sei que se trata de um problema de código mas não sei como resolve-lo.


Código: [Seleccione]
void ProcessIO(void)
{
    //static BYTE pitch = 0x3C;
    static BOOL sentNoteOff = TRUE;
    //Blink the LEDs according to the USB device status
    BlinkUSBStatus();

    // User Application USB tasks
    if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;

    if(!USBHandleBusy(USBRxHandle))
    {
        //We have received a MIDI packet from the host, process it and then
        //  prepare to receive the next packet

        //INSERT MIDI PROCESSING CODE HERE

        //Get ready for next packet (this will overwrite the old data)
        USBRxHandle = USBRxOnePacket(MIDI_EP,(BYTE*)&ReceivedDataBuffer,64);
    }
   
    if(sw1==0)
    {
        if(sentNoteOff == TRUE)
        {
        if(msCounter == 0)
         {
                if(!USBHandleBusy(USBTxHandle))
                {
                    //Debounce counter for 100ms
                    msCounter = 5;
                    midiData.Val = 0;   //must set all unused values to 0 so go ahead
                                        //  and set them all to 0

                    midiData.CableNumber = 0;
                    midiData.CodeIndexNumber = MIDI_CIN_NOTE_ON;
                    midiData.DATA_0 = 0x90;         //Note on
                    midiData.DATA_1 = 0x77;         //pitch
                    midiData.DATA_2 = 0x2F;  //velocity

                    USBTxHandle = USBTxOnePacket(MIDI_EP,(BYTE*)&midiData,4);
                    sentNoteOff == FALSE;
                }
            }
        }
    }
    else if(sw2==0)
    {
        if(sentNoteOff == TRUE)
        {
          if(msCounter == 0)
          {
                if(!USBHandleBusy(USBTxHandle))
                {
                    //Debounce counter for 100ms
                    msCounter = 5;
               
                    midiData.Val = 0;   //must set all unused values to 0 so go ahead
                                        //  and set them all to 0

                    midiData.CableNumber = 0;
                    midiData.CodeIndexNumber = MIDI_CIN_NOTE_ON;
                    midiData.DATA_0 = 0x90;         //Note on
                    midiData.DATA_1 = 0x76;         //pitch
                    midiData.DATA_2 = 0x2F;  //velocity

                    USBTxHandle = USBTxOnePacket(MIDI_EP,(BYTE*)&midiData,4);
                   
                    sentNoteOff == FALSE;
                   
               }
            }
        }
    }
 else
    {
        if(msCounter == 0)
        {
            if(sentNoteOff == FALSE)
            {
                if(!USBHandleBusy(USBTxHandle))
                {
                    //Debounce counter for 100ms
                    msCounter = 5;

                    midiData.Val = 0;   //must set all unused values to 0 so go ahead
                                        //  and set them all to 0

                    midiData.CableNumber = 0;
                    midiData.CodeIndexNumber = MIDI_CIN_NOTE_ON;
                    midiData.DATA_0 = 0x90;     //Note off
                    midiData.DATA_1 = 0x80;     //pitch
                    midiData.DATA_2 = 0x00;        //velocity


                    USBTxHandle = USBTxOnePacket(MIDI_EP,(BYTE*)&midiData,4);
                    sentNoteOff == TRUE;
                   
                }
            }
        }
    }

}//end ProcessIO


Se for necessário posso postar mais do código.
O problema está no sentNoteOff que não permite que quando um botão está a ser pressionado outro não pode ser. E sem este sentNoteOff quando é pressionado o botão esta constantemente a enviar sinal midi, o que é indesejado.
Se alguém poder ajudar agradecia.