#include <stdio.h>
#include <Wire.h>
#include <Arduino.h>
#define DEVICE_ADDRESS 0x3E // address of AQM1602XA-GBW-IIC
#define AHT25_ADDRESS 0x38 // address of ATH25
char line0[] = "AQM1602XA-GBW-II";
char line1[] = " yoshikon.com ";
char test0[] = "1234567890123456";
char test1[] = "6543210987654321";
void setup(void){
 Wire.setClock(115200);
 Wire.begin();
 init_LCD();
 writeLCDclear();
 delay(100);
 writeCommand(0x02);
 for(int i=0; i<15; i++){writeData(test0[i]);}
 delay(100);
 for(int i=0; i<15; i++){
  writeCommand(0x40 + 0x80 + i);
  writeData(test1[i]);
 }
 delay(500);
}

loop(){
 readData();
 delay(700);
 delay(700);
}
void readData(void){
long int x;
byte digraw[8];
char humidi[15];
char data_t[] = "Temp:";
char data_h[] = "Humi:";
uint32_t hum_raw, temp_raw, hhh, ttt;
float T;
float H;
char t_data[7];
char h_data[7];
int tempp;
int humm;
int t;
int tt;
int i;
 Wire.beginTransmission(AHT25_ADDRESS);
 Wire.write(0xAC);
 Wire.write(0x33);
 Wire.write(0x00);
 Wire.endTransmission();
 delay(80);
 Wire.requestFrom(AHT25_ADDRESS, 7);
 for(i = 0; i < 7; i++){digraw[i] = Wire.read();}
 hum_raw = ((uint32_t)digraw[1] << 12) | ((uint32_t)digraw[2] << 4) | (((uint32_t)digraw[3] >> 4) & 0x0F);
 temp_raw = (((uint32_t)digraw[3] & 0x0F) << 16 ) | ((uint32_t)digraw[4] << 8) | (uint32_t)digraw[5];
 H = (hum_raw / 1048576.0 * 100);
 T = (temp_raw / 1048576.0 * 200 ) - 50;
 sprintf(tempera, "T:%2.1fdC H:%2.1f%s ", T, H, "%");
 sprintf(TTT, "%2.1f", T);
 sprintf(HHH, "%2.1f", H);
  //writeCommand(0x02);
  //for(int i = 0; i < sizeof(tempera); i++){writeData(tempera[i]);}
 delay(10);
}
void writeCommand(char t_command){
 Wire.beginTransmission(DEVICE_ADDRESS);
 Wire.write(0x00);
 Wire.write(t_command);
 Wire.endTransmission();
 delay(10);
}
void writeData(char t_data){
 Wire.beginTransmission(DEVICE_ADDRESS);
 Wire.write(0x40);
 Wire.write(t_data);
 Wire.endTransmission();
 delay(10);
}
void writeLCDclear(){
 Wire.beginTransmission(DEVICE_ADDRESS);
 Wire.write(0x20);
 Wire.write(0x01);
 Wire.endTransmission();
}
void init_LCD(void){
 delay(100);
 writeCommand(0x38); // FUNCTION SET
 delay(20);
 writeCommand(0x39); // IS=1กกกก
 delay(20);
 writeCommand(0x14); // INT OSC FREQUENCY
 delay(20);
 writeCommand(0x73); // CONTRAST SET 0,1,2,3
 delay(20);
 writeCommand(0x56); // CONTRAST SET 4,5
 delay(20);
 writeCommand(0x6C); // F0LLOWER CONTROL
 delay(20);
 writeCommand(0x38); // IS=0
 delay(20);
 writeCommand(0x0C); // Display ON
 delay(20);
 writeCommand(0x01); // Clear Display
 delay(20);
 writeCommand(0x06); // Entry Mode
 delay(20);
}