作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试每 10 秒使用一次周期性任务来读取 ADC 引脚 ADC0 至 ADC5。为此,我使用 read() 读取 4 个字节。读取的值可以在 0 - 4095 之间变化(理论上)。然而,我似乎并不是每次都能得到准确的读数。此外,当我在 adc_read() 函数中评论此 [printf ("value of pin ADC%d =%.4s\n", pin, val);] 行时,我得到的值不正确,并且通常最终得到所有引脚显示相同的值。
这是正确的方法吗?
注意:我在 gcc 中使用 -O0 开关以避免优化问题。
谢谢。
这是我正在使用的读取功能---->
int adc_read(unsigned int pin)
{
int fd, len, j;
char buf[MAX_BUF];
char val[3];
len = snprintf(buf, sizeof(buf), "/sys/devices/ocp.2/helper.9/AIN%d", pin);
fd = open(buf, O_RDONLY);
if (fd < 0) {
perror("adc/get-value");
}
read(fd, &val, 4);
close(fd);
}
printf ("value of pin ADC%d =%.4s \n", pin, val);
return atoi(&val);
}
我在这样的周期性任务中调用它----->
int main(int argc, char **argv, char **envp)
{
int v0, v1, v2, v3, v4, v5;
adc_ports_enable(); // Enable ADC pins
make_periodic (10000000, &info);
while (1)
{
v0 = adc_read(0);
v1 = adc_read(1);
v2 = adc_read(2);
v3 = adc_read(3);
v4 = adc_read(4);
v5 = adc_read(5);
printf("At %d:%d:%d v0= %d v1= %d v2= %d v3= %d v4= %d v5= %d\n", tm.tm_hour, tm.tm_min, tm.tm_sec, v0, v1, v2, v3, v4, v5);
wait_period (&info);
}
return 0;
}
示例输出:
value of pin ADC0 =1798
value of pin ADC1 =1714
value of pin ADC2 =1229
value of pin ADC3 =736
value of pin ADC4 =579
value of pin ADC5 =678
At 0:56:0 v0= 1798 v1= 1714 v2= 1229 v3= 736 v4= 579 v5= 678
注释 adc_read 中的 printf() 时的示例输出:
At 1:29:26 v0= 648 v1= 1711 v2= 577 v3= 577 v4= 577 v5= 577
At 1:29:36 v0= 762 v1= 762 v2= 762 v3= 762 v4= 762 v5= 762
At 1:29:46 v0= 6 v1= 6 v2= 6 v3= 6 v4= 6 v5= 6
At 1:29:56 v0= 1797 v1= 1797 v2= 1797 v3= 1797 v4= 1797 v5= 1797
最佳答案
在你的函数 adc_read() 中你有......
char val[3]; // three bytes!
但后来在同一个函数中......
read(fd, &val, 4); // Oops! reads four bytes!
因此,val 字符串未终止。函数 atoi() 需要一个以 null 结尾的字符串。越来越垃圾了
关于c - Beagle 骨 ADC 读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22818751/
我正在尝试每 10 秒使用一次周期性任务来读取 ADC 引脚 ADC0 至 ADC5。为此,我使用 read() 读取 4 个字节。读取的值可以在 0 - 4095 之间变化(理论上)。然而,我似乎并
我正在尝试每 10 秒使用一次周期性任务来读取 ADC 引脚 ADC0 至 ADC5。为此,我使用 read() 读取 4 个字节。读取的值可以在 0 - 4095 之间变化(理论上)。然而,我似乎并
我是一名优秀的程序员,十分优秀!