I2C scanner printf out of line,不明原因

问题描述 投票:0回答:0

如果设备连接到 I2C 总线,我已经制作了一个 I2C 扫描器代码,打印出 I2C 地址和指示器。它适用于前 0...123 个地址,直到打印最后一行 4...127

我的问题:最后一行地址怎么可能打印在“#2#”之后,而代码说明这是不可能的。希望有人能告诉我如何解决这种奇怪的代码行为。

此代码在 ESP8266 上运行并使用 Arduino 库。 在 ATmega328 上运行的相同代码不会显示这种奇怪的行为。

这是代码

uint8_t I2C_scan(uint8_t mode){         // mode0=no output, Mode1= Summery, mode2=full output

uint8_t device_cnt=0, I2C_adr=0, cnt;
uint8_t rc, colcnt=0, collumns=4;
struct I2C_devices {
    uint8_t I2C_adr;
    char*   deviceID;
    char*   type;
} I2Cdevice[]={{0x36,"AS5600","Magn Rotary"},{0x27, "PCF8574","GPIO(diplay)"},{0x3C,"DS1306","OLED-Disp"}, {0x68,"DS3231","RTC"}, 0x57, "AT24C32", "2KB Mem" };


switch (mode){
    case 2 : { 
        printf("I2C Scanner\n");
        for(cnt= 1; cnt <= 14*collumns+5; cnt++) printf("%s","=");
        printf("\n     ");
        for(colcnt=0;colcnt<collumns;colcnt++)  printf("%6s%02u%6s","",colcnt,"|");
        
        for(I2C_adr = 0; I2C_adr <= 127; I2C_adr++) {
            Wire.beginTransmission(I2C_adr);
            rc = Wire.endTransmission();
            if ( ((I2C_adr)%collumns)==0) printf("\n %03u\t", I2C_adr); 
            if (rc) printf("0x%02X = %s  | ", I2C_adr, " - ");
            else    printf("0x%02X = %s  | ", I2C_adr, "Fnd");
        }
        printf("#1#\n");
        for(cnt= 1; cnt <= 14*collumns+5; cnt++) printf("%s","=");
        printf("\n#2#\n");

    } break;

这是输出

c++ visual-studio-code esp8266
© www.soinside.com 2019 - 2024. All rights reserved.