case 6: if (subscreen == 0) { lcd_gotoxy(0, 0); lcd_puts("Czujnik HIH8120"); lcd_gotoxy(0, 1); lcd_puts("I2C - wilg/temp"); } else { // Zmienna na dane uint8_t data[4]; volatile uint16_t res_H, res_T; volatile uint16_t humidity, temperature; // *100 // Sekwencja I2C — na bazie działającego kodu: TWI_start(); TWI_address_transmit(); TWI_stop(); _delay_ms(50); // minimum 36 ms — spokojnie 50 ms OK TWI_start(); TWI_address_receive(); data[0] = TWI_receive_ACK(); data[1] = TWI_receive_ACK(); data[2] = TWI_receive_ACK(); data[3] = TWI_receive_NACK(); TWI_stop(); // Konwersja danych (z Twojego prostego kodu): res_H = ((uint16_t)(data[0] & 0x3F) << 8) | data[1]; humidity = (uint16_t)(((float)res_H / 16382.0f) * 10000.0f); // *100 res_T = ((uint16_t)(data[2]) << 6) | (data[3] >> 2); temperature = (uint16_t)(((float)res_T / 16382.0f) * 16500.0f - 4000.0f); // *100 lcd_gotoxy(0, 0); char buf[32]; sprintf(buf, "Wilg: %d.%02d %%", humidity / 100, humidity % 100); lcd_puts(buf); lcd_gotoxy(0, 1); sprintf(buf, "Temp: %d.%02d C", temperature / 100, temperature % 100); lcd_puts(buf); } break;