jwilton 0 Denunciar post Postado Fevereiro 19, 2012 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
jwilton 0 Denunciar post Postado Fevereiro 21, 2012 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
_Isis_ 202 Denunciar post Postado Fevereiro 22, 2012 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
jwilton 0 Denunciar post Postado Fevereiro 23, 2012 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
jwilton 0 Denunciar post Postado Fevereiro 25, 2012 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