Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jwilton

Contador de voltas

Recommended Posts

Olá pessoal.

 

Preciso criar em C um contador de voltas que funciona da seguinte maneira:

 

Estou recebendo dados de uma bussóla cuja a leitura vai de 0 graus até 359,9 graus. Esta bússola será utilizada em um barco para controlar seu posicionamento.

O problema é o seguinte: imaginemos que o barco esta girando em sentindo crecente de angulos 350, 355, 356... quando ele chegar em 359,9 graus o proximo valor será zero e o sitema de controle ficará louco pois ocorrerá uma variação instantânea de 359,9 para 0 graus. logos os moteores mudariam o sentido de rotação bruscamente.

sendo assim gostaria de implementar um programa que quando chegasse em 359,9, ao inves de ir para zero continuasse crescendo, 360, 370, 380...

 

Os dados vindos da bússola estão armazenados numa variável m

 

Será que alguem sabe como me ajudar?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o seguinte trecho de programa para contar as voltas:

 

int m1=0, volta=0;

 

if((m - m1)>=330 && m1 > m) // m é o valor da bússola

volta++;

else

if((m - m1)>=330 && m1 < m)

volta--;

m1=m + 359 * volta; // m1 ficaria com o valor anterior enquanto m é valor atual

printf("%d\n",m1);

 

Não tem nada resolvido!

 

este trecho não funcinona para alguns casos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu p/ entender esse código. O que é 330? Por quê 330?

 

#include <stdio.h>

int calcular_voltas(int angulo){
 int qt_voltas = angulo / 360;
 return qt_voltas;
}


int main() {
 unsigned int voltas = 0;
 int angulo_leitura = 0;
 int angulo_final = 0;
 unsigned int total_voltas = 0;

 while(1) {
printf("Digite um angulo: ");
scanf("%d", &angulo_leitura);
voltas = calcular_voltas(angulo_leitura + angulo_final);

angulo_final += angulo_leitura - (360 * voltas);
total_voltas += voltas;
printf("Voltas: %d\n", voltas);
printf("Total de voltas: %d\n", total_voltas);
printf("Novo angulo do barco: %d\n", angulo_final);
 }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Isis.

 

Primeiramente obrigado pela ajuda. Vou dar uma analisada no seu programa.

 

É,realmente não ficou muito claro o trecho que escrevi.Vou tentar explicá-lo.

 

Eu recebo ângulos de uma bússola que vai de 0 a 360 graus e armazeno em uma variável m. imaginemos que eu vá girando esta bússola em sentido crescente 0, 10, 20,...360 graus. Quando o valor chega em 360 graus ela volta a zero e continua crescendo.

A minha ideia foi fazer um método de comparação dos dados da bussola num instante atual (variável m) com um instante passado (variável m1). quando a bússola vai de 360 graus para zero, há uma variação de 360 graus então eu sei que deu uma volta completa. No meu programa ao invez de eu assumeir que uma volta foi dada quando se variou 360 graus, eu considerei uma variação de 330 graus.

O mesmo terei que fazer quando se variar de 0 para 360 graus porém neste caso trabalharei com numeros negativos.

 

Espero que tenha ficado mais claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Isis.

 

Testei seu programa e realmente ele conta o número de voltas porém o programa ainda não é o que estou precisando.

 

Seu programa pede para digitar um ângulo. Eu digito o ângulo e ele me mostra as saídas. Em seguida, eu digito um segundo ângulo e ele soma com o primeiro o que não é interessante para mim. Pois a bússola mostra os valores continuamente. Imagine que eu queira iniciar com 350 graus (eu digito 350 graus) dai o programa mostra as saídas. Em seguida houve um deslocamente da bússola para 355 graus (eu digito 355 graus) , uma variação de 5 graus. Ou seja, seu programa somaria os 350 graus anterior com mais os 355 graus e diria que uma volta foi dada o que na verdade nao foi.

 

Outro problema é quando a bússola gira em sentido horário, ou seja, indo de 0 para 360 graus. eu gostaria que os numeros fossem negativos:

 

Resumindo, o ideal é que funcinasse assim:

 

sentido horário partindo do zero: 0, -5, -10, -20, ..., -360, -370, -380, -390, -400...

 

 

e quando eu girasse em sentido anti-horario os valores fossem voltando:

 

sentido anti-horário: -380,..., -370, -360,..., -10, -5, 0, 10,...,200,...,330, 340, 350, 360, 370, 380...

 

 

Desculpem estar perturbando mas é que já tentei tantas ideias e nenhuma funcionou até agora.

 

Espero que vocês possam me ajudar.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.