Der fehlerbehaftete Code entspricht noch dem aus dem Anhang "Problem.zip", außer dass buffer[4] statt buffer[3] deklariert wurde.
Der fehlerfreie Code sieht so aus (FOR-Schleife aufgelöst):
Code:
// select display
lcd_select(0);
// check if ultrasonic sensor is busy
busy_US[0] = i2c_start(US_left + I2C_READ);
// address I2C device ultrasonic sensor with read access
if (busy_US[0] == 0)
{
distance[0] = i2c_readNak(); // read one byte
i2c_stop(); // release I2C bus
utoa(distance[0], buffer, 10);
// move cursor to position on line 0
lcd_gotoxy(10,0);
// put string to display (line 0)
lcd_puts(buffer);
lcd_puts(" ");
}
else
{
i2c_stop(); // release I2C bus
}
busy_US[1] = i2c_start(US_front + I2C_READ);
// address I2C device ultrasonic sensor with read access
if (busy_US[1] == 0)
{
distance[1] = i2c_readNak(); // read one byte
i2c_stop(); // release I2C bus
utoa(distance[1], buffer, 10);
// move cursor to position on line 0
lcd_gotoxy(14,0);
// put string to display (line 0)
lcd_puts(buffer);
lcd_puts(" ");
}
else
{
i2c_stop(); // release I2C bus
}
busy_US[2] = i2c_start(US_right + I2C_READ);
// address I2C device ultrasonic sensor with read access
if (busy_US[2] == 0)
{
distance[2] = i2c_readNak(); // read one byte
i2c_stop(); // release I2C bus
utoa(distance[2], buffer, 10);
// move cursor to position on line 0
lcd_gotoxy(18,0);
// put string to display (line 0)
lcd_puts(buffer);
lcd_puts(" ");
}
else
{
i2c_stop(); // release I2C bus
}
i2c_start(US_general + I2C_WRITE);
// address I2C device ultrasonic sensor with write access
i2c_write(Start_US); //start new ultrasonic measurement
i2c_stop(); // release I2C bus
Lesezeichen