adc使用问题
Posted: 2025-08-22 7:42
使用官网这个例程,我改了一下adc通道,发现读的adc好像永远是第一次的值,没有实时改变。
后面把fopen和fclose放到循环里面才实时变化,是循环调用的fseek是没起作用吗?
我改成这样就行了
后面把fopen和fclose放到循环里面才实时变化,是循环调用的fseek是没起作用吗?
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
printf("Press Ctrl+C to quit\n");
const char *adc_dir = "/sys/bus/iio/devices/iio:device0";
char in_voltage2_raw_path[256];
char in_voltage_scale_path[256];
sprintf(in_voltage2_raw_path, "%s/in_voltage2_raw", adc_dir);
sprintf(in_voltage_scale_path, "%s/in_voltage_scale", adc_dir);
FILE *scale_file = fopen(in_voltage_scale_path, "r");
FILE *in2_raw_file = fopen(in_voltage2_raw_path, "r");
while (1) {
char buffer[32];
fseek(scale_file, 0, SEEK_SET);
fseek(in2_raw_file, 0, SEEK_SET);
if (scale_file && in2_raw_file) {
fgets(buffer, sizeof(buffer), scale_file);
float scale = strtof(buffer, NULL);
fgets(buffer, sizeof(buffer), in2_raw_file);
int in2_raw_value = atoi(buffer);
float in2_voltage = (in2_raw_value * scale) / 1000.0;
printf("IN2 Voltage: %.6f V\n", in2_voltage);
}
sleep(1);
}
fclose(scale_file);
fclose(in2_raw_file);
return 0;
}Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
printf("Press Ctrl+C to quit\n");
const char *adc_dir = "/sys/bus/iio/devices/iio:device0";
char in_voltage2_raw_path[256];
char in_voltage_scale_path[256];
sprintf(in_voltage2_raw_path, "%s/in_voltage2_raw", adc_dir);
sprintf(in_voltage_scale_path, "%s/in_voltage_scale", adc_dir);
while (1) {
FILE *scale_file = fopen(in_voltage_scale_path, "r");
FILE *in2_raw_file = fopen(in_voltage2_raw_path, "r");
char buffer[32];
fseek(scale_file, 0, SEEK_SET);
fseek(in2_raw_file, 0, SEEK_SET);
if (scale_file && in2_raw_file) {
fgets(buffer, sizeof(buffer), scale_file);
float scale = strtof(buffer, NULL);
fgets(buffer, sizeof(buffer), in2_raw_file);
int in2_raw_value = atoi(buffer);
float in2_voltage = (in2_raw_value * scale) / 1000.0;
printf("IN2 Voltage: %.6f V\n", in2_voltage);
}
fclose(scale_file);
fclose(in2_raw_file);
sleep(1);
}
return 0;
}