int main() { int distance_inches=0; lcd_init(0); pause(100); lcd_clear(); while(1) { pause(30); lcd_clear(); distance_inches=ping_inches(8); if (distance_inches < 10) { lcd_print_number(distance_inches); lcd_write_char(':'); lcd_write_char('('); pause(100); drive_speed(27,-27); lcd_clear(); } else drive_speed(0,0); } }
int main(void) { DDRB = 0x00; // all PBn = input DDRC = 0x00; // all PCn = input DDRD = 0x00; // all PDn = input PORTB = 0xff; PORTC = 0; PORTD = 0; // init lcd buffer phase = 0; // initialize adc ADMUX = 0b11000100; // Vref=1.1V, right-aligned, ADC4 input ADCSRB = 0x06; // auto trigger by timer1 overflow ADCSRA = 0b10111000; // adc, auto-trigger by Timer0 ovf, interrupt enabled, prescale = 1/2 // initialize timer1 TCCR1A = 0b00000000; // no oc-out, normal mode TCCR1B = 3; // clk = 8/64MHz (overflow every 0.52sec) TIMSK1 = 0x00; // no interrupts TCNT1 = 0; // initialize timer0 TCNT0 = 0; /* タイマ0の初期値設定 */ ticker = 0; //TCCR0B = 2; // 2: 1/8 prescaling, CKDIV8 on, every 2048uS(2mS) TCCR0B = 3; // 3: 1/64 prescaling, CKDIV8 off, every 2048uS(2mS) TIMSK0 = _BV(TOIE0); /* タイマ0オーバーフロー割り込みの許可*/ sei(); /* 割り込みの許可*/ for (;;){ // display voltage value to lcd uint16_t i; i = (analog_in * 1100l) / 1024; lcd_print_number(1, i % 10); i /= 10; lcd_print_number(4, i % 10); i /= 10; lcd_print_number(7, i % 10); i /= 10; lcd_print_number(10, i % 10); } }