//------------------------------------------------------------------------------ // // si1132 of Weather-Board with 16x2 lcd Application. // // Defined port number is wiringPi port number. // // Compile : gcc -o -lwiringPi // -lwiringPiDev -lpthread // Run : sudo ./ // //------------------------------------------------------------------------------ #include #include #include #include #include #include #include #include #include #define LCD_ROW 2 // 16 Char #define LCD_COL 16 // 2 Line #define LCD_BUS 4 // Interface 4 Bit mode #define LCD_UPDATE_PERIOD 300 // 300ms #define PORT_LCD_RS 7 // GPIOY.BIT3(#83) #define PORT_LCD_E 0 // GPIOY.BIT8(#88) #define PORT_LCD_D4 2 // GPIOX.BIT19(#116) #define PORT_LCD_D5 3 // GPIOX.BIT18(#115) #define PORT_LCD_D6 1 // GPIOY.BIT7(#87) #define PORT_LCD_D7 4 // GPIOX.BIT7(#104) static unsigned char lcdFb[LCD_ROW][LCD_COL] = {0, }; static int lcdHandle = 0; static int ledPos = 0; static const char *si1132_nodes[] = { "/sys/devices/i2c-1/1-0060/visible_index", "/sys/devices/i2c-1/1-0060/ir_index", "/sys/devices/i2c-1/1-0060/uv_index", }; unsigned char visible[10] = {0, }; unsigned char ir[10] = {0, }; unsigned char uv[10] = {0, }; static void getSysInfo(void) { int visfd, irfd, uvfd; visfd = open(si1132_nodes[0], O_RDONLY); read(visfd, visible, 10); irfd = open(si1132_nodes[0], O_RDONLY); read(irfd, ir, 10); uvfd = open(si1132_nodes[0], O_RDONLY); read(uvfd, uv, 10); close(visfd); close(irfd); close(uvfd); } static void lcd_update (void) { int i, j; memset((void *)&lcdFb, ' ', sizeof(lcdFb)); getSysInfo(); //sprintf(lcdFb[0], "VIS : %d Lux", atoi(visible)); sprintf(lcdFb[0], "IR : %d Lux", atoi(ir)); sprintf(lcdFb[1], "UV : %.1f index", atof(uv)/100.0); lcdFb[0][strlen(lcdFb[0])] = ' '; lcdFb[1][strlen(lcdFb[1])] = ' '; for(i = 0; i < LCD_ROW; i++) { lcdPosition (lcdHandle, 0, i); for(j = 0; j < LCD_COL; j++) lcdPutchar(lcdHandle, lcdFb[i][j]); } } int system_init(void) { int i, j; // LCD Init lcdHandle = lcdInit(LCD_ROW, LCD_COL, LCD_BUS, PORT_LCD_RS, PORT_LCD_E, PORT_LCD_D4, PORT_LCD_D5, PORT_LCD_D6, PORT_LCD_D7, 0, 0, 0, 0); if(lcdHandle < 0) { fprintf(stderr, "%s : lcdInit failed!\n", __func__); return -1; } return 0; } int main (int argc, char *argv[]) { int timer = 0 ; wiringPiSetup (); if (system_init() < 0) { fprintf (stderr, "%s: System Init failed\n", __func__); return -1; } for(;;) { usleep(100000); if (millis () < timer) continue ; timer = millis () + LCD_UPDATE_PERIOD; // lcd update lcd_update(); } return 0 ; }