HY,我有超聲波傳感器測量的距離和沒有馬瑟哪種類型是我的變量「範圍」(uint8_t,uint16_t,32,64)餘總是得到溢流,而且比傳感器從0開始again..Is有辦法,我可以限制「範圍」變量或我必須限制與脈寬更難方式...感謝測距,可變溢出
SENSOR_DDR |= (1<<TRIGGER_PIN);
SENSOR_DDR &= ~(1<<ECHO_PIN) & ~(1<<PB3) & ~(1<<PB2) & ~(1<<PB1) & ~(1<<PB0);
DDRD = DDRD | _BV(4);
PORTD = PORTD | _BV(4);
ENGINE_DDR = 0xff;
ENGINE_PORT = 0;
lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_puts("Something wrong...");
while(1)
{
PORTB |= (1<<PB4); //Send Trigger
_delay_us(10);
PORTB &= ~(1<<PB4); //Send trigger
timer0counter=0;
TCNT0=0; //Clear timer
while(bit_is_clear(PINB,5)); //Wait for rising edge
TCCR0 |= (1<<CS02); //Select prescalar 256
TIMSK |= (1<<TOIE0) | (1<<TOIE2); //Enable timer0 overflow interrupt
lcd_clrscr();
while(bit_is_set(PINB,5) && timer0counter<9) //wait for falling edge of echo
{
_delay_us(5);
}
TCCR0 &= ~(1<<CS02); //Stop timer
TIMSK &= ~(1<<TOIE0);
if(bit_is_set(PINB,5))
{
lcd_puts("No OBSTACLE");
}
else
{
range=(256*timer0counter+TCNT0)*32*0.017; //range conversion
lcd_clrscr();
lcd_puts("Distance:");
lcd_puts(itoa(range,buffer,10));
lcd_puts_P("cm");
}
if(range<15){
...
ISR(TIMER0_OVF_vect)
{
TIMSK &= ~(1<<TOIE0);
TCNT0=0;
timer0counter++;
TIMSK |= (1<<TOIE0);
if(timer0counter>8)
{
TCCR0 &= ~(1<<CS02);
TIMSK &= ~(1<<TOIE0);
}
請更具體的你如何從傳感器獲得的數據。 – Kissiel
現在我添加了一些代碼,我希望它能幫助你,讓你能幫助我:) – Mateo