Page 1 of 1

adc使用问题

Posted: 2025-08-22 7:42
by wjh
使用官网这个例程,我改了一下adc通道,发现读的adc好像永远是第一次的值,没有实时改变。

后面把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;
}

Re: adc使用问题

Posted: 2025-08-23 10:04
by Crocodile
您好,感谢您的反馈,我们会在验证后对wiki进行改正