3 #include <sys/types.h> // open
4 #include <sys/stat.h> // open
5 #include <fcntl.h> // open
6 #include <unistd.h> // read/write usleep
7 #include <stdlib.h> // exit
8 #include <inttypes.h> // uint8_t, etc
9 #include <linux/i2c-dev.h> // I2C bus definitions
11 float getVin(int pin) {
14 int ads_address = 0x48;
25 // open device on /dev/i2c-0
26 if ((fd = open("/dev/i2c-0", O_RDWR)) < 0) {
27 printf("Error: Couldn't open device! %d\n", fd);
31 // connect to ads1115 as i2c slave
32 if (ioctl(fd, I2C_SLAVE, ads_address) < 0) {
33 printf("Error: Couldn't find device on address!\n");
37 // AIN0 and GND, 4.096v, 128s/s
39 buf[0] = 1; // config register is 1
40 buf[1] = pinCodes[pin];
42 if (write(fd, buf, 3) != 3) {
43 perror("Write to register 1");
49 // wait for conversion complete
51 if (read(fd, buf, 2) != 2) {
52 perror("Read conversion");
55 } while (buf[0] & 0x80 == 0);
57 // read conversion register
58 buf[0] = 0; // conversion register is 0
59 if (write(fd, buf, 1) != 1) {
60 perror("Write register select");
63 if (read(fd, buf, 2) != 2) {
64 perror("Read conversion");
68 // convert output and display results
69 val = (int16_t)buf[0]*256 + (uint16_t)buf[1];
73 return (float)val*4.096/32768.0;
79 for ( i=0; i<=3; i++) {
80 printf("Vin%1d (V) %5.3f\n",i,getVin(i));