Ir ao conteúdo

Posts recomendados

Postado

Pessoal boa noite.

É o seguinte, achei um projeto interessante de um elevador na internet e o autor disponibilizou a sua programação. Estou tentando compilar no programa Mikroc pro for pic mas ele está dando diversos erros, se alguém poder me ajudar agradeço muito!!!..

a seguir o código e os erros anexados na imagem.

#include "Elevador.h"
#include <lcd.c>


#define MAX_PASSO 3 // 0-3 (Total de 4 passos)

//Variaveis Globais
char Passos[4]={8,4,2,1}; //Full Step 1
int index=0;//indice para matriz de passos
int TempoPasso=75;//Tempo de cada passo
int viAndar = 0;
int vaPinosPassado[7];
static int viContador;
int viSegundos;
int viPino5;
int viPino4;
int viPino3;

#int_timer0
//Essa função conta até 125 formando 1 segundo
void ControleTimer(){


    //Se tiver no terreo ou 1 andar e for chamado no 2 andar
  if(input(PIN_A5) == 1){

   viPino5 = 1;
   output_high(pin_c7);//2 Andar

  }

   //Se tiver no terreo ou 2 andar e for chamado no 1 andar

   if(input(PIN_A4) == 1){

       viPino4 = 1;
       output_high(pin_c6);//1 Andar

   }

   //Se tiver no 1 andar ou 2 andar e for chamado no terreo
   if(input(PIN_A3) == 1){

      viPino3 = 1;
      output_high(pin_c5);//Terreo

   }


   set_timer0(131-get_timer0());
   viContador++;

}


//Função que controla o display de 7 segmentos
int ControlaDisplay(int vaPinos[]){

   output_bit(pin_c0,vaPinos[0]);
   output_bit(pin_c1,vaPinos[1]);
   output_bit(pin_c2,vaPinos[2]);
   output_bit(pin_c3,vaPinos[3]);
   output_bit(pin_e2,vaPinos[4]);
   output_bit(pin_e1,vaPinos[5]);
   output_bit(pin_e0,vaPinos[6]);

   return 0;
}

//Função Responsavel de girar o motor em sentido horario ou anti-horario
int MovimentaMotor(int nibble, int viSentido){


      if (viSentido == 0){

          //Testa um bit determinado da variavel passada, onde nibble é a
          //variavel passada e o outro algarismo é o bit testado
          output_bit(pin_b3,bit_test(nibble,0));
          output_bit(pin_b2,bit_test(nibble,1));
          output_bit(pin_b1,bit_test(nibble,2));
          output_bit(pin_b0,bit_test(nibble,3));
          return 0;

      }else{

          output_bit(pin_b3,bit_test(nibble,3));
          output_bit(pin_b2,bit_test(nibble,2));
          output_bit(pin_b1,bit_test(nibble,1));
          output_bit(pin_b0,bit_test(nibble,0));
          return 0;
      }

}//FIM FUNÇÃO MOVIMENTA MOTOR

//Função que faz Girar o motor e modificar o display de 7 segmentos quando passa no 1 andar
int MovimentaElevador(int viQtdPassos, int viSentidoAndar, int viAndarSentido, int viMostraPasso ){

   int viControle = 0;
   while(viControle <= viQtdPassos){


         if ((viAndarSentido == 1) & (viControle == viMostraPasso)){


            vaPinosPassado[0] = 0;
            vaPinosPassado[1] = 1;
            vaPinosPassado[2] = 1;
            vaPinosPassado[3] = 0;
            vaPinosPassado[4] = 0;
            vaPinosPassado[5] = 0;
            vaPinosPassado[6] = 0;
            ControlaDisplay(vaPinosPassado);


         }

          if ((viAndarSentido == 2) & (viControle == viMostraPasso)){


            vaPinosPassado[0] = 0;
            vaPinosPassado[1] = 1;
            vaPinosPassado[2] = 1;
            vaPinosPassado[3] = 0;
            vaPinosPassado[4] = 0;
            vaPinosPassado[5] = 0;
            vaPinosPassado[6] = 0;
            ControlaDisplay(vaPinosPassado);


         }


         delay_ms(TempoPasso); // aguarda um tempo entre cada passo
         MovimentaMotor(Passos[index], viSentidoAndar);

               if(index >= MAX_PASSO){//Controla os passos (indice da matriz)
                   index=0;
               }else{
                   index++;//incrementa para proximo passo
                   viControle++; //Incrementa os passos
               }
   }//FIM WHILE

   return 0;

}//FIM MOVIMENTA ELEVADOR


int vFuncAndar_T(){


   output_low(pin_c5);//Não pode ser feito chamada no terreo
   viPino3 = 0;

   lcd_putc("\f -> Terreo");
   lcd_gotoxy(1,2);
   lcd_putc(" Engenharia");
   vaPinosPassado[0] = 1;
   vaPinosPassado[1] = 1;
   vaPinosPassado[2] = 1;
   vaPinosPassado[3] = 1;
   vaPinosPassado[4] = 1;
   vaPinosPassado[5] = 1;
   vaPinosPassado[6] = 0;
   ControlaDisplay(vaPinosPassado);


   if (viPino4 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         delay_ms(2000);
         //move motor para andar 1
         MovimentaElevador(82,0,0,0);
         viAndar = 1;
         viPino4 = 0;
         output_low(pin_c6);
         return 0;

      }

      if (viPino5 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Comercial");
         delay_ms(2000);
         //move motor para andar Comercial
         //Quando chamar no Comercial passa o valor 1 viAndarSentido e o valor 82 para viQtdPassos
         MovimentaElevador(168,0,1,82);
         viAndar = 2;
         viPino5 = 0;
         output_low(pin_c7);
         return 0;

      }


   while(viAndar == 0){

      output_low(pin_c5);//Não pode ser feito chamada no terreo
      viPino3 = 0;

        if (viPino4 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         delay_ms(2000);
         //move motor para andar 1
         MovimentaElevador(82,0,0,0);
         viAndar = 1;
         viPino4 = 0;
         output_low(pin_c6);
         return 0;

      }

      if (viPino5 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Comercial");
         delay_ms(2000);
         //move motor para andar Comercial
         MovimentaElevador(168,0,1,82);
         viAndar = 2;
         viPino5 = 0;
         output_low(pin_c7);
         return 0;

      }

      //Se desligar o sistema retorna para o MAIN()
      if(input(PIN_B4) == 0){

         return 0;

      }

      if ((input(PIN_A1) == 1) & (input(PIN_A0) == 0)){

         lcd_putc("\f Subindo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         //move motor para andar 1
         MovimentaElevador(82,0,0,0);
         viAndar = 1;
         return 0;

      }

      if ((input(PIN_A1) == 0) & (input(PIN_A0) == 1)){

         lcd_putc("\f Subindo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Comercial");
         //move motor para andar 2
         MovimentaElevador(168,0,1,82);
         viAndar = 2;
         return 0;

      }

      if ((input(PIN_A1) == 1) & (input(PIN_A0) == 1)){

         lcd_putc("\f Subindo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         //move o motor para o andar 1
         MovimentaElevador(82,0,0,0);
         viAndar = 1;
         return 0;
      }

      if (input(PIN_A4) == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         //move o motor para o andar 1
         MovimentaElevador(82,0,0,0);
         viAndar = 1;
         viPino4 = 0;
         return 0;

      }

      if (input(PIN_A5) == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Comercial");
         //move o motor para o andar 2
         MovimentaElevador(168,0,1,82);
         viAndar = 2;
         viPino5 = 0;
         return 0;

      }


   }//FIM WHILE

}//FIM FUNÇÃO vFuncAndar_T


int vFuncAndar_1(){

   output_low(pin_c6);//Não pode ser feito chamada no 1 andar
   viPino4 = 0;

   viSegundos = 0;
   lcd_putc("\f -> 1 Andar");
   lcd_gotoxy(1,2);
   printf(lcd_putc, " R.H.");
   vaPinosPassado[0] = 0;
   vaPinosPassado[1] = 1;
   vaPinosPassado[2] = 1;
   vaPinosPassado[3] = 0;
   vaPinosPassado[4] = 0;
   vaPinosPassado[5] = 0;
   vaPinosPassado[6] = 0;
   ControlaDisplay(vaPinosPassado);


   if (viPino3 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         delay_ms(2000);
         //move motor para o terreo
         MovimentaElevador(82,1,0,0);
         viAndar = 0;
         viPino3 = 0;
         output_low(pin_c5);
         return 0;

      }

      if (viPino5 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Comercial");
         delay_ms(2000);
         //move motor para andar terreo
         MovimentaElevador(85,0,0,0);
         viAndar = 2;
         viPino5 = 0;
         output_low(pin_c7);
         return 0;

      }


   while(viAndar == 1){

    output_low(pin_c6);//Não pode ser feito chamada no 1 andar
    viPino4 = 0;

      if (viPino3 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         delay_ms(2000);
         //move motor para o terreo
         MovimentaElevador(82,1,0,0);
         viAndar = 0;
         viPino3 = 0;
         output_low(pin_c5);
         return 0;

      }

      if (viPino5 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Comercial");
         delay_ms(2000);
         //move motor para andar terreo
         MovimentaElevador(85,0,0,0);
         viAndar = 2;
         viPino5 = 0;
         output_low(pin_c7);
         return 0;

      }

    //Mostra contador de segundos
    if(viContador == 125){
      viSegundos++;
      viContador = 0;
      lcd_gotoxy(1,2);
      printf(lcd_putc, " R.H. -> %i",viSegundos);
    }

      //Se desligar o sistema retorna para o MAIN()
      if(input(PIN_B4) == 0){

         return 0;

      }


      if ((input(PIN_A2) == 1) & (input(PIN_A0) == 0)){

         lcd_putc("\f Descendo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         //move motor para andar Terreo
         MovimentaElevador(82,1,0,0);
         viAndar = 0;
         return 0;

      }

      if ((input(PIN_A2) == 0) & (input(PIN_A0) == 1)){

         lcd_putc("\f Subindo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Comercial");
         //move motor para andar 2
         MovimentaElevador(85,0,0,0);
         viAndar = 2;
         return 0;

      }

      if ((input(PIN_A2) == 1) & (input(PIN_A0) == 1)){

         lcd_putc("\f Descendo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         //move o motor para o andar Terreo
         MovimentaElevador(82,1,0,0);
         viAndar = 0;
         return 0;
      }

      if (input(PIN_A3) == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         //move o motor para o andar terreo
         MovimentaElevador(82,1,0,0);
         viAndar = 0;
         viPino3 = 0;
         return 0;

      }

      if (input(PIN_A5) == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Comercial");
         //move o motor para o andar 2
         MovimentaElevador(85,0,0,0);
         viAndar = 2;
         viPino5 = 0;
         return 0;

      }


      //viTempoControle = viTempoControle + 1;

      if(viSegundos == 30){

          lcd_putc("\f Descendo...");
          lcd_gotoxy(1,2);
          lcd_putc("Tempo Esgotado");
          MovimentaElevador(82,1,0,0);
          viAndar = 0;
          return 0;
      }


   }//FIM WHILE

}//FIM FUNÇÃO vFuncAndar_1


int vFuncAndar_2(){

   output_low(pin_c7);//Não pode ser feito chamada no 2 andar
   viPino5 = 0;

   viSegundos = 0;
   lcd_putc("\f -> 2 Andar");
   lcd_gotoxy(1,2);
   printf(lcd_putc, " Comercial");
   vaPinosPassado[0] = 1;
   vaPinosPassado[1] = 1;
   vaPinosPassado[2] = 0;
   vaPinosPassado[3] = 1;
   vaPinosPassado[4] = 1;
   vaPinosPassado[5] = 0;
   vaPinosPassado[6] = 1;
   ControlaDisplay(vaPinosPassado);

    if (viPino4 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         delay_ms(2000);
         //move motor para andar 1
         MovimentaElevador(83,1,0,0);
         viAndar = 1;
         viPino4 = 0;
         output_low(pin_c6);
         return 0;

      }

      if (viPino3 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         delay_ms(2000);
         //move motor para andar terreo
         //Quando chamar no Terreo passa o valor 2 viAndarSentido e o valor 83 para viQtdPassos
         MovimentaElevador(166,1,2,83);
         viAndar = 0;
         viPino3 = 0;
         output_low(pin_c5);
         return 0;

      }

   while(viAndar == 2){

    output_low(pin_c7);//Não pode ser feito chamada no 2 andar
    viPino5 = 0;

    if (viPino4 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         delay_ms(2000);
         //move motor para andar 1
         MovimentaElevador(83,1,0,0);
         viAndar = 1;
         viPino4 = 0;
         output_low(pin_c6);
         return 0;

      }

      if (viPino3 == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         delay_ms(2000);
         //move motor para andar terreo
         MovimentaElevador(166,1,2,83);
         viAndar = 0;
         viPino3 = 0;
         output_low(pin_c5);
         return 0;

      }

     //Mostra contador de segundos
    if(viContador == 125){
      viSegundos++;
      viContador = 0;
      lcd_gotoxy(1,2);
      printf(lcd_putc, " Comercial -> %i",viSegundos);
    }

      //Se desligar o sistema retorna para o MAIN()
      if(input(PIN_B4) == 0){

         return 0;

      }

      if ((input(PIN_A1) == 1) & (input(PIN_A2) == 0)){

         lcd_putc("\f Descendo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         //move motor para andar 1
         MovimentaElevador(83,1,0,0);
         viAndar = 1;
         return 0;

      }

      if ((input(PIN_A1) == 0) & (input(PIN_A2) == 1)){

         lcd_putc("\f Descendo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         //move motor para andar terreo
         MovimentaElevador(166,1,2,83);
         viAndar = 0;
         return 0;

      }


      if ((input(PIN_A1) == 1) & (input(PIN_A2) == 1)){

         lcd_putc("\f Descendo para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         //move o motor para o andar 1
         MovimentaElevador(84,1,0,0);
         viAndar = 1;
         return 0;
      }

      if (input(PIN_A4) == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" R.H.");
         //move o motor para o andar 1
         MovimentaElevador(84,1,0,0);
         viAndar = 1;
         viPino4 = 0;
         return 0;

      }

      if (input(PIN_A3) == 1){

         lcd_putc("\f Chamada para...");
         lcd_gotoxy(1,2);
         lcd_putc(" Engenharia");
         //move o motor para o andar terreo
         MovimentaElevador(167,1,2,83);
         viAndar = 0;
         viPino3 = 0;
         return 0;

      }

       //viTempoControle = viTempoControle + 1;

      if(viSegundos == 30){

          lcd_putc("\f Descendo...");
          lcd_gotoxy(1,2);
          lcd_putc("Tempo Esgotado");
          MovimentaElevador(167,1,2,83);
          viAndar = 0;
          return 0;
      }


   }//FIM WHILE

}//FIM FUNÇÃO vFuncAndar_2


//Programa Principal
void main(){

   //------- Codigo gerado pelo Compilador
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   //Configura timer0 para clock interno e prescaler dividido por 64
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
   set_timer0(131);//inicia o timer 0 em 131
   enable_interrupts(global | int_timer0);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   //--------------------------------------

   //Definindo as porta do MCU
   set_tris_b(0b00010000);//Coloca o pino RB4 como entrada e os outros pino RB como saida
   set_tris_a(0b11111111);//Coloca todos os pino RA como entrada
   set_tris_e(0b00000000);//Coloca todos os pino RE como Saida
   set_tris_c(0b00000000);//Coloca todos os pinos RC como saida


   //Definido estado dos pinos
   output_b(0b00000000);//todos os pinos de saida da porta b desligados
   //output_e(0b00000000);
   //output_c(0b00000000);
   //output_low(pin_b5);//Deixa desligado o Backlite do LCD

   //Iniciliaza o LCD
   lcd_init();
   vaPinosPassado[0] = 0;
   vaPinosPassado[1] = 0;
   vaPinosPassado[2] = 0;
   vaPinosPassado[3] = 0;
   vaPinosPassado[4] = 0;
   vaPinosPassado[5] = 0;
   vaPinosPassado[6] = 0;
   ControlaDisplay(vaPinosPassado);

   //Loop infinito do Programa
   while(true){

      if (input(PIN_B4) == 1){//Sistema ligado

         //output_high(PIN_B5);//Liga o BackLith do LCD

         if (viAndar == 0){

            vFuncAndar_T();

         }

         if (viAndar == 1){

            vFuncAndar_1();

         }

         if (viAndar == 2){

            vFuncAndar_2();

         }

     }else{
            //Caso o pino de ativação do sistema estive desligado inicializa/desliga o sistema

            vaPinosPassado[0] = 0;
            vaPinosPassado[1] = 0;
            vaPinosPassado[2] = 0;
            vaPinosPassado[3] = 0;
            vaPinosPassado[4] = 0;
            vaPinosPassado[5] = 0;
            vaPinosPassado[6] = 0;
            ControlaDisplay(vaPinosPassado);


          switch(viAndar){

            case 0:
                   lcd_putc("\f ");//Apaga se tiver alguma coisa escrita no LCD
                   output_low(pin_c7);
                   output_low(pin_c6);
                   output_low(pin_c5);
                   viPino3 = 0;
                   viPino4 = 0;
                   viPino5 = 0;
                   break;

            case 1:
                   lcd_putc("\f Desligando...");
                   MovimentaElevador(82,1,0,0);
                   lcd_putc("\f");//Apaga se tiver alguma coisa escrita no LCD
                   viAndar = 0;
                   output_low(pin_c7);
                   output_low(pin_c6);
                   output_low(pin_c5);
                   viPino3 = 0;
                   viPino4 = 0;
                   viPino5 = 0;
                   break;

            case 2:
                   lcd_putc("\f Desligando...");
                   MovimentaElevador(167,1,0,0);
                   lcd_putc("\f");//Apaga se tiver alguma coisa escrita no LCD
                   viAndar = 0;
                   output_low(pin_c7);
                   output_low(pin_c6);
                   output_low(pin_c5);
                   viPino3 = 0;
                   viPino4 = 0;
                   viPino5 = 0;
                   break;

         }//SWITCH


      }//FIM ELSE PIN_B4



   }//FIM WHILE PRINCIPAL



}//FIM Função MAIN

 

 

 

  • Membro VIP
Postado

Amigo, o mikroc opera quase como um compilador de verdade. Portanto ele acessa os registros/periféricos/pinos/configurações/etc do mc de forma diferente da do seu fonte. Queira por gentileza dar uma olhadela no help dele e veja alguns exemplos. Também sugiro que faça primeiramente um hello world pisca led com ele. É facim

 

em tempo... Este é um dos problemas da geração arduino. Acha que .... bom.. esquece...

 

abç

Postado

@Caue Ferraresi

 

   Amigo esse código fonte esta escrito em C, mas do CCS e não do MikroC....  Não vai compilar nunca, a não ser que você reescreva ele do zero alterando as nomenclaturas necessárias ou  baixe o CCS e de um Ctrl+c Ctrl+v e tente compilar.

 

 

  Espero ter ajudado, Grato Luiz Gustavo.

Postado

Pois é pessoal, como o amigo de cima disse eu baixei CCS e ele rodou normalmente. Pessoal é o seguinte e se eu quiser compilar com outro Pic da mesma família é possivel?

 

 

Obg pelas dicas galera.

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...