程序
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#define SYSFS_IIO_PATH "/sys/bus/iio/devices/iio:device0"
int read_adc_raw(int channel)
{
char path[256];
char buf[32];
int fd, ret;
int value;
// 构造路径,例如 /sys/bus/iio/devices/iio:device0/in_voltage0_raw
snprintf(path, sizeof(path), "%s/in_voltage%d_raw", SYSFS_IIO_PATH, channel);
fd = open(path, O_RDONLY);
if (fd < 0) {
fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
ret = read(fd, buf, sizeof(buf) - 1);
if (ret < 0) {
fprintf(stderr, "Failed to read %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
buf[ret] = '\0';
close(fd);
value = atoi(buf);
return value;
}
int main(int argc, char *argv[])
{
int channel = 0; // 默认通道0
int raw_value;
if (argc > 1)
channel = atoi(argv[1]);
raw_value = read_adc_raw(channel);
if (raw_value < 0) {
fprintf(stderr, "Read ADC channel %d failed\n", channel);
return 1;
}
printf("ADC channel %d raw value: %d\n", channel, raw_value);
return 0;
}
编译与运行
gcc -o user_adc_read user_adc_read.c
./user_adc_read 0 # 读取通道0的原始值