Ir ao conteúdo
  • Cadastre-se

Ajuda para descobrir erro em programa


Sniperhunter

Posts recomendados

E aí galera... tudo tranquilo?

Esse é o meu primeiro post aqui no fórum:D, mas confesso que já pesquisava e tirava muitas dúvidas há aqui um bom tempo.

Bom, mas vamos ao que interessa: estou controlando um motor de passo pela porta paralela do pc. Meu professor fez um programa em dev-c++ que rodou no notebook dele numa boa. Quando tentei por pra funcionar aqui em casa, o programa não funcionou direito. o meu pc tem o vista instalado e o do professor o xp. Será que pode ser algo relacionado ao windows?

Grato.

Link para o comentário
Compartilhar em outros sites

O codigo usado foi este aqui:


#include <stdio.h> //printf() entre outras.
#include <stdlib.h>
#include <conio.h> //getch().
#include <windows.h> //Necessário para: LoadLibrary(), GetProcAddress() e HINSTANCE.
#include <iostream.h>
#include <ctime>

//Declaração dos ponteiros para função.
typedef short _stdcall (*PtrInp)(short EndPorta);
typedef void _stdcall (*PtrOut)(short EndPorta, short valor);

HINSTANCE hLib; //Instância para a DLL inpout32.dll.
PtrInp inportb; //Instância para a função Imp32().
PtrOut outportb; //Instância para a função Out32().


void delay(float seconds)
{
clock_t current, end;

current = clock();
end = current + CLOCKS_PER_SEC * seconds;

while(current < end)
{
current = clock();
//cout << "\n\n\tCONTANDO => " << (end - current)/1000 << " segundos. ";
//system("cls");
}
}

void movimenta(int steps)
{
while (steps>0)
{
//cout << t << "\n\n";
outportb(0x378, 12);
delay(0.001);
//cout << "\n\nPino 1\n\n";
//system("pause");
outportb(0x378, 6);
delay(0.001);
//cout << "\n\nPino 2\n\n";
//system("pause");
outportb(0x378, 3);
delay(0.001);
//cout << "\n\nPino 3\n\n";
//system("pause");
outportb(0x378, 9);
delay(0.001);
//cout << "\n\nPino 4\n\n";
//system("pause");
//cout << "\n\nPino 5\n\n";
//system("pause");
steps--;
}
}



int main(void)
{


//Carrega a DLL na memória.
hLib = LoadLibrary("inpout32.dll");

if(hLib == NULL) //Verifica se houve erro.
{
printf("Erro. O arquivo inpout32.dll não foi encontrado.\n");
getch();
return -1;
}

//Obtém o endereço da função Inp32 contida na DLL.
inportb = (PtrInp) GetProcAddress(hLib, "Inp32");

if(inportb == NULL) //Verifica se houve erro.
{
printf("Erro. A função Inp32 não foi encontrada.\n");
getch();
return -1;
}

//Obtém o endereço da função Out32 contida na DLL.
outportb = (PtrOut) GetProcAddress(hLib, "Out32");

if(outportb == NULL) //Verifica se houve erro.
{
printf("Erro. A função Out32 não foi encontrada.\n");
getch();
return -1;
}

//-------------------------------------------------------------------------------------------------------------------------
//Uso das funções outportb() e inportb():
unsigned char Valor=128; //Em binário: 10000000****
outportb(0x378, 0);
int steps[4][4]={{0,145,270,420},{140,0,140,280},{280,140,0,140},{420,280,140,0}}; //Numero de passos do motor para mudar de posição.
int NPos=1,Pos=1;

while(! kbhit())
{
cout << "\n\nElevador na Vaga " << Pos << " . ";
cout << "\n\nDigite o Numero da Nova Vaga Desejada: ";
cin >> NPos;
if (NPos==Pos)
{
cout << "\n\nElevador ja se encontra na Vaga Desejada.\n\n";
system("pause");
}
else
{
movimenta(steps[Pos][NPos]);
}
Pos=NPos;
system("cls");
}
outportb(0x378, 0);

FreeLibrary(hLib); //Libera memória alocada pela DLL.
return(0);
}

Grato.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

você tem todas as biblotecas intaladas no seu pc?

sim, inclusive a dll para a utilização dos comandos inportb e outportb.

Qual erro que você recebeu? Aconteceu na compilação ou execução ?

O programa compila normalmente, mas quando forneço o comando para o motor (de passo) iniciar seu movimento ele apenas vibra em vez de executar os passos.

Link para o comentário
Compartilhar em outros sites

o compilador usado foi o mesmo? alguns compiladores podem tratar algumas informações de formas diferentes.

e mais uma coisa que pode parecer boba, mas as vezes a gente esquece, você rodou o programa como administrador do sistema no windows vista? o windows vista bloqueia algumas coisas de acesso a outros processos e mémoria se você não for o administrador do sistema... :P

Link para o comentário
Compartilhar em outros sites

o compilador usado foi o mesmo? alguns compiladores podem tratar algumas informações de formas diferentes.

Sim, é o Dev-C++, mesma versão que o professor usou.

e mais uma coisa que pode parecer boba, mas as vezes a gente esquece, você rodou o programa como administrador do sistema no windows vista? o windows vista bloqueia algumas coisas de acesso a outros processos e mémoria se você não for o administrador do sistema... :P

É eu utilizei esse recurso, ele já salvou a minha pátria trocentas vezes:D.

Deixe-me explicar melhor: Este programa seria para controlar um motor de passo (via porta paralela) para um protótipo de um estacionamento vertical rotatório (aquele mesmo do Tókio Drift:p). Consegui normalizar o movimento do motor ajustando o intervalo entre cada pulso para mais de 10 milisegundos.

Rodou bem, porém houve um outro probema que eu gostaria que vocês me ajudasem a solucionar: o estacionamento teria 4 vagas; por este programa consigo controlar até três vagas com perfeição, mas a quarta vaga sempre fica fora de controle. Se eu não tiver sido claro em algum ponto, peço que me questionem:p.

Acabou que eu apresentei o protótipo na última quinta-feira, porém utilizei um outro programa, já pronto.

E outra coisa: as vezes, quando seleciono uma vaga qualquer, o motor não responde. Esse outro problema pode ser referente à programação?

Link para o comentário
Compartilhar em outros sites

  • 7 anos depois...

 

adicionado 6 minutos depois

boa noite galera .

 

boa noite  Sniperhunter.

 

estou tentando controlar um motor de passo pela porta paralela, e vi o seu algoritmo

tentei  copilar  para ver se conseguia movimentar o motor de passo mas não foi possível

ao tentar copilar no DevC++4.9.9.2,  ele apresenta um erro tenho todas as bibliotecas mas ele não completa o processo de copilação , você poderia informar que versão do DEV, você usou, 

A galera que e mestre no assunto pode ajuda ?

toda ajuda he bem vinda .

 

 

0.png

Link para o comentário
Compartilhar em outros sites

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...