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 — działająca:
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:
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, "Temp: %d.%02d C", temperature / 100, temperature % 100);
lcd_puts(buf);
lcd_gotoxy(0, 1);
sprintf(buf, "Wilg: %d.%02d %%", humidity / 100, humidity % 100);
lcd_puts(buf);
}
break;
Read 6 times, last 27 hours ago