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);
    }
}
Пример #2
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);
    }
}