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
}