Can anyone help me debug?

Please check the frequently asked questions before posting to the forum.
Post Reply
Author
Message
acidcool
Posts: 1
Joined: 04 Jun 2010 23:53

Can anyone help me debug?

#1 Post by acidcool » 05 Jun 2010 00:04

Hello everyone I'm new to programming pascal, and I wish someone would help me debug this code

Olá a todos eu sou novo em programação pascal, e gostaria que alguém me ajudasse a debugar esse codigo

Code: Select all

Program CodigoRoboPas;

function le_sensor1 : Char;

function le_sensor2 : Char;

function le_sensor3 : Char;

function ver_parado (s1: Char; s2: Char; s3: Char): Char;

function ver_reto (s1: Char; s2: Char; s3: Char): Char;

function ver_direita (s1: Char; s2: Char; s3: Char): Char;

function ver_esquerda (s1: Char; s2: Char; s3: Char): Char;

function ver_caminho_escolhido (s1: Char; s2: Char; s3: Char): Char;

function caminho_esquerda (s1: Char; s2: Char; s3: Char): Char;

function caminho_direita (s1: Char; s2: Char; s3: Char): Char;

function poe_valor_no_MD(valor: Char): Char;

function poe_valor_no_ME(valor: Char): Char;





procedure leitores;
      var
      s1, s2, s3 : Char;
begin


      TRISC:=$FC;                                    // define os PORTS 6 e 7 como input e os PORTS de 0 a 5 como outputs

      while(1) do
      begin                                       //loop infinito//

            s1:=le_sensor1();                         //lê o sensor 1//

            s2:=le_sensor2();                         //lê o sensor 2//

            s3:=le_sensor3();                         //lê o sensor 3//

            ver_parado(s1,s2,s3);                    //vai para a função para ver se está parado//

       end;

 end;




Char le_sensor1 (Char)
begin

      Char sensor;

      sensor := RC2;                                  //pega o valor que tá no PORTC 0

      result:= sensor;

 end;



Char le_sensor2 (Char)
begin

      Char sensor;

      sensor := RC3;                                  //pega o valor que tá no PORTC 1

      result:= sensor;

 end;



Char le_sensor3 (Char)
begin

      Char sensor;

      sensor := RC4;                                  //pega o valor que tá no PORTC 2

      result:= sensor;

end;



Char ver_parado (Char s1, Char s2, Char s3)
begin



      if(s1 = 0 and s2 = 0 and s3 = 0) then
      begin                    //vê se o carrinho tá fora do caminho, se estiver ele desliga os motores

            poe_valor_no_MD(1);                      // lógica invertida para polarização de referencia dos motores: 0 liga e 1 desliga

            poe_valor_no_ME(1);

       end;

      else

            ver_reto(s1,s2,s3);                      //senão ele vê se está em linha reta

 end;



Char ver_reto (Char s1, Char s2, Char s3)
begin



      if(s1 = 0 and s2 = 1 and s3 = 0) then
      begin                    //vê se está em linha reta e liga os motores

            poe_valor_no_MD(0);

            poe_valor_no_ME(0);

       end;

      else

            ver_direita(s1,s2,s3);                   //senão ele vê se está para a direita

 end;



Char ver_direita (Char s1, Char s2, Char s3)
begin



      if(s1 = 0 and s2 = 0 and s3 = 1) then
      begin                    //vê se está para a direita

            poe_valor_no_MD(1);                      //liga o motor esquerdo

            poe_valor_no_ME(0);

       end;

      else

            ver_esquerda(s1,s2,s3);                  //senão ele vê se está para a esquerda

 end;



Char ver_esquerda (Char s1, Char s2, Char s3)
begin



      if(s1 = 1 and s2 = 0 and s3 = 0) then
      begin                    //vê se está para a esquerda

            poe_valor_no_MD(0);                      //liga o motor direito

            poe_valor_no_ME(1);

       end;

      else

            ver_caminho_escolhido(s1,s2,s3);         //senão ele vê se está na linha de decisão

 end;



Char ver_caminho_escolhido (Char s1, Char s2, Char s3)
begin

      Char b1, b2, b3;

      b1:=RC5;

      b2:=RC6;

      b3:=RC7;

      poe_valor_no_MD (1);                           //desliga os motores

      poe_valor_no_ME (1);

      if(s1 = 1 and s2 = 1 and s3 = 1) then
      begin                    //vê se está na linha de decisão

            if(b1 = 1) then                                 //vê se o botão 1 foi acionado, se foi acionado ele vai para a função esquerda

                  caminho_esquerda(s1,s2,s3);

            if(b2 = 1) then begin                                //senão vê se o botão 2 foi acionado, se foi acionado ele continua com os dois

                  while((s1 <> 0 and s2 <> 0 and s3 <> 0) or (s1=s3 = 0 and s2 = 1))
                  begin

                        poe_valor_no_MD(0);          //motores ligados e anda em linha reta

                        poe_valor_no_ME(0);

                        s1:=le_sensor1();             //lê o sensor 1//

                        s2:=le_sensor2();             //lê o sensor 2//

                        s3:=le_sensor3();             //lê o sensor 3//

                   end;

             end;

            if(b3 = 1) then

                  caminho_direita(s1,s2,s3);         //senão vê se o botão 3 foi acionado, se foi acionado ele vai para a função direita

            else
            begin

                  poe_valor_no_MD(1);                //desliga os motores

                  poe_valor_no_ME(1);

             end;

       end;

 end;



Char caminho_esquerda (Char s1, Char s2, Char s3)
begin

      while(s1 <> 0 or s2 <> 0 or s3 <> 0)
      begin

            s1:=le_sensor1();                         //lê o sensor 1//

            s2:=le_sensor2();                         //lê o sensor 2//

            s3:=le_sensor3();                         //lê o sensor 3//

            if(s1 = 1 and s2 = 1 and s3 = 1) then
            begin              //enquanto o s2 não for 1 e s1 e s3 não forem 0 o carrinho só aciona o motor

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(1);                //direito, para ele virar para a esquerda

             end;

            if(s1 = 0 and s2 = 1 and s3 = 0) then
            begin              //enquanto só s2 for 1 os dois motores ficam ligados

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(0);

             end;

            if(s1 = 0 and s2 = 1 and s3 = 1) then
            begin              //enquanto s2 e s3 forem diferentes de 0 só o motor esquerdo é acionado,

                  poe_valor_no_MD(1);

                  poe_valor_no_ME(0);                //para o carrinho virar para a direita

             end;

            if(s1 = 0 and s2 = 1 and s3 = 0) then
            begin              //enquanto só s2 for 1 os dois motores ficam ligados

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(0);

             end;

       end;

      poe_valor_no_MD (1);

      poe_valor_no_ME (1);

 end;



Char caminho_direita (Char s1, Char s2, Char s3)
begin



      while(s1 <> 0 or s2 <> 0 or s3 <> 0)
      begin

            s1:=le_sensor1();                         //lê o sensor 1//

            s2:=le_sensor2();                         //lê o sensor 2//

            s3:=le_sensor3();                         //lê o sensor 3//

poe_valor_no_MD(0);                      //liga os motores

            poe_valor_no_ME(0);

            if(s1 <> 0 and s2 <> 1 and s3 <> 0) then
            begin              //enquanto o s2 não for 1 e s1 e s3 não forem 0 o carrinho só aciona o motor

                  poe_valor_no_MD(1);

                  poe_valor_no_ME(0);                //esquerdo, para ele virar para a direita

             end;

            if(s1 = 0 and s2 = 1 and s3 = 0) then
            begin              //enquanto só s2 for 1 os dois motores ficam ligados

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(0);

             end;

            if(s1 <> 0 and s2 <> 0 and s3 <> 1) then
            begin              //enquanto s2 e s3 forem diferentes de 0 só o motor direito é acionado,

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(1);                //para o carrinho virar para a esquerda

             end;

            if(s1 = 0 and s2 = 1 and s3 = 0) then
            begin              //enquanto só s2 for 1 os dois motores ficam ligados

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(0);

             end;

       end;

      poe_valor_no_MD (1);

      poe_valor_no_ME (1);                           //desliga os motores

 end;



Char poe_valor_no_MD(Char valor)
begin

      RC0 := valor;                                   //poe no PORTC3 o valor do motor direito para ligar ou desligar

 end;



Char poe_valor_no_ME(Char valor)
begin

      RC1 := valor;                                   //poe no PORTC4 o valor do motor esquerdo para ligar ou desligar

 end;

implementation
end.


This is the original code, only that in c

Esse é o código original mas só que em c...

Code: Select all

#include<pic.h>

#include <stdio.h>


char le_sensor1 (void);

char le_sensor2 (void);

char le_sensor3 (void);

void ver_parado (char s1, char s2, char s3);

void ver_reto (char s1, char s2, char s3);

void ver_direita (char s1, char s2, char s3);

void ver_esquerda (char s1, char s2, char s3);

void ver_caminho_escolhido (char s1, char s2, char s3);

void caminho_esquerda (char s1, char s2, char s3);

void caminho_direita (char s1, char s2, char s3);

void poe_valor_no_MD(char valor);

void poe_valor_no_ME(char valor);





void main (){

      char s1, s2, s3;

      TRISC=0xFC;                                    // define os PORTS 6 e 7 como input e os PORTS de 0 a 5 como outputs

      while(1){                                      //loop infinito//

            s1=le_sensor1();                         //lê o sensor 1//

            s2=le_sensor2();                         //lê o sensor 2//

            s3=le_sensor3();                         //lê o sensor 3//

            ver_parado(s1,s2,s3);                    //vai para a função para ver se está parado//

            }

}





char le_sensor1 (void){

      char sensor;

      sensor = RC2;                                  //pega o valor que tá no PORTC 0

      return sensor;

}



char le_sensor2 (void){

      char sensor;

      sensor = RC3;                                  //pega o valor que tá no PORTC 1

      return sensor;

}



char le_sensor3 (void){

      char sensor;

      sensor = RC4;                                  //pega o valor que tá no PORTC 2

      return sensor;

}



void ver_parado (char s1, char s2, char s3){



      if(s1==0 && s2==0 && s3==0){                   //vê se o carrinho tá fora do caminho, se estiver ele desliga os motores

            poe_valor_no_MD(1);                      // lógica invertida para polarização de referencia dos motores: 0 liga e 1 desliga

            poe_valor_no_ME(1);

      }

      else

            ver_reto(s1,s2,s3);                      //senão ele vê se está em linha reta

}



void ver_reto (char s1, char s2, char s3){



      if(s1==0 && s2==1 && s3==0){                   //vê se está em linha reta e liga os motores

            poe_valor_no_MD(0);

            poe_valor_no_ME(0);

      }

      else

            ver_direita(s1,s2,s3);                   //senão ele vê se está para a direita

}



void ver_direita (char s1, char s2, char s3){



      if(s1==0 && s2==0 && s3==1){                   //vê se está para a direita

            poe_valor_no_MD(1);                      //liga o motor esquerdo

            poe_valor_no_ME(0);

      }

      else

            ver_esquerda(s1,s2,s3);                  //senão ele vê se está para a esquerda

}



void ver_esquerda (char s1, char s2, char s3){



      if(s1==1 && s2==0 && s3==0){                   //vê se está para a esquerda

            poe_valor_no_MD(0);                      //liga o motor direito

            poe_valor_no_ME(1);

      }

      else

            ver_caminho_escolhido(s1,s2,s3);         //senão ele vê se está na linha de decisão

}



void ver_caminho_escolhido (char s1, char s2, char s3){

      char b1, b2, b3;

      b1=RC5;

      b2=RC6;

      b3=RC7;

      poe_valor_no_MD (1);                           //desliga os motores

      poe_valor_no_ME (1);

      if(s1==1 && s2==1 && s3==1){                   //vê se está na linha de decisão

            if(b1==1)                                //vê se o botão 1 foi acionado, se foi acionado ele vai para a função esquerda

                  caminho_esquerda(s1,s2,s3);

            if(b2==1){                               //senão vê se o botão 2 foi acionado, se foi acionado ele continua com os dois

                  while((s1!=0 && s2!=0 && s3!=0) || (s1=s3==0 && s2==1)){

                        poe_valor_no_MD(0);          //motores ligados e anda em linha reta

                        poe_valor_no_ME(0);

                        s1=le_sensor1();             //lê o sensor 1//

                        s2=le_sensor2();             //lê o sensor 2//

                        s3=le_sensor3();             //lê o sensor 3//

                  }

            }

            if(b3==1)

                  caminho_direita(s1,s2,s3);         //senão vê se o botão 3 foi acionado, se foi acionado ele vai para a função direita

            else {

                  poe_valor_no_MD(1);                //desliga os motores

                  poe_valor_no_ME(1);

            }

      }

}



void caminho_esquerda (char s1, char s2, char s3){

      while(s1!=0 || s2!=0 || s3!=0){

            s1=le_sensor1();                         //lê o sensor 1//

            s2=le_sensor2();                         //lê o sensor 2//

            s3=le_sensor3();                         //lê o sensor 3//

            if(s1==1 && s2==1 && s3==1){             //enquanto o s2 não for 1 e s1 e s3 não forem 0 o carrinho só aciona o motor

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(1);                //direito, para ele virar para a esquerda

            }

            if(s1==0 && s2==1 && s3==0){             //enquanto só s2 for 1 os dois motores ficam ligados

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(0);

            }

            if(s1==0 && s2==1 && s3==1){             //enquanto s2 e s3 forem diferentes de 0 só o motor esquerdo é acionado,

                  poe_valor_no_MD(1);

                  poe_valor_no_ME(0);                //para o carrinho virar para a direita

            }

            if(s1==0 && s2==1 && s3==0){             //enquanto só s2 for 1 os dois motores ficam ligados

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(0);

            }

      }

      poe_valor_no_MD (1);

      poe_valor_no_ME (1);

}



void caminho_direita (char s1, char s2, char s3){



      while(s1!=0 || s2!=0 || s3!=0){

            s1=le_sensor1();                         //lê o sensor 1//

            s2=le_sensor2();                         //lê o sensor 2//

            s3=le_sensor3();                         //lê o sensor 3//

poe_valor_no_MD(0);                      //liga os motores

            poe_valor_no_ME(0);

            if(s1!=0 && s2!=1 && s3!=0){             //enquanto o s2 não for 1 e s1 e s3 não forem 0 o carrinho só aciona o motor

                  poe_valor_no_MD(1);

                  poe_valor_no_ME(0);                //esquerdo, para ele virar para a direita

            }

            if(s1==0 && s2==1 && s3==0){             //enquanto só s2 for 1 os dois motores ficam ligados

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(0);

            }

            if(s1!=0 && s2!=0 && s3!=1){             //enquanto s2 e s3 forem diferentes de 0 só o motor direito é acionado,

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(1);                //para o carrinho virar para a esquerda

            }

            if(s1==0 && s2==1 && s3==0){             //enquanto só s2 for 1 os dois motores ficam ligados

                  poe_valor_no_MD(0);

                  poe_valor_no_ME(0);

            }

      }

      poe_valor_no_MD (1);

      poe_valor_no_ME (1);                           //desliga os motores

}



void poe_valor_no_MD(char valor){

      RC0 = valor;                                   //poe no PORTC3 o valor do motor direito para ligar ou desligar

}



void poe_valor_no_ME(char valor){

      RC1 = valor;                                   //poe no PORTC4 o valor do motor esquerdo para ligar ou desligar

}

Post Reply

Return to “mikroPascal FAQ”