2
我试图在纯C中使用Arduio Uno,因为我无法将Arduino IDE用于我的高级设计项目。在某种程度上,我成功地使串行通信正常工作,数字输出/输入和模拟输入。我正在阅读模拟输入,但其中大部分都是20,000+,这是很高的。这应该是一个10位的ADC,而我只是试图使用8位。为什么我的结果读100X是最高的呢?ADC在arduino中C
void init_aio(){
DIDR0 = 0x00; //Digital input disabled on all ADC ports
PRR &= ~(1<<PRADC); //ADC turned on
ADMUX = 0x60; //AVcc, right adjusted, ADC0 pin
ADCSRA = 0xcF; //ADC Enabled, no auto trigger, Iterrupt enabled, 128 prescaller
}
int read_analog(){
reading = APin0;
ADCSRA |= 1<<ADSC; //conversion start
reading = abs(reading);
return reading;
}
我能想到的唯一事情是,我使用的 “INT reading_str = itoa(读,缓冲液,10);”使其成为可打印的价值。当我直接打印阅读时,它会向终端打印垃圾。 (炭缓冲液[100];是缓冲器是什么)
的乌诺使用一个ATMEGA328P: www.atmel.com/Images/doc8161.pdf
感谢您的帮助。
尝试屏蔽到10位,即'value&0x3FF';前6位可能不会被初始化为零。然后您可以通过将模拟引脚接地来检查输入是否如预期的那样。 – Polynomial
太棒了!就是这样。非常感谢!想让这个答案得到一票吗? –
很高兴帮助:) – Polynomial