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







Zitieren
Lesezeichen