Controlling the patchs of SpinSemi FV-1 with pic (code included)

Started by brunocbicalho, September 29, 2009, 12:44:17 PM

Previous topic - Next topic

brunocbicalho

Hy there! I´m from Brazil.. I´m trying to learn some pic programming in C.. and my first project i´m trying to make a controller for changing patchs for the fv-1, just like a zoom G2..

Displaying in a 7 segment display, with two footswitchs, 2 relays for bypass (it´s stereo)

So here´s the deal: When you step on UP it goes in order from 1 to 8 and if step on DOWN it goes from 8 to 1, if you step in both of them initiate the bypass mode, showing a b on the display...

I wrote the code alone, so if you know C programming with pic, please, fell free to optimize the code, or give ideas or advices.. I would aprecciate it a lot!
It uses 14 I/O of the pic, but I didn´t choose one.. any ideas?

Here´s the code:


//Entrada
#define   FOOT_U   PIN_B1             //Ativando footswitches
#define   FOOT_D   PIN_B2             //nomes Up e Down de patchs

//Saida
#define   LED1   PIN_A0               //Ativando todos os leds
#define   LED2   PIN_A1               //do display de 7 segmentos
#define   LED3   PIN_A2
#define   LED4   PIN_A3
#define   LED5   PIN_B4
#define   LED6   PIN_B5
#define   LED7   PIN_B6
#define   S1                          //Ativando os 3 switchs
#define   S2                          //do FV-1
#define   S3
#define   RELE   PIN_C0               //Ativando reles de bypass

main()
{
int patch, bypass;
patch =  read_eeprom(1);              //Le valor do ultimo patch na eeprom
bypass = read_eeprom(2);              //Le valor do ultimo estado de bypass na eeprom

   while(true)                        //Loop infinito
   {
      if(input(FOOT_U) || input(FOOT_D))    //Se acionado os dois foots ao mesmo tempo
      {
         delay_ms(300);                     //Debounce de switch
         if(input(FOOT_U) && input(FOOT_D)) //Se acionado os dois foots ao mesmo tempo
         {
            bypass = 1;                     //Ativa o modo bypass
            write_eeprom(2,bypass);         //Grava na eeprom estado de bypass
            delay_ms(40);
         }

         if(input(FOOT_U))            //Se botão de subir patch ainda acionado:
         {
            patch = patch++;          //Aumenta 1 ao valor da variavel, aumentando patch
            if(patch >= 9)            //Se patch é maior do que 8, volta ao patch 1
               patch = 1;
            write_eeprom(1,patch);     //Grava patch atual na eeprom
            delay_ms(40);
         }
         if(input(FOOT_D))            //Se botão de descer patch acionado:
         {
            patch = patch--;          //Decresce 1 ao valor da variavel, diminuindo patch
            if(patch <= 0)            //Se patch é menor do que 1, volta ao patch 8
               patch = 8;
            write_eeprom(1,patch);         //Grava patch atual na eeprom
            delay_ms(40);
         }
      }
      while(bypass == 1)                    //Entra no modo bypass
      {
            output_low(LED1);               //Escreve "b" no display
            output_low(LED2);
            output_high(LED3);
            output_high(LED4);
            output_high(LED5);
            output_high(LED6);
            output_high(LED7);
            output_low(RELE);                    //Configura os dois reles para modo bypass
         if(input(FOOT_U) || input(FOOT_D))       //Se acionado um dos dois footswitchs
         {
            delay_ms(200);                        //Debounce de switch
            if(input(FOOT_U) || input(FOOT_D))    //Se ainda acionado um dos dois footswitchs
               {
                  bypass = 0;                     //Desativa o modo bypass
                  output_high(RELE);               //Configura os dois reles para modo efeito
                  write_eeprom(2,bypass);         //Grava estado na memoria eeprom
                  delay_ms(40);
               }
         }
      }

//Caso para cada patch
      switch(patch)
      {
         case 1:                             //Se esta no patch 1, configura led de 7 segmentos e efeito do FV-1
            output_low(LED1);                //Escreve "1" no display
            output_low(LED4);
            output_low(LED5);
            output_low(LED6);
            output_low(LED7);
            output_high(LED2);
            output_high(LED3);
            ////////////////////             //Configura os switchs do FV-1
            ////////////////////             //
            ////////////////////             //
            break;
         case 2:                             //Se esta no patch 2, configura led de 7 segmentos e efeito do FV-1
            output_low(LED3);                //Escreve "2" no display
            output_low(LED6);
            output_high(LED1);
            output_high(LED2);
            output_high(LED4);
            output_high(LED5);
            output_high(LED7);
            ////////////////////             //Configura os switchs do FV-1
            ////////////////////             //
            ////////////////////             //
            break;
         case 3:                             //Se esta no patch 3, configura led de 7 segmentos e efeito do FV-1
            output_low(LED5);                //Escreve "3" no display
            output_low(LED6);
            output_high(LED1);
            output_high(LED2);
            output_high(LED3);
            output_high(LED4);
            output_high(LED7);
            ////////////////////             //Configura os switchs do FV-1
            ////////////////////             //
            ////////////////////             //
            break;
         case 4:                             //Se esta no patch 4, configura led de 7 segmentos e efeito do FV-1
            output_low(LED1);                //Escreve "4" no display
            output_low(LED4);
            output_low(LED5);
            output_high(LED2);
            output_high(LED3);
            output_high(LED6);
            output_high(LED7);
            ////////////////////             //Configura os switchs do FV-1
            ////////////////////             //
            ////////////////////             //
            break;
         case 5:                             //Se esta no patch 5, configura led de 7 segmentos e efeito do FV-1            output_low(LED2);      //Escreve "5" no display
            output_low(LED5);
            output_high(LED1);
            output_high(LED3);
            output_high(LED4);
            output_high(LED6);
            output_high(LED7);
            ////////////////////             //Configura os switchs do FV-1
            ////////////////////             //
            ////////////////////             //
            break;
         case 6:                             //Se esta no patch 6, configura led de 7 segmentos e efeito do FV-1
            output_low(LED2);                //Escreve "6" no display
            output_high(LED1);
            output_high(LED3);
            output_high(LED4);
            output_high(LED5);
            output_high(LED6);
            output_high(LED7);
            ////////////////////             //Configura os switchs do FV-1
            ////////////////////             //
            ////////////////////             //
            break;
         case 7:                             //Se esta no patch 7, configura led de 7 segmentos e efeito do FV-1
            output_low(LED4);                //Escreve "7" no display
            output_low(LED5);
            output_low(LED6);
            output_low(LED7);
            output_high(LED1);
            output_high(LED2);
            output_high(LED3);
            ////////////////////             //Configura os switchs do FV-1
            ////////////////////             //
            ////////////////////             //
            break;
         case 8:                             //Se esta no patch 8, configura led de 7 segmentos e efeito do FV-1
            output_high(LED1);               //Escreve "8" no display
            output_high(LED2);
            output_high(LED3);
            output_high(LED4);
            output_high(LED5);
            output_high(LED6);
            output_high(LED7);
            ////////////////////             //Configura os switchs do FV-1
            ////////////////////             //
            ////////////////////             //
            break;
         default:
            break;

      }
   }
}