Ir ao conteúdo

Posts recomendados

Postado

Se alguém puder me ajudar;

to com um atmega8 lendo um sensor ultrasonico e acendendo leds de acordo com a distancia, até ai ok, mas eu queria que acendesse um led quando a distancia estiver aumentando e outro quando estiver se aproximando. Obrigado aí pessoal!

ISR(TIMER1_CAPT_vect)
{
        cpl_bit(TCCR1B,ICES1);    //troca a borda de captura do sinal
        if(!tst_bit(TCCR1B,ICES1))//lê o valor de contagem do T/C1 na borda de subida do sinal
        Inicio_Sinal = ICR1;  //salva a primeira contagem para determinar a largura do pul
    
    
        else
        Distancia = (ICR1 - Inicio_Sinal)/58;
    }

    int main()
    {
    DDRB = 0b11111110;
    DDRD = 0b11101111;
    
    PORTB =0b00000000;
    PORTD =0b00000000;
    
    TCCR1B =  (1<<ICES1) | (1<<CS11);     //T/C1 com prescaler = 8, captura na borda de subida
    TIMSK = 1<<TICIE1;    //habilita a interrupção por captura
    sei();                //habilita a chave de interrupções globais            //habilita interrupções globais
    
    while(1)

    {
        set_bit(PORTB,DISPARO);
        _delay_us(10);
        clr_bit(PORTB,DISPARO);

 

  • Membro VIP
Postado
1 hora atrás, bigles21 disse:

um sensor ultrasonico e acendendo leds de acordo com a distancia, até ai ok

Lendo isso presumo que já tens a função cuja saída é a distância

distancia();

Assim sendo a princípio algumas leituras de tempos em tempos podem te orientar

d1=distancia();
delay(20);
d2=distancia();
delay(20);
d3=distancia();

ao comparar dx's entre si

Postado

@Isadora Ferraz Já tenho a variavel Distancia sim, mas como funcionaria essa tua sugestão? porque sao muitas leituras, de 7 a 2 metros, mais ou menos, entao por exemplo, se a distancia tá em 10cm e passou pra 11 ou 12 ou até de 5 em 5cm. tipo tá em 10cm, depois 10 em 15cm seta um led... kkk isso até me deu uma possível solução... Talvez e possa usar "case"

 

switch (Distancia)
{
   case Distancia tal:
     set_bit(PORTD, PB2);
   break;

   case constante2:
     Instruções;
   break;

   default
     Instruções;
}


 

Postado

@aphawk Até pensei, mas se eu fizer um monte de if definindo uma margem de Distancia X pra acender o LED1 (Distancia aumentando) ou LED2 (Distancia diminuindo) o sistema não entenderá se a distancia está subindo ou descendo...

  • Membro VIP
Postado

Imagine algo minimalista com só duas medidas. Algo como
 

if (d1==d2) ... parado
if (d1<d2) ... indo
if (d1>d2) ... vindo

Idas e vindas da imaginação

 

  • Curtir 1
Postado

@bigles21 ,

 

Oras... guarde as duas ultimas leituras, e sempre compare a atual com elas , você vai saber se está aumentando ou diminuindo ... não vejo onde está o problema ....

 

Paulo

  • Curtir 1
Postado

@aphawk O problema está no nível de programação de cada um, não sou expert, por isso vim pedir ajuda.. Mas obrigado pela sua ajuda, vou ver se consigo com as suas dicas e a Izadora, valeu

Postado

@bigles21 ,

 

No seu primeiro post você colocou um código de interrupção que calcula o tempo de retorno do pulso ( o que daria para calcular a distância), eu havia entendido que esse código era de sua autoria ...

 

Fazer esses IFs é bem mais simples do que escrever esse código postado ....

 

Uma maneira simples é guardar em uma variável o tempo calculado, e quando fizer um novo cálculo, comparar com o

anterior , se o novo tempo for maior que o antigo, a distância será maior e portanto está se distânciando; e vice-versa ...

 

Paulo

  • Curtir 1
  • Membro VIP
Postado
23 minutos atrás, aphawk disse:

guardar em uma variável o tempo calculado, e quando fizer um novo cálculo, comparar com o

anterior , se o novo tempo for maior que o antigo, a distância será maior e portanto está se distânciando; e vice-versa ...

... vulgo ...

Em 06/08/2019 às 15:15, Isadora Ferraz disse:

d1=distancia();
delay(20);
d2=distancia();
delay(20);

 

 

9 horas atrás, Isadora Ferraz disse:

if (d1==d2) return 0;//... parado 
if (d1<d2)  return 1;//... indo 
if (d1>d2)  return 2;//... vindo

 

ok uma ediçãozinha básica, mas...

 

A ideia de se casar sw com hw é tentar fazer o mc olhar o mundo como você veria ou vice versa, tentar você ver o mundo como o mc veria. Minimalisticamente falando, o mc só tem duas (02) tarefas simples: ler sensores e acionar atuadores. Com estas duas ideias simples em mãos (e mente), já pode pensar em dominar o mundo.

 

abç

  • Obrigado 1
  • Membro VIP
Postado
agora, Isadora Ferraz disse:

já pode pensar em dominar o mundo.

 

... mas não sem antes fazer o mc piscar um led!!!

adicionado 2 minutos depois
agora, bigles21 disse:

e sim, desaparecer dele :)

... mas não sem antes deixar-lhe algo de bom!!!

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!