Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
en:wb_si1132 [2015/04/24 18:58] john1117 |
en:wb_si1132 [2015/04/27 09:52] (current) john1117 |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <file c wb_si1132.c> | ||
+ | //------------------------------------------------------------------------------ | ||
+ | // | ||
+ | // si1132 of Weather-Board with 16x2 lcd Application. | ||
+ | // | ||
+ | // Defined port number is wiringPi port number. | ||
+ | // | ||
+ | // Compile : gcc -o <create excute file name> <source file name> -lwiringPi | ||
+ | // -lwiringPiDev -lpthread | ||
+ | // Run : sudo ./<created excute file name> | ||
+ | // | ||
+ | //------------------------------------------------------------------------------ | ||
+ | |||
+ | #include <fcntl.h> | ||
+ | #include <stdio.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <stdint.h> | ||
+ | |||
+ | #include <unistd.h> | ||
+ | #include <string.h> | ||
+ | #include <time.h> | ||
+ | |||
+ | #include <wiringPi.h> | ||
+ | #include <lcd.h> | ||
+ | |||
+ | #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 ; | ||
+ | } | ||
+ | </file> |